Merge pull request #6220 from atom/as-fix-shuffle-copy-paste

Always mutate selections in order
This commit is contained in:
Nathan Sobo
2015-04-02 10:28:09 -06:00
2 changed files with 36 additions and 4 deletions

View File

@@ -2730,6 +2730,20 @@ describe "TextEditor", ->
"""
describe "when many selections get added in shuffle order", ->
it "cuts them in order", ->
editor.setSelectedBufferRanges([
[[2,8], [2, 13]]
[[0,4], [0,13]],
[[1,6], [1, 10]],
])
editor.cutSelectedText()
expect(atom.clipboard.read()).toEqual """
quicksort
sort
items
"""
describe ".cutToEndOfLine()", ->
describe "when soft wrap is on", ->
it "cuts up to the end of the line", ->
@@ -2792,6 +2806,20 @@ describe "TextEditor", ->
[[5, 8], [5, 8]]
])
describe "when many selections get added in shuffle order", ->
it "copies them in order", ->
editor.setSelectedBufferRanges([
[[2,8], [2, 13]]
[[0,4], [0,13]],
[[1,6], [1, 10]],
])
editor.copySelectedText()
expect(atom.clipboard.read()).toEqual """
quicksort
sort
items
"""
describe ".pasteText()", ->
copyText = (text, {startColumn, textEditor}={}) ->
startColumn ?= 0
@@ -2886,8 +2914,12 @@ describe "TextEditor", ->
editor.setSelectedBufferRanges([[[0, 4], [0, 13]], [[1, 6], [1, 10]]])
editor.copySelectedText()
it "pastes each selection separately into the buffer", ->
editor.copySelectedText()
it "pastes each selection in order separately into the buffer", ->
editor.setSelectedBufferRanges([
[[1, 6], [1, 10]]
[[0, 4], [0, 13]],
])
editor.moveRight()
editor.insertText("_")
editor.pasteText()

View File

@@ -843,7 +843,7 @@ class TextEditor extends Model
mutateSelectedText: (fn) ->
@mergeIntersectingSelections =>
@transact =>
fn(selection, index) for selection, index in @getSelections()
fn(selection, index) for selection, index in @getSelectionsOrderedByBufferPosition()
# Move lines intersection the most recent selection up by one row in screen
# coordinates.
@@ -2621,7 +2621,7 @@ class TextEditor extends Model
# Essential: For each selection, copy the selected text.
copySelectedText: ->
maintainClipboard = false
for selection in @getSelections()
for selection in @getSelectionsOrderedByBufferPosition()
if selection.isEmpty()
previousRange = selection.getBufferRange()
selection.selectLine()