         @countTimes =>
           return if (not @isLinewise()) and (not @isMovable(topSelection))
           for selection in selections
-            @extendMovingArea(selection)
             @mutate(selection) if @isMovable(selection)
 
   getOverwrittenBySelection: ->


  mutate: (selection) ->
    if @isLinewise()
      @moveLinewise(selection)
    else
      @moveCharacterwise(selection)

  moveLinewise: (selection) ->
    switch @direction
      when 'right' then selection.indentSelectedRows()
      when 'left' then selection.outdentSelectedRows()

  extendMovingArea: (selection) ->
    if not @isLinewise() and @direction is 'right'
      {start, end} = selection.getBufferRange()
      if pointIsAtEndOfLine(@editor, end)
        @editor.setTextInBufferRange([end, end], " ")

  isMovable: (selection) ->
    if @isLinewise()
      true
    else
      switch @direction
        when 'right' then true
        when 'left' then selection.getBufferRange().start.column isnt 0

  moveCharacterwise: (selection) ->
    reversed = selection.isReversed()

    # Pre mutate
    translation = switch @direction
      when 'right' then [[0, 0], [0, +1]]
      when 'left' then [[0, -1], [0, 0]]

    swrap(selection).translate(translation...)
    range = selection.insertText(@getNewText(selection))

    # Post mutate
    range = range.translate(translation.reverse()...)
    selection.setBufferRange(range, {reversed})
    @editor.scrollToCursorPosition({center: true})

  getNewText: (selection) ->
    # Rotate column
    text = selection.getText()
    switch @direction
      when 'right'
        [moving..., replacedText] = text
        replacedText = @getOverwrittenForSelection(selection, replacedText) if @isOverwrite()
        replacedText + moving.join('')
      when 'left'
        [replacedText, moving...] = text
        replacedText = @getOverwrittenForSelection(selection, replacedText) if @isOverwrite()
        moving.join('') + replacedText

class MoveSelectedTextLeft extends MoveSelectedTextRight
  direction: 'left'

        eof = @editor.getEofBufferPosition()
        @editor.setTextInBufferRange([eof, eof], "\n")

  # Characterwise
  # -------------------------
  moveCharacterwise: (selection) ->
    reversed = selection.isReversed()
    # Pre mutate
    translation = switch @direction
      when 'up' then [[-1, 0], [-1, 0]]
