🐛 Fix moving multiple selection with folds creates new folds

This commit is contained in:
abe33
2015-11-03 00:48:22 +01:00
parent 668a2dd6cf
commit dacd08badf
3 changed files with 103 additions and 10 deletions

View File

@@ -900,13 +900,19 @@ class TextEditor extends Model
linesRange = new Range(linesRangeStart, [selection.end.row + 1, 0])
# If there's a fold containing either the starting row or the end row
# of the selection then the whole fold needs to be moved.
if fold = @displayBuffer.largestFoldContainingBufferRow(selection.start.row)
newEndRow = fold.getBufferRange().end.row + 1
linesRange.end.row = newEndRow if newEndRow > linesRange.end.row
else if fold = @displayBuffer.largestFoldContainingBufferRow(selection.end.row)
newEndRow = fold.getBufferRange().end.row + 1
# of the selection then the whole fold needs to be moved and restored.
# The initial fold range is stored and will be translated once the
# insert delta is know.
selectionFoldRanges = []
foldAtSelectionStart =
@displayBuffer.largestFoldContainingBufferRow(selection.start.row)
foldAtSelectionEnd =
@displayBuffer.largestFoldContainingBufferRow(selection.end.row)
if fold = foldAtSelectionStart ? foldAtSelectionEnd
selectionFoldRanges.push range = fold.getBufferRange()
newEndRow = range.end.row + 1
linesRange.end.row = newEndRow if newEndRow > linesRange.end.row
fold.destroy()
# If selected line range is preceded by a fold, one line above on screen
# could be multiple lines in the buffer.
@@ -915,9 +921,13 @@ class TextEditor extends Model
insertDelta = linesRange.start.row - precedingBufferRow
# Any folds in the text that is moved will need to be re-created.
rangesToRefold =
# It includes the folds that were intersecting with the selection.
rangesToRefold = selectionFoldRanges.concat(
@outermostFoldsInBufferRowRange(linesRange.start.row, linesRange.end.row).map (fold) ->
fold.getBufferRange().translate([-insertDelta, 0])
range = fold.getBufferRange()
fold.destroy()
range
).map (range) -> range.translate([-insertDelta, 0])
# Make sure the inserted text doesn't go into an existing fold
if fold = @displayBuffer.largestFoldStartingAtBufferRow(precedingBufferRow)
@@ -996,7 +1006,10 @@ class TextEditor extends Model
# Any folds in the text that is moved will need to be re-created.
# It includes the folds that were intersecting with the selection.
rangesToRefold = selectionFoldRanges.concat(
@outermostFoldsInBufferRowRange(linesRange.start.row, linesRange.end.row).map (fold) -> fold.getBufferRange()
@outermostFoldsInBufferRowRange(linesRange.start.row, linesRange.end.row).map (fold) ->
range = fold.getBufferRange()
fold.destroy()
range
).map (range) -> range.translate([insertDelta, 0])
# Make sure the inserted text doesn't go into an existing fold