🐛 Fix folds not preserved when moving multiple selections down

When two or more selections span the rows immediately before a fold,
the `did-change` event dispatched on the deletion will trigger a merge
of the selections, which in turn trigger an unfold at the buffer
position of the new selection, which is now the position of the fold.
Consolidating the selections at the begin of the transaction will
prevent the merge and will keep the fold untouched.
This commit is contained in:
abe33
2015-10-12 22:05:25 +02:00
parent d68a0db6d2
commit 45a3dbca4e
2 changed files with 24 additions and 0 deletions

View File

@@ -2067,6 +2067,29 @@ describe "TextEditor", ->
expect(editor.lineTextForBufferRow(7)).toBe " var pivot = items.shift(), current, left = [], right = [];"
expect(editor.lineTextForBufferRow(9)).toBe " return sort(left).concat(pivot).concat(sort(right));"
describe "and the multiple selections spans the two line before it", ->
it "moves all the lines, preserving the fold", ->
editor.createFold(4, 7)
expect(editor.isFoldedAtBufferRow(4)).toBeTruthy()
expect(editor.isFoldedAtBufferRow(5)).toBeTruthy()
expect(editor.isFoldedAtBufferRow(6)).toBeTruthy()
expect(editor.isFoldedAtBufferRow(7)).toBeTruthy()
expect(editor.isFoldedAtBufferRow(8)).toBeFalsy()
editor.setSelectedBufferRanges([[[2, 2], [2, 6]], [[3, 0], [3, 4]]])
editor.moveLineDown()
expect(editor.getSelectedBufferRanges()).toEqual [[[7, 0], [7, 4]], [[6, 2], [6, 6]]]
expect(editor.lineTextForBufferRow(2)).toBe " while(items.length > 0) {"
expect(editor.isFoldedAtBufferRow(2)).toBeTruthy()
expect(editor.isFoldedAtBufferRow(3)).toBeTruthy()
expect(editor.isFoldedAtBufferRow(4)).toBeTruthy()
expect(editor.isFoldedAtBufferRow(5)).toBeTruthy()
expect(editor.isFoldedAtBufferRow(6)).toBeFalsy()
expect(editor.lineTextForBufferRow(6)).toBe " if (items.length <= 1) return items;"
expect(editor.lineTextForBufferRow(7)).toBe " var pivot = items.shift(), current, left = [], right = [];"
describe "when some of the selections span the same lines", ->
it "moves lines that contain multiple selections correctly", ->
editor.setSelectedBufferRanges([[[3, 2], [3, 9]], [[3, 12], [3, 13]]])

View File

@@ -863,6 +863,7 @@ class TextEditor extends Model
selections = selections.reverse()
@transact =>
@consolidateSelections()
newSelectionRanges = []
while selections.length > 0