summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Slenders <jonathan@slenders.be>2016-12-27 19:26:29 +0100
committerJonathan Slenders <jonathan@slenders.be>2016-12-27 19:26:29 +0100
commit9a79ca172891cf03995d75e044f5663ee3c10e17 (patch)
tree3d8eea1fdf0f862df97acc19c59188ce6914d4aa
parent53980e1f1fe366fd6baa963084f6da4b53ae0680 (diff)
Added an reverse_vi_search_direction option.
-rw-r--r--prompt_toolkit/application.py6
-rw-r--r--prompt_toolkit/key_binding/bindings/vi.py9
-rw-r--r--prompt_toolkit/shortcuts.py1
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)