   onDidChangeCursorPosition: (callback) ->
     @emitter.on 'did-change-cursor-position', callback
 
+  # Essential: Calls your `callback` when a selection's screen range changes.
+  #
+  # * `callback` {Function}
+  #   * `selection` {Selection} that moved
+  #
+  # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.
+  onDidChangeSelectionRange: (callback) ->
+    @emitter.on 'did-change-selection-range', callback
+
+  # Extended: Calls your `callback` when soft wrap was enabled or disabled.
+  #
+  # * `callback` {Function}
+  #
+  # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.
+  onDidChangeSoftWrapped: (callback) ->
+    @displayBuffer.onDidChangeSoftWrapped(callback)
+
+  # Extended: Calls your `callback` when the grammar that interprets and colorizes the text has
+  # been changed.
+  #
+  # * `callback` {Function}
+  #
+  # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.
+  onDidChangeGrammar: (callback) ->
+    @emitter.on 'did-change-grammar', callback
+
+  # Extended: Calls your `callback` when the result of {::isModified} changes.
+  #
+  # * `callback` {Function}
+  #
+  # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.
+  onDidChangeModified: (callback) ->
+    @getBuffer().onDidChangeModified(callback)
+
+  # Extended: Calls your `callback` when the buffer's underlying file changes on
+  # disk at a moment when the result of {::isModified} is true.
+  #
+  # * `callback` {Function}
+  #
+  # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.
+  onDidConflict: (callback) ->
+    @getBuffer().onDidConflict(callback)
+
+  # Extended: Calls your `callback` before text has been inserted.
+  #
+  # * `callback` {Function}
+  #   * `event` event {Object}
+  #     * `text` {String} text to be inserted
+  #     * `cancel` {Function} Call to prevent the text from being inserted
+  #
+  # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.
+  onWillInsertText: (callback) ->
+    @emitter.on 'will-insert-text', callback
+
+  # Extended: Calls your `callback` adter text has been inserted.
+  #
+  # * `callback` {Function}
+  #   * `event` event {Object}
+  #     * `text` {String} text to be inserted
+  #
+  # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.
+  onDidInsertText: (callback) ->
+    @emitter.on 'did-insert-text', callback
+
+  # Public: Invoke the given callback after the buffer is saved to disk.
+  #
+  # * `callback` {Function} to be called after the buffer is saved.
+  #   * `event` {Object} with the following keys:
+  #     * `path` The path to which the buffer was saved.
+  #
+  # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.
+  onDidSave: (callback) ->
+    @getBuffer().onDidSave(callback)
+
+  # Extended: Calls your `callback` when a {Cursor} is added to the editor.
+  # Immediately calls your callback for each existing cursor.
+  #
+  # * `callback` {Function}
+  #   * `selection` {Selection} that was added
+  #
+  # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.
+  observeCursors: (callback) ->
+    callback(cursor) for cursor in @getCursors()
+    @onDidAddCursor(callback)
+
+  # Extended: Calls your `callback` when a {Cursor} is added to the editor.
+  #
+  # * `callback` {Function}
+  #   * `cursor` {Cursor} that was added
+  #
+  # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.
+  onDidAddCursor: (callback) ->
+    @emitter.on 'did-add-cursor', callback
+
+  # Extended: Calls your `callback` when a {Cursor} is removed from the editor.
+  #
+  # * `callback` {Function}
+  #   * `cursor` {Cursor} that was removed
+  #
+  # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.
+  onDidRemoveCursor: (callback) ->
+    @emitter.on 'did-remove-cursor', callback
+
   # Extended: Calls your `callback` when a {Selection} is added to the editor.
   # Immediately calls your callback for each existing selection.
   #

  # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.
  onDidRemoveSelection: (callback) ->
    @emitter.on 'did-remove-selection', callback

  # Essential: Calls your `callback` when a selection's screen range changes.
  #
  # * `callback` {Function}
  #   * `selection` {Selection} that moved
  #
  # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.
  onDidChangeSelectionRange: (callback) ->
    @emitter.on 'did-change-selection-range', callback

  # Extended: Calls your `callback` with each {Decoration} added to the editor.
  # Calls your `callback` immediately for any existing decorations.

  onDidChange: (callback) ->
    @emitter.on 'did-change', callback

  # Essential: Invoke `callback` when the buffer's contents change. It is
  # emit asynchronously 300ms after the last buffer change. This is a good place
  # to handle changes to the buffer without compromising typing performance.
  #
