From 54616aee787e1c910e36b8f6d5bd8e36e4e8336d Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 26 Jul 2012 10:09:28 -0600 Subject: [PATCH] Bugfix: When the command panel makes a selection, it destroys surrounding folds --- spec/extensions/command-interpreter-spec.coffee | 12 ++++++++++++ src/app/edit-session.coffee | 11 +++++++---- src/app/selection.coffee | 1 + 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/spec/extensions/command-interpreter-spec.coffee b/spec/extensions/command-interpreter-spec.coffee index 143f64754..9ec0caed5 100644 --- a/spec/extensions/command-interpreter-spec.coffee +++ b/spec/extensions/command-interpreter-spec.coffee @@ -149,6 +149,18 @@ describe "CommandInterpreter", -> runs -> expect(editSession.getSelection().getBufferRange()).toEqual [[3,8], [3,13]] + it "removes folds that contain the selections", -> + waitsForPromise -> + editSession.createFold(5, 6) + editSession.createFold(10, 11) + editSession.setSelectedBufferRange([[4,16], [4,20]]) + interpreter.eval('/pivot/', editSession) + + runs -> + expect(editSession.getSelection().getBufferRange()).toEqual [[6,16], [6,21]] + expect(editSession.lineForScreenRow(5).fold).toBeUndefined() + expect(editSession.lineForScreenRow(10).fold).toBeDefined() + describe "address range", -> describe "when two addresses are specified", -> it "selects from the begining of the left address to the end of the right address", -> diff --git a/src/app/edit-session.coffee b/src/app/edit-session.coffee index 67b1a8857..876ea307a 100644 --- a/src/app/edit-session.coffee +++ b/src/app/edit-session.coffee @@ -214,6 +214,10 @@ class EditSession destroyFoldsContainingBufferRow: (bufferRow) -> @displayBuffer.destroyFoldsContainingBufferRow(bufferRow) + destroyFoldsIntersectingBufferRange: (bufferRange) -> + for row in [bufferRange.start.row..bufferRange.end.row] + @destroyFoldsContainingBufferRow(row) + unfoldCurrentRow: -> @largestFoldStartingAtBufferRow(@getLastCursor().getBufferRow())?.destroy() @@ -322,7 +326,9 @@ class EditSession @trigger 'add-selection', selection selection - addSelectionForBufferRange: (bufferRange, options) -> + addSelectionForBufferRange: (bufferRange, options={}) -> + bufferRange = Range.fromObject(bufferRange) + @destroyFoldsIntersectingBufferRange(bufferRange) unless options.preserveFolds @addCursor().selection.setBufferRange(bufferRange, options) @mergeIntersectingSelections() @@ -337,9 +343,6 @@ class EditSession for bufferRange, i in bufferRanges bufferRange = Range.fromObject(bufferRange) - unless options.preserveFolds - for row in [bufferRange.start.row..bufferRange.end.row] - @destroyFoldsContainingBufferRow(row) if selections[i] selections[i].setBufferRange(bufferRange, options) else diff --git a/src/app/selection.coffee b/src/app/selection.coffee index 85819ef6b..522163dd7 100644 --- a/src/app/selection.coffee +++ b/src/app/selection.coffee @@ -54,6 +54,7 @@ class Selection [start, end] = [end, start] if options.reverse @modifyScreenRange => + @editSession.destroyFoldsIntersectingBufferRange(bufferRange) unless options.preserveFolds @placeAnchor() unless @anchor @modifySelection => @anchor.setBufferPosition(start, options)