 
       point = Point.max(point, Point.ZERO)
 
-  point
+  screenPoint = editor.screenPositionForBufferPosition(point, clipDirection: direction)
+  editor.bufferPositionForScreenPosition(screenPoint)
 
 class SelectionWrapper
   constructor: (@selection) ->

  getStartRow: -> @getRowFor('start')
  getEndRow: -> @getRowFor('end')


  getTailBufferRange: ->
    {editor} = @selection
    if (@isSingleRow() and @isLinewise())
      console.log "singleRow"
      editor.bufferRangeForBufferRow(@getTailRow(), includeNewline: true)
    else
      console.log "normal tail"
      tailStart = @selection.getTailScreenPosition()
      # tailStart = @selection.getTailBufferPosition()
      if @selection.isReversed()
        # tailEnd = translatePointAndClip(editor, tailStart, 'backward')
        tailEnd = editor.clipScreenPosition(tailStart.translate([0, -1]), clipDirection: 'backward')
      else
        # tailEnd = translatePointAndClip(editor, tailStart, 'forward')
        tailEnd = editor.clipScreenPosition(tailStart.translate([0, +1]), clipDirection: 'forward')

      # tailStart = @selection.getTailScreenPosition()
      # if @selection.isReversed()
      #   tailEnd = translatePointAndClip(editor, tailStart, 'backward')
      # else
      #   tailEnd = translatePointAndClip(editor, tailStart, 'forward')

      editor.bufferRangeForScreenRange([tailStart, tailEnd])

  preserveCharacterwise: ->
    properties = @detectCharacterwiseProperties()

  translateSelectionEndAndClip: (direction) ->
    {goalColumn} = @selection.cursor
    {start, end} = @getBufferRange()
    # console.log 'bef', end.toString()
    newEnd = translatePointAndClip(@selection.editor, end, direction)
    # console.log 'aft', newEnd.toString()
    @setBufferRange([start, newEnd], {preserveFolds: true})
    @selection.cursor.goalColumn = goalColumn if goalColumn

