diff --git a/spec/app/display-buffer-spec.coffee b/spec/app/display-buffer-spec.coffee index dad64cf1f..c15c54ab1 100644 --- a/spec/app/display-buffer-spec.coffee +++ b/spec/app/display-buffer-spec.coffee @@ -737,3 +737,22 @@ describe "DisplayBuffer", -> marker.destroy() expect(marker.isValid()).toBeFalsy() expect(displayBuffer.getMarker(marker.id)).toBeUndefined() + + describe "marker-added and marker-removed events", -> + it "emits the appropriate event when a marker is created, destroyed, or its validity changes", -> + displayBuffer.on 'marker-added', markerAddedHandler = jasmine.createSpy("markerAddedHandler") + displayBuffer.on 'marker-removed', markerRemovedHandler = jasmine.createSpy("markerRemovedHandler") + + marker = displayBuffer.markBufferRange([[5, 4], [5, 10]]) + expect(markerAddedHandler).toHaveBeenCalledWith(marker) + markerAddedHandler.reset() + + buffer.change([[5, 3], [5, 11]], 'hey') + expect(markerRemovedHandler).toHaveBeenCalledWith(marker) + markerRemovedHandler.reset() + + buffer.undo() + expect(markerAddedHandler).toHaveBeenCalledWith(marker) + + marker.destroy() + expect(markerRemovedHandler).toHaveBeenCalledWith(marker) diff --git a/src/app/display-buffer.coffee b/src/app/display-buffer.coffee index 595bfa481..9f3063608 100644 --- a/src/app/display-buffer.coffee +++ b/src/app/display-buffer.coffee @@ -33,6 +33,12 @@ class DisplayBuffer @tokenizedBuffer.on 'grammar-changed', (grammar) => @trigger 'grammar-changed', grammar @tokenizedBuffer.on 'changed', @handleTokenizedBufferChange @buffer.on 'markers-updated', @handleMarkersUpdated + @buffer.on 'marker-added', (marker) => + @trigger 'marker-added', @getMarker(marker.id) + @buffer.on 'marker-removed', (marker) => + marker = @getMarker(marker.id) + delete @markers[marker.id] + @trigger 'marker-removed', marker buildLineMap: -> @lineMap = new LineMap @@ -468,7 +474,7 @@ class DisplayBuffer # # Returns the {DisplayBufferMarker} (if it exists). getMarker: (id) -> - @markers[id] ? do => + @markers[id] ?= do => if bufferMarker = @buffer.getMarker(id) new DisplayBufferMarker({bufferMarker, displayBuffer: this}) @@ -548,7 +554,6 @@ class DisplayBuffer ### # Internal # ### - pauseMarkerObservers: -> marker.pauseEvents() for marker in @getMarkers()