mirror of
https://github.com/atom/atom.git
synced 2026-02-12 07:35:14 -05:00
revert to using selection ranges instead of selection objects
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user