diff options
author | Jonathan Slenders <jonathan@slenders.be> | 2016-12-27 19:26:29 +0100 |
---|---|---|
committer | Jonathan Slenders <jonathan@slenders.be> | 2016-12-27 19:26:29 +0100 |
commit | 9a79ca172891cf03995d75e044f5663ee3c10e17 (patch) | |
tree | 3d8eea1fdf0f862df97acc19c59188ce6914d4aa | |
parent | 53980e1f1fe366fd6baa963084f6da4b53ae0680 (diff) |
Added an reverse_vi_search_direction option.
-rw-r--r-- | prompt_toolkit/application.py | 6 | ||||
-rw-r--r-- | prompt_toolkit/key_binding/bindings/vi.py | 9 | ||||
-rw-r--r-- | prompt_toolkit/shortcuts.py | 1 |
3 files changed, 14 insertions, 2 deletions
diff --git a/prompt_toolkit/application.py b/prompt_toolkit/application.py index 2bc4f261..272d8bbc 100644 --- a/prompt_toolkit/application.py +++ b/prompt_toolkit/application.py @@ -58,6 +58,9 @@ class Application(object): :param use_alternate_screen: When True, run the application on the alternate screen buffer. :param get_title: Callable that returns the current title to be displayed in the terminal. :param erase_when_done: (bool) Clear the application output when it finishes. + :param reverse_vi_search_direction: Normally, in Vi mode, a '/' searches + forward and a '?' searches backward. In readline mode, this is usually + reversed. Filters: @@ -91,6 +94,7 @@ class Application(object): paste_mode=False, ignore_case=False, editing_mode=EditingMode.EMACS, erase_when_done=False, + reverse_vi_search_direction=False, on_input_timeout=None, on_start=None, on_stop=None, on_reset=None, on_initialize=None, on_buffer_changed=None, @@ -99,6 +103,7 @@ class Application(object): paste_mode = to_cli_filter(paste_mode) ignore_case = to_cli_filter(ignore_case) mouse_support = to_cli_filter(mouse_support) + reverse_vi_search_direction = to_cli_filter(reverse_vi_search_direction) assert layout is None or isinstance(layout, Container) assert buffer is None or isinstance(buffer, Buffer) @@ -163,6 +168,7 @@ class Application(object): self.ignore_case = ignore_case self.editing_mode = editing_mode self.erase_when_done = erase_when_done + self.reverse_vi_search_direction = reverse_vi_search_direction def dummy_handler(cli): " Dummy event handler. " diff --git a/prompt_toolkit/key_binding/bindings/vi.py b/prompt_toolkit/key_binding/bindings/vi.py index cf5cdb5a..39206069 100644 --- a/prompt_toolkit/key_binding/bindings/vi.py +++ b/prompt_toolkit/key_binding/bindings/vi.py @@ -1775,7 +1775,11 @@ def load_vi_search_bindings(get_search_state=None, navigation_mode = ViNavigationMode() selection_mode = ViSelectionMode() - @handle('/', filter=navigation_mode|selection_mode) + reverse_vi_search_direction = Condition( + lambda cli: cli.application.reverse_vi_search_direction(cli)) + + @handle('/', filter=(navigation_mode|selection_mode)&~reverse_vi_search_direction) + @handle('?', filter=(navigation_mode|selection_mode)&reverse_vi_search_direction) @handle(Keys.ControlS, filter=~has_focus) def _(event): """ @@ -1788,7 +1792,8 @@ def load_vi_search_bindings(get_search_state=None, # Focus search buffer. event.cli.push_focus(search_buffer_name) - @handle('?', filter=navigation_mode|selection_mode) + @handle('?', filter=(navigation_mode|selection_mode)&~reverse_vi_search_direction) + @handle('/', filter=(navigation_mode|selection_mode)&reverse_vi_search_direction) @handle(Keys.ControlR, filter=~has_focus) def _(event): """ diff --git a/prompt_toolkit/shortcuts.py b/prompt_toolkit/shortcuts.py index 5586427d..773cef4b 100644 --- a/prompt_toolkit/shortcuts.py +++ b/prompt_toolkit/shortcuts.py @@ -506,6 +506,7 @@ def create_prompt_application( mouse_support=mouse_support, editing_mode=editing_mode, erase_when_done=erase_when_done, + reverse_vi_search_direction=True, on_abort=on_abort, on_exit=on_exit) |