     @retainSelection = false
     @view?.retainSelection = false
 
-  modifyScreenRange: (fn) ->
-    oldScreenRange = @getScreenRange()
-    fn()
-    if @cursor
-      newScreenRange = @getScreenRange()
-      @trigger 'change-screen-range', newScreenRange unless oldScreenRange.isEqual(newScreenRange)
-
   placeAnchor: ->
     @anchor = @editSession.addAnchor(strong: true)
     @anchor.setScreenPosition(@cursor.getScreenPosition())
-    @anchor.on 'change-screen-position.selection', => @trigger 'change-screen-range'
+    @anchor.on 'change-screen-position.selection', => @emitChangeScreenRangeEvent()
+
+  emitChangeScreenRangeEvent: ->
+    @trigger 'change-screen-range', @getScreenRange()
 
   intersectsBufferRange: (bufferRange) ->
     @getBufferRange().intersectsWith(bufferRange)

    @cursor.selection = this

    @cursor.on 'change-screen-position.selection', (e) =>
      @trigger 'change-screen-range', @getScreenRange() unless e.bufferChanged

    @cursor.on 'destroy.selection', =>
      @cursor = null

      includeNewline = bufferRange.start.column == 0 or bufferRange.start.row >= fold.startRow
      bufferRange = bufferRange.union(fold.getBufferRange({ includeNewline }))

    @editSession.buffer.delete(bufferRange) unless bufferRange.isEmpty()
    @cursor?.setBufferPosition(bufferRange.start)

  deleteLine: ->
    if @isEmpty()
