revert to using selection ranges instead of selection objects

This commit is contained in:
Luke Pommersheim
2015-08-13 16:43:14 +02:00
parent 75f341263a
commit 5f249b8af9

View File

@@ -821,12 +821,13 @@ class TextEditor extends Model
# Move lines intersection the most recent selection or multiple selections up by one row in screen
# coordinates.
moveLineUp: ->
selections = @getSelectionsOrderedByBufferPosition()
selections = @getSelectedBufferRanges()
selections.sort (a, b) -> a.compare(b)
if selections[0].getBufferRange().start.row is 0
if selections[0].start.row is 0
return
if selections[selections.length - 1].getBufferRange().start.row is @getLastBufferRow() and @buffer.getLastLine() is ''
if selections[selections.length - 1].start.row is @getLastBufferRow() and @buffer.getLastLine() is ''
return
@transact =>
@@ -835,23 +836,19 @@ class TextEditor extends Model
while selections.length > 0
# Find selections spanning a contiguous set of lines
selection = selections.shift()
lastSelectionRange = selection.getBufferRange()
selectionsToMove = [selection]
rangesOfSelectionsToMove = [lastSelectionRange]
while lastSelectionRange.end.row is selections[0]?.getBufferRange().start.row
while selection.end.row is selections[0]?.start.row
selection = selections.shift()
lastSelectionRange = selection.getBufferRange()
selectionsToMove.push(selection)
rangesOfSelectionsToMove.push(lastSelectionRange)
# Compute the range spanned by all these selections...
linesRangeStart = [selectionsToMove[0].getBufferRange().start.row, 0]
if lastSelectionRange.end.row > lastSelectionRange.start.row and lastSelectionRange.end.column is 0
linesRangeStart = [selection.start.row, 0]
if selection.end.row > selection.start.row and selection.end.column is 0
# Don't move the last line of a multi-line selection if the selection ends at column 0
linesRange = new Range(linesRangeStart, lastSelectionRange.end)
linesRange = new Range(linesRangeStart, selection.end)
else
linesRange = new Range(linesRangeStart, [lastSelectionRange.end.row + 1, 0])
linesRange = new Range(linesRangeStart, [selection.end.row + 1, 0])
# If selected line range is preceded by a fold, one line above on screen
# could be multiple lines in the buffer.
@@ -866,7 +863,7 @@ class TextEditor extends Model
# Make sure the inserted text doesn't go into an existing fold
if fold = @displayBuffer.largestFoldStartingAtBufferRow(precedingBufferRow)
rangesToRefold.push(fold.getBufferRange().translate([linesRange.getRowCount(), 0]))
rangesToRefold.push(fold.getBufferRange().translate([linesRange.getRowCount() - 1, 0]))
fold.destroy()
# Delete lines spanned by selection and insert them on the preceding buffer row
@@ -879,8 +876,8 @@ class TextEditor extends Model
for rangeToRefold in rangesToRefold
@displayBuffer.createFold(rangeToRefold.start.row, rangeToRefold.end.row)
for selection, i in selectionsToMove
newSelectionRanges.push(rangesOfSelectionsToMove[i].translate([-insertDelta, 0]))
for selection in selectionsToMove
newSelectionRanges.push(selection.translate([-insertDelta, 0]))
@setSelectedBufferRanges(newSelectionRanges)