diff --git a/spec/app/text-buffer-spec.coffee b/spec/app/text-buffer-spec.coffee index 6095cc9cc..05c6b9b76 100644 --- a/spec/app/text-buffer-spec.coffee +++ b/spec/app/text-buffer-spec.coffee @@ -1027,6 +1027,13 @@ describe 'TextBuffer', -> buffer.undo() expect(marker1.getRange()).toEqual [[4, 23], [4, 26]] + it "restores the marker range exactly on undo", -> + marker = buffer.markRange([[3, 0], [3, 62]]) + buffer.delete([[2, 0], [3, 0]]) + expect(marker.getRange()).toEqual [[2, 0], [2, 62]] + buffer.undo() + expect(marker.getRange()).toEqual [[3, 0], [3, 62]] + describe "when the change follows the marker range", -> it "does not move the marker", -> buffer.insert([6, 5], '...') diff --git a/src/app/buffer-change-operation.coffee b/src/app/buffer-change-operation.coffee index 16f4614f8..556c69743 100644 --- a/src/app/buffer-change-operation.coffee +++ b/src/app/buffer-change-operation.coffee @@ -100,7 +100,7 @@ class BufferChangeOperation newRange invalidateMarkers: (oldRange) -> - _.compact(@buffer.getMarkers().map (marker) -> marker.tryToInvalidate(oldRange)) + @buffer.getMarkers().map (marker) -> marker.tryToInvalidate(oldRange) pauseMarkerObservation: -> marker.pauseEvents() for marker in @buffer.getMarkers(includeInvalid: true) diff --git a/src/app/buffer-marker.coffee b/src/app/buffer-marker.coffee index 253a0ad5d..38a654b74 100644 --- a/src/app/buffer-marker.coffee +++ b/src/app/buffer-marker.coffee @@ -182,26 +182,21 @@ class BufferMarker betweenStartAndEnd = @getRange().containsRange(changedRange, exclusive: false) containsStart = changedRange.containsPoint(@getStartPosition(), exclusive: true) containsEnd = changedRange.containsPoint(@getEndPosition(), exclusive: true) - + previousRange = @getRange() switch @invalidationStrategy when 'between' - if betweenStartAndEnd or containsStart or containsEnd - @invalidate() - [@id] + @invalidate() if betweenStartAndEnd or containsStart or containsEnd when 'contains' - if containsStart or containsEnd - @invalidate() - [@id] + @invalidate() if containsStart or containsEnd when 'never' if containsStart or containsEnd - previousRange = @getRange() if containsStart and containsEnd @setRange([changedRange.end, changedRange.end]) else if containsStart @setRange([changedRange.end, @getEndPosition()]) else @setRange([@getStartPosition(), changedRange.start]) - [@id, previousRange] + [@id, previousRange] handleBufferChange: (bufferChange) -> @consolidateObserverNotifications true, =>