     @updateCursorState(cursor) for cursor in @model.cursors # using property directly to avoid allocation
     return
 
-  updateCursorState: (cursor, destroyOnly = false) ->
-    delete @state.content.cursors[cursor.id]
-
-    return if destroyOnly
+  updateCursorState: (cursor) ->
     return unless @startRow? and @endRow? and @hasPixelRectRequirements() and @baseCharacterWidth?
     return unless cursor.isVisible() and @startRow <= cursor.getScreenRow() < @endRow
 

  observeCursor: (cursor) ->
    didChangePositionDisposable = cursor.onDidChangePosition =>
      @shouldUpdateHiddenInputState = true if cursor.isLastCursor()
      @pauseCursorBlinking()
      @updateCursorState(cursor)

      @emitDidUpdateState()

    didChangeVisibilityDisposable = cursor.onDidChangeVisibility =>
      @updateCursorState(cursor)

    didDestroyDisposable = cursor.onDidDestroy =>
      @disposables.remove(didChangePositionDisposable)
      @disposables.remove(didChangeVisibilityDisposable)
      @disposables.remove(didDestroyDisposable)
      @shouldUpdateHiddenInputState = true
      @updateCursorState(cursor, true)

      @emitDidUpdateState()


  didAddCursor: (cursor) ->
    @observeCursor(cursor)
    @shouldUpdateHiddenInputState = true
    @shouldUpdateCursorsState = true
    @pauseCursorBlinking()

    @emitDidUpdateState()

  startBlinkingCursors: ->
