From 1d1bdf587200e91f531a089305827a4d7760d927 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Fri, 18 Mar 2016 10:51:45 +0100 Subject: [PATCH] Improve folds behavior when duplicating lines Now we will select the entire screen line (which could contain some free-form fold), and we duplicate its contents preserving the structure of the existing folds. --- src/text-editor.coffee | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 52d5ffd47..d64b7107c 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -1085,15 +1085,12 @@ class TextEditor extends Model selectedBufferRange = selection.getBufferRange() if selection.isEmpty() {start} = selection.getScreenRange() - selection.selectToScreenPosition([start.row + 1, 0]) + selection.setScreenRange([[start.row, 0], [start.row + 1, 0]], preserveFolds: true) [startRow, endRow] = selection.getBufferRowRange() endRow++ - foldedRowRanges = - @outermostFoldsInBufferRowRange(startRow, endRow) - .map (fold) -> fold.getBufferRowRange() - + outermostFolds = @displayLayer.outermostFoldsInBufferRowRange(startRow, endRow) rangeToDuplicate = [[startRow, 0], [endRow, 0]] textToDuplicate = @getTextInBufferRange(rangeToDuplicate) textToDuplicate = '\n' + textToDuplicate if endRow > @getLastBufferRow() @@ -1101,8 +1098,9 @@ class TextEditor extends Model delta = endRow - startRow selection.setBufferRange(selectedBufferRange.translate([delta, 0])) - for [foldStartRow, foldEndRow] in foldedRowRanges - @foldBufferRowRange(foldStartRow + delta, foldEndRow + delta) + for fold in outermostFolds + foldRange = @displayLayer.bufferRangeForFold(fold) + @displayLayer.foldBufferRange(foldRange.translate([delta, 0])) return replaceSelectedText: (options={}, fn) -> @@ -3013,9 +3011,9 @@ class TextEditor extends Model destroyFoldsIntersectingBufferRange: (bufferRange) -> @displayLayer.destroyFoldsIntersectingBufferRange(bufferRange) - # {Delegates to: DisplayBuffer.outermostFoldsForBufferRowRange} + # {Delegates to: DisplayLayer.outermostFoldsForBufferRowRange} outermostFoldsInBufferRowRange: (startRow, endRow) -> - @displayBuffer.outermostFoldsInBufferRowRange(startRow, endRow) + @displayLayer.outermostFoldsInBufferRowRange(startRow, endRow) ### Section: Gutters