         when @isInclusive()
           @selectInclusive(selection, options)
         else
-          @selectExclusive(selection, options)
+          selection.modifySelection =>
+            @moveCursor(selection.cursor, options)
 
     @editor.mergeCursors()
     @editor.mergeIntersectingSelections()

  # Action
  # -------------------------
  selectInclusive: (selection, options) ->
    {range, reversed} = @getInclusiveRange(selection, options)
    selection.setBufferRange(range, {reversed})

  selectExclusive: (selection, options) ->
    selection.modifySelection =>
      @moveCursor(selection.cursor, options)

  getInclusiveRange: (selection, options) ->
    if selection.isEmpty()
      originallyEmpty = true
      selection.selectRight()

    {cursor} = selection
    tailRange = @getTailRange(selection)
    pointSrc = selection.getTailBufferPosition()
    unless selection.isReversed()
      cursor.moveLeft()
    selection.clear()
    @moveCursor(cursor, options)
    pointDst = cursor.getBufferPosition()

    switch
      when pointSrc.isEqual(pointDst) and originallyEmpty
        # When Motion is used as target of Operator,
        # selection is initially empty and should not
        # select anything when motion movement not happend.
        {range: new Range(pointSrc, pointDst), reversed: false}
      when pointSrc.isLessThanOrEqual(pointDst)
        cursor.moveRight()
        pointDst = cursor.getBufferPosition()
        range = new Range(pointSrc, pointDst).union(tailRange)
        reversed = false
        {range, reversed}
      else
        range = new Range(pointDst, pointSrc).union(tailRange)
        reversed = true
        {range, reversed}

  # This tail position is always selected even if selection isReversed() as a result of cursor movement.
  getTailRange: (selection) ->

# Refactoring status: 40%
{Point, Range} = require 'atom'
_ = require 'underscore-plus'

