contextClassifier
/
venv
/Lib
/site-packages
/prompt_toolkit
/key_binding
/bindings
/page_navigation.py
| """ | |
| Key bindings for extra page navigation: bindings for up/down scrolling through | |
| long pages, like in Emacs or Vi. | |
| """ | |
| from __future__ import annotations | |
| from prompt_toolkit.filters import buffer_has_focus, emacs_mode, vi_mode | |
| from prompt_toolkit.key_binding.key_bindings import ( | |
| ConditionalKeyBindings, | |
| KeyBindings, | |
| KeyBindingsBase, | |
| merge_key_bindings, | |
| ) | |
| from .scroll import ( | |
| scroll_backward, | |
| scroll_forward, | |
| scroll_half_page_down, | |
| scroll_half_page_up, | |
| scroll_one_line_down, | |
| scroll_one_line_up, | |
| scroll_page_down, | |
| scroll_page_up, | |
| ) | |
| __all__ = [ | |
| "load_page_navigation_bindings", | |
| "load_emacs_page_navigation_bindings", | |
| "load_vi_page_navigation_bindings", | |
| ] | |
| def load_page_navigation_bindings() -> KeyBindingsBase: | |
| """ | |
| Load both the Vi and Emacs bindings for page navigation. | |
| """ | |
| # Only enable when a `Buffer` is focused, otherwise, we would catch keys | |
| # when another widget is focused (like for instance `c-d` in a | |
| # ptterm.Terminal). | |
| return ConditionalKeyBindings( | |
| merge_key_bindings( | |
| [ | |
| load_emacs_page_navigation_bindings(), | |
| load_vi_page_navigation_bindings(), | |
| ] | |
| ), | |
| buffer_has_focus, | |
| ) | |
| def load_emacs_page_navigation_bindings() -> KeyBindingsBase: | |
| """ | |
| Key bindings, for scrolling up and down through pages. | |
| This are separate bindings, because GNU readline doesn't have them. | |
| """ | |
| key_bindings = KeyBindings() | |
| handle = key_bindings.add | |
| handle("c-v")(scroll_page_down) | |
| handle("pagedown")(scroll_page_down) | |
| handle("escape", "v")(scroll_page_up) | |
| handle("pageup")(scroll_page_up) | |
| return ConditionalKeyBindings(key_bindings, emacs_mode) | |
| def load_vi_page_navigation_bindings() -> KeyBindingsBase: | |
| """ | |
| Key bindings, for scrolling up and down through pages. | |
| This are separate bindings, because GNU readline doesn't have them. | |
| """ | |
| key_bindings = KeyBindings() | |
| handle = key_bindings.add | |
| handle("c-f")(scroll_forward) | |
| handle("c-b")(scroll_backward) | |
| handle("c-d")(scroll_half_page_down) | |
| handle("c-u")(scroll_half_page_up) | |
| handle("c-e")(scroll_one_line_down) | |
| handle("c-y")(scroll_one_line_up) | |
| handle("pagedown")(scroll_page_down) | |
| handle("pageup")(scroll_page_up) | |
| return ConditionalKeyBindings(key_bindings, vi_mode) | |