diff --git a/spec/atom/command-interpreter-spec.coffee b/spec/atom/command-interpreter-spec.coffee index 4e7444e08..ea4ecd7d2 100644 --- a/spec/atom/command-interpreter-spec.coffee +++ b/spec/atom/command-interpreter-spec.coffee @@ -56,14 +56,24 @@ describe "CommandInterpreter", -> expect(editor.getSelection().getBufferRange()).toEqual [[0,0], [2,2]] describe "/regex/", -> + beforeEach -> + editor.clearSelections() + it 'selects text matching regex after current selection', -> - editor.getSelection().setBufferRange([[4,16], [4,20]]) + editor.setSelectionBufferRange([[4,16], [4,20]]) interpreter.eval(editor, '/pivot/') - expect(editor.getSelections().length).toBe 1 expect(editor.getSelection().getBufferRange()).toEqual [[6,16], [6,21]] it 'does not require the trailing slash', -> - editor.getSelection().setBufferRange([[4,16], [4,20]]) + editor.setSelectionBufferRange([[4,16], [4,20]]) + interpreter.eval(editor, '/pivot') + expect(editor.getSelection().getBufferRange()).toEqual [[6,16], [6,21]] + + it "searches from the end of the selection furthest forward in the buffer", -> + editor.clearSelections() + editor.setSelectionBufferRange([[4,16], [4,20]]) + editor.addSelectionForBufferRange([[1,16], [2,20]]) + expect(editor.getSelections().length).toBe 2 interpreter.eval(editor, '/pivot') expect(editor.getSelections().length).toBe 1 expect(editor.getSelection().getBufferRange()).toEqual [[6,16], [6,21]] diff --git a/src/atom/command-interpreter/regex-address.coffee b/src/atom/command-interpreter/regex-address.coffee index a98a890cc..441a7893a 100644 --- a/src/atom/command-interpreter/regex-address.coffee +++ b/src/atom/command-interpreter/regex-address.coffee @@ -9,7 +9,7 @@ class RegexAddress extends Address @regex = new RegExp(pattern) getRange: (editor) -> - selectedRange = editor.getSelection().getBufferRange() + selectedRange = editor.getLastSelectionInBuffer().getBufferRange() rangeToSearch = new Range(selectedRange.end, editor.getEofPosition()) rangeToReturn = selectedRange diff --git a/src/atom/composite-selection.coffee b/src/atom/composite-selection.coffee index d52cbf6e9..c3ecf983b 100644 --- a/src/atom/composite-selection.coffee +++ b/src/atom/composite-selection.coffee @@ -12,6 +12,12 @@ class CompositeSeleciton getSelections: -> new Array(@selections...) + getLastSelectionInBuffer: -> + _.last(@getSelections().sort (a, b) -> + aRange = a.getBufferRange() + bRange = b.getBufferRange() + aRange.end.compare(bRange.end)) + clearSelections: -> for selection in @getSelections()[1..] selection.cursor.remove() diff --git a/src/atom/editor.coffee b/src/atom/editor.coffee index defb44def..ac3460f8e 100644 --- a/src/atom/editor.coffee +++ b/src/atom/editor.coffee @@ -357,6 +357,7 @@ class Editor extends View getSelection: (index) -> @compositeSelection.getSelection(index) getSelections: -> @compositeSelection.getSelections() + getLastSelectionInBuffer: -> @compositeSelection.getLastSelectionInBuffer() getSelectedText: -> @compositeSelection.getSelection().getText() setSelectionBufferRange: (bufferRange, options) -> @compositeSelection.setBufferRange(bufferRange, options) addSelectionForBufferRange: (bufferRange, options) -> @compositeSelection.addSelectionForBufferRange(bufferRange, options)