From 6b5a52ae5cdf9a8ec6a581c982c3edac0eeae73d Mon Sep 17 00:00:00 2001 From: Corey Johnson & Nathan Sobo Date: Thu, 14 Jun 2012 11:01:28 -0700 Subject: [PATCH] Add repeat-relative-address-in-reverse event to command panel --- spec/extensions/command-panel-spec.coffee | 14 +++++++++++++- src/extensions/command-interpreter.coffee | 2 ++ .../command-interpreter/composite-command.coffee | 3 +++ .../command-interpreter/regex-address.coffee | 3 +++ src/extensions/command-panel.coffee | 4 ++++ 5 files changed, 25 insertions(+), 1 deletion(-) diff --git a/spec/extensions/command-panel-spec.coffee b/spec/extensions/command-panel-spec.coffee index 90f9c5751..6127f5e18 100644 --- a/spec/extensions/command-panel-spec.coffee +++ b/spec/extensions/command-panel-spec.coffee @@ -47,7 +47,7 @@ describe "CommandPanel", -> expect(commandPanel.miniEditor.getCursorScreenPosition()).toEqual [0, 0] describe "when command-panel:repeat-relative-address is triggered on the root view", -> - it "calls .repeatRelativeAddress on the command interpreter with the active editor", -> + it "repeats the last search command if there is one", -> rootView.trigger 'command-panel:repeat-relative-address' editor.setCursorScreenPosition([4, 0]) @@ -69,6 +69,18 @@ describe "CommandPanel", -> rootView.trigger 'command-panel:repeat-relative-address' expect(editor.getSelection().getBufferRange()).toEqual [[3,31], [3,38]] + describe "when command-pane:repeat-relative-address-in-reverse is triggered on the root view", -> + it "it repeats the last relative address in the reverse direction", -> + rootView.trigger 'command-panel:repeat-relative-address-in-reverse' + + editor.setCursorScreenPosition([6, 0]) + + commandPanel.execute("/current") + expect(editor.getSelection().getBufferRange()).toEqual [[6,6], [6,13]] + + rootView.trigger 'command-panel:repeat-relative-address-in-reverse' + expect(editor.getSelection().getBufferRange()).toEqual [[5,6], [5,13]] + describe "when command-panel:set-selection-as-regex-address is triggered on the root view", -> it "sets the @lastRelativeAddress to a RegexAddress of the current selection", -> rootView.open(require.resolve('fixtures/sample.js')) diff --git a/src/extensions/command-interpreter.coffee b/src/extensions/command-interpreter.coffee index 7e0c91e2c..18dd8d114 100644 --- a/src/extensions/command-interpreter.coffee +++ b/src/extensions/command-interpreter.coffee @@ -14,3 +14,5 @@ class CommandInterpreter repeatRelativeAddress: (editor) -> @lastRelativeAddress?.execute(editor) + repeatRelativeAddressInReverse: (editor) -> + @lastRelativeAddress?.reverse().execute(editor) diff --git a/src/extensions/command-interpreter/composite-command.coffee b/src/extensions/command-interpreter/composite-command.coffee index f2deb6141..4df55e351 100644 --- a/src/extensions/command-interpreter/composite-command.coffee +++ b/src/extensions/command-interpreter/composite-command.coffee @@ -12,6 +12,9 @@ class CompositeCommand newRanges.push(command.execute(editor, currentRange)...) editor.setSelectedBufferRanges(newRanges) + reverse: -> + new CompositeCommand(@subcommands.map (command) -> command.reverse()) + isRelativeAddress: -> _.all(@subcommands, (command) -> command.isAddress() and command.isRelative()) diff --git a/src/extensions/command-interpreter/regex-address.coffee b/src/extensions/command-interpreter/regex-address.coffee index 04803f13f..83cae9bb3 100644 --- a/src/extensions/command-interpreter/regex-address.coffee +++ b/src/extensions/command-interpreter/regex-address.coffee @@ -31,3 +31,6 @@ class RegexAddress extends Address rangeToReturn or currentRange isRelative: -> true + + reverse: -> + new RegexAddress(@regex, !@isReversed) \ No newline at end of file diff --git a/src/extensions/command-panel.coffee b/src/extensions/command-panel.coffee index a4e712e47..cb0fb1e16 100644 --- a/src/extensions/command-panel.coffee +++ b/src/extensions/command-panel.coffee @@ -42,6 +42,7 @@ class CommandPanel extends View @rootView.on 'command-panel:execute', => @execute() @rootView.on 'command-panel:find-in-file', => @show("/") @rootView.on 'command-panel:repeat-relative-address', => @repeatRelativeAddress() + @rootView.on 'command-panel:repeat-relative-address-in-reverse', => @repeatRelativeAddressInReverse() @rootView.on 'command-panel:set-selection-as-regex-address', => @setSelectionAsLastRelativeAddress() @miniEditor.off 'move-up move-down' @@ -88,6 +89,9 @@ class CommandPanel extends View repeatRelativeAddress: -> @commandInterpreter.repeatRelativeAddress(@rootView.activeEditor()) + repeatRelativeAddressInReverse: -> + @commandInterpreter.repeatRelativeAddressInReverse(@rootView.activeEditor()) + setSelectionAsLastRelativeAddress: -> selection = @rootView.activeEditor().getSelectedText() regex = _.escapeRegExp(selection)