diff --git a/spec/app/buffer-spec.coffee b/spec/app/buffer-spec.coffee index 8ae4a9241..76747cc15 100644 --- a/spec/app/buffer-spec.coffee +++ b/spec/app/buffer-spec.coffee @@ -679,6 +679,13 @@ describe 'Buffer', -> expect(buffer.getMarkerPosition(marker2)).toEqual [4, 20] expect(buffer.getMarkerTailPosition(marker2)).toBeNull() + it "allows markers to be created in a reversed orientation", -> + marker = buffer.markRange([[4, 20], [4, 23]], reverse: true) + expect(buffer.isMarkerReversed(marker)).toBeTruthy() + expect(buffer.getMarkerRange(marker)).toEqual [[4, 20], [4, 23]] + expect(buffer.getMarkerHeadPosition(marker)).toEqual [4, 20] + expect(buffer.getMarkerTailPosition(marker)).toEqual [4, 23] + describe "marker updates due to buffer changes", -> [marker1, marker2] = [] diff --git a/src/app/buffer-marker.coffee b/src/app/buffer-marker.coffee index df739c5fe..c0e8f0cf2 100644 --- a/src/app/buffer-marker.coffee +++ b/src/app/buffer-marker.coffee @@ -8,13 +8,20 @@ class BufferMarker tailPosition: null stayValid: false - constructor: ({@id, @buffer, range, @stayValid, noTail}) -> - @setRange(range, {noTail}) + constructor: ({@id, @buffer, range, @stayValid, noTail, reverse}) -> + @setRange(range, {noTail, reverse}) setRange: (range, options={}) -> range = @buffer.clipRange(range) - @tailPosition = range.start unless options.noTail - @headPosition = range.end + if options.reverse + @tailPosition = range.end unless options.noTail + @headPosition = range.start + else + @tailPosition = range.start unless options.noTail + @headPosition = range.end + + isReversed: -> + @tailPosition? and @headPosition.isLessThan(@tailPosition) getRange: -> if @tailPosition diff --git a/src/app/buffer.coffee b/src/app/buffer.coffee index 4a1cdb3dc..824105ace 100644 --- a/src/app/buffer.coffee +++ b/src/app/buffer.coffee @@ -295,6 +295,9 @@ class Buffer getMarkerRange: (id) -> @validMarkers[id]?.getRange() + isMarkerReversed: (id) -> + @validMarkers[id]?.isReversed() + getAnchors: -> new Array(@anchors...) addAnchor: (options) ->