aboutsummaryrefslogtreecommitdiff
path: root/atom/packages/vim-mode/lib/operators/indent-operators.coffee
blob: ba3c155efcff0436cc97ee4a4291b5d30f7e0231 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
_ = require 'underscore-plus'
{Operator} = require './general-operators'

class AdjustIndentation extends Operator
  execute: (count) ->
    mode = @vimState.mode
    @motion.select(count)
    originalRanges = @editor.getSelectedBufferRanges()

    if mode is 'visual'
      @editor.transact =>
        _.times(count ? 1, => @indent())
    else
      @indent()

    @editor.clearSelections()
    @editor.getLastCursor().setBufferPosition([originalRanges.shift().start.row, 0])
    for range in originalRanges
      @editor.addCursorAtBufferPosition([range.start.row, 0])
    @editor.moveToFirstCharacterOfLine()
    @vimState.activateNormalMode()

class Indent extends AdjustIndentation
  indent: ->
    @editor.indentSelectedRows()

class Outdent extends AdjustIndentation
  indent: ->
    @editor.outdentSelectedRows()

class Autoindent extends AdjustIndentation
  indent: ->
    @editor.autoIndentSelectedRows()

module.exports = {Indent, Outdent, Autoindent}