From 31579703f0bd409d6bf3accd58101a77cebb27d0 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 4 Apr 2013 17:48:02 -0600 Subject: [PATCH] Ensure new non-empty selections have an invisible cursor. --- spec/app/edit-session-spec.coffee | 2 ++ src/app/buffer-marker.coffee | 3 +++ src/app/cursor.coffee | 7 +++++-- src/app/display-buffer.coffee | 3 +++ src/app/edit-session.coffee | 3 +++ src/app/text-buffer.coffee | 3 +++ 6 files changed, 19 insertions(+), 2 deletions(-) diff --git a/spec/app/edit-session-spec.coffee b/spec/app/edit-session-spec.coffee index e5e9fdf26..b77ddebcd 100644 --- a/spec/app/edit-session-spec.coffee +++ b/spec/app/edit-session-spec.coffee @@ -719,6 +719,8 @@ describe "EditSession", -> [[4, 16], [4, 21]] [[4, 25], [4, 29]] ] + for cursor in editSession.getCursors() + expect(cursor.isVisible()).toBeFalsy() it "honors the original selection's region when adding across shorter lines", -> editSession.setSelectedBufferRange([[3, 22], [3, 38]]) diff --git a/src/app/buffer-marker.coffee b/src/app/buffer-marker.coffee index 199171595..13d0ec8a7 100644 --- a/src/app/buffer-marker.coffee +++ b/src/app/buffer-marker.coffee @@ -27,6 +27,9 @@ class BufferMarker isReversed: -> @tailPosition? and @headPosition.isLessThan(@tailPosition) + hasTail: -> + @tailPosition? + getRange: -> if @tailPosition new Range(@tailPosition, @headPosition) diff --git a/src/app/cursor.coffee b/src/app/cursor.coffee index 8f1a21d67..4832b74d8 100644 --- a/src/app/cursor.coffee +++ b/src/app/cursor.coffee @@ -12,9 +12,9 @@ class Cursor needsAutoscroll: null constructor: ({@editSession, @marker}) -> + @updateVisibility() @editSession.observeMarker @marker, (e) => - @setVisible(@selection.isEmpty()) - + @updateVisibility() {oldHeadScreenPosition, newHeadScreenPosition} = e {oldHeadBufferPosition, newHeadBufferPosition} = e {bufferChanged} = e @@ -59,6 +59,9 @@ class Cursor unless fn() @trigger 'autoscrolled' if @needsAutoscroll + updateVisibility: -> + @setVisible(not @editSession.doesMarkerHaveTail(@marker)) + setVisible: (visible) -> if @visible != visible @visible = visible diff --git a/src/app/display-buffer.coffee b/src/app/display-buffer.coffee index 0f24a235d..ed4772742 100644 --- a/src/app/display-buffer.coffee +++ b/src/app/display-buffer.coffee @@ -400,6 +400,9 @@ class DisplayBuffer isMarkerReversed: (id) -> @buffer.isMarkerReversed(id) + doesMarkerHaveTail: (id) -> + @buffer.doesMarkerHaveTail(id) + observeMarker: (id, callback) -> @getMarker(id).observe(callback) diff --git a/src/app/edit-session.coffee b/src/app/edit-session.coffee index f5f85c650..83163f894 100644 --- a/src/app/edit-session.coffee +++ b/src/app/edit-session.coffee @@ -556,6 +556,9 @@ class EditSession isMarkerReversed: (args...) -> @displayBuffer.isMarkerReversed(args...) + doesMarkerHaveTail: (args...) -> + @displayBuffer.doesMarkerHaveTail(args...) + hasMultipleCursors: -> @getCursors().length > 1 diff --git a/src/app/text-buffer.coffee b/src/app/text-buffer.coffee index 7fa3bb32a..62dbedc1c 100644 --- a/src/app/text-buffer.coffee +++ b/src/app/text-buffer.coffee @@ -339,6 +339,9 @@ class Buffer isMarkerReversed: (id) -> @validMarkers[id]?.isReversed() + doesMarkerHaveTail: (id) -> + @validMarkers[id]?.hasTail() + observeMarker: (id, callback) -> @validMarkers[id]?.observe(callback)