diff --git a/src/text-editor.coffee b/src/text-editor.coffee index c5ce5b189..c1cd48b89 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -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)