-{Range, Point} = require 'atom'
+{Range, Point, Disposable} = require 'atom'
 {
   translatePointAndClip
   getRangeByTranslatePointAndClip

  normalize: ->
    unless @selection.isEmpty()
      if @hasProperties() and @getProperties().wise is 'linewise'
        @selectByProperties(@getProperties())
        @translateSelectionEndAndClip('backward', translate: false)
      else
        @translateSelectionEndAndClip('backward')
    @clearProperties()

    @setBufferRange([tail, head], options)
    @setReversedState(head.isLessThan(tail))

  applyColumnFromProperties: ->
    selectionProperties = @getProperties()
    return unless selectionProperties?
    {head, tail} = selectionProperties

    if @selection.isReversed()
      [start, end] = [head, tail]
    else
      [start, end] = [tail, head]
    [start.row, end.row] = @selection.getBufferRowRange()
    @setBufferRange([start, end])
    @translateSelectionEndAndClip('backward', translate: false)

  # set selections bufferRange with default option {autoscroll: false, preserveFolds: true}
  setBufferRange: (range, options={}) ->
    if options.keepGoalColumn ? true
