diff options
Diffstat (limited to 'atom/packages/vim-mode/lib/operators/increase-operators.coffee')
| -rw-r--r-- | atom/packages/vim-mode/lib/operators/increase-operators.coffee | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/atom/packages/vim-mode/lib/operators/increase-operators.coffee b/atom/packages/vim-mode/lib/operators/increase-operators.coffee new file mode 100644 index 0000000..e62f781 --- /dev/null +++ b/atom/packages/vim-mode/lib/operators/increase-operators.coffee @@ -0,0 +1,57 @@ +{Operator} = require './general-operators' +{Range} = require 'atom' +settings = require '../settings' + +# +# It increases or decreases the next number on the line +# +class Increase extends Operator + step: 1 + + constructor: -> + super + @complete = true + @numberRegex = new RegExp(settings.numberRegex()) + + execute: (count=1) -> + @editor.transact => + increased = false + for cursor in @editor.getCursors() + if @increaseNumber(count, cursor) then increased = true + atom.beep() unless increased + + increaseNumber: (count, cursor) -> + # find position of current number, adapted from from SearchCurrentWord + cursorPosition = cursor.getBufferPosition() + numEnd = cursor.getEndOfCurrentWordBufferPosition(wordRegex: @numberRegex, allowNext: false) + + if numEnd.column is cursorPosition.column + # either we don't have a current number, or it ends on cursor, i.e. precedes it, so look for the next one + numEnd = cursor.getEndOfCurrentWordBufferPosition(wordRegex: @numberRegex, allowNext: true) + return if numEnd.row isnt cursorPosition.row # don't look beyond the current line + return if numEnd.column is cursorPosition.column # no number after cursor + + cursor.setBufferPosition numEnd + numStart = cursor.getBeginningOfCurrentWordBufferPosition(wordRegex: @numberRegex, allowPrevious: false) + + range = new Range(numStart, numEnd) + + # parse number, increase/decrease + number = parseInt(@editor.getTextInBufferRange(range), 10) + if isNaN(number) + cursor.setBufferPosition(cursorPosition) + return + + number += @step*count + + # replace current number with new + newValue = String(number) + @editor.setTextInBufferRange(range, newValue, normalizeLineEndings: false) + + cursor.setBufferPosition(row: numStart.row, column: numStart.column-1+newValue.length) + return true + +class Decrease extends Increase + step: -1 + +module.exports = {Increase, Decrease} |