kannadaLettersClassification
/
env
/lib
/python3.12
/site-packages
/prompt_toolkit
/key_binding
/bindings
/basic.py
| # pylint: disable=function-redefined | |
| from __future__ import annotations | |
| from prompt_toolkit.application.current import get_app | |
| from prompt_toolkit.filters import ( | |
| Condition, | |
| emacs_insert_mode, | |
| has_selection, | |
| in_paste_mode, | |
| is_multiline, | |
| vi_insert_mode, | |
| ) | |
| from prompt_toolkit.key_binding.key_processor import KeyPress, KeyPressEvent | |
| from prompt_toolkit.keys import Keys | |
| from ..key_bindings import KeyBindings | |
| from .named_commands import get_by_name | |
| __all__ = [ | |
| "load_basic_bindings", | |
| ] | |
| E = KeyPressEvent | |
| def if_no_repeat(event: E) -> bool: | |
| """Callable that returns True when the previous event was delivered to | |
| another handler.""" | |
| return not event.is_repeat | |
| def has_text_before_cursor() -> bool: | |
| return bool(get_app().current_buffer.text) | |
| def in_quoted_insert() -> bool: | |
| return get_app().quoted_insert | |
| def load_basic_bindings() -> KeyBindings: | |
| key_bindings = KeyBindings() | |
| insert_mode = vi_insert_mode | emacs_insert_mode | |
| handle = key_bindings.add | |
| # Also c-space. | |
| def _ignore(event: E) -> None: | |
| """ | |
| First, for any of these keys, Don't do anything by default. Also don't | |
| catch them in the 'Any' handler which will insert them as data. | |
| If people want to insert these characters as a literal, they can always | |
| do by doing a quoted insert. (ControlQ in emacs mode, ControlV in Vi | |
| mode.) | |
| """ | |
| pass | |
| # Readline-style bindings. | |
| handle("home")(get_by_name("beginning-of-line")) | |
| handle("end")(get_by_name("end-of-line")) | |
| handle("left")(get_by_name("backward-char")) | |
| handle("right")(get_by_name("forward-char")) | |
| handle("c-up")(get_by_name("previous-history")) | |
| handle("c-down")(get_by_name("next-history")) | |
| handle("c-l")(get_by_name("clear-screen")) | |
| handle("c-k", filter=insert_mode)(get_by_name("kill-line")) | |
| handle("c-u", filter=insert_mode)(get_by_name("unix-line-discard")) | |
| handle("backspace", filter=insert_mode, save_before=if_no_repeat)( | |
| get_by_name("backward-delete-char") | |
| ) | |
| handle("delete", filter=insert_mode, save_before=if_no_repeat)( | |
| get_by_name("delete-char") | |
| ) | |
| handle("c-delete", filter=insert_mode, save_before=if_no_repeat)( | |
| get_by_name("delete-char") | |
| ) | |
| handle(Keys.Any, filter=insert_mode, save_before=if_no_repeat)( | |
| get_by_name("self-insert") | |
| ) | |
| handle("c-t", filter=insert_mode)(get_by_name("transpose-chars")) | |
| handle("c-i", filter=insert_mode)(get_by_name("menu-complete")) | |
| handle("s-tab", filter=insert_mode)(get_by_name("menu-complete-backward")) | |
| # Control-W should delete, using whitespace as separator, while M-Del | |
| # should delete using [^a-zA-Z0-9] as a boundary. | |
| handle("c-w", filter=insert_mode)(get_by_name("unix-word-rubout")) | |
| handle("pageup", filter=~has_selection)(get_by_name("previous-history")) | |
| handle("pagedown", filter=~has_selection)(get_by_name("next-history")) | |
| # CTRL keys. | |
| handle("c-d", filter=has_text_before_cursor & insert_mode)( | |
| get_by_name("delete-char") | |
| ) | |
| def _newline(event: E) -> None: | |
| """ | |
| Newline (in case of multiline input. | |
| """ | |
| event.current_buffer.newline(copy_margin=not in_paste_mode()) | |
| def _newline2(event: E) -> None: | |
| r""" | |
| By default, handle \n as if it were a \r (enter). | |
| (It appears that some terminals send \n instead of \r when pressing | |
| enter. - at least the Linux subsystem for Windows.) | |
| """ | |
| event.key_processor.feed(KeyPress(Keys.ControlM, "\r"), first=True) | |
| # Delete the word before the cursor. | |
| def _go_up(event: E) -> None: | |
| event.current_buffer.auto_up(count=event.arg) | |
| def _go_down(event: E) -> None: | |
| event.current_buffer.auto_down(count=event.arg) | |
| def _cut(event: E) -> None: | |
| data = event.current_buffer.cut_selection() | |
| event.app.clipboard.set_data(data) | |
| # Global bindings. | |
| def _insert_ctrl_z(event: E) -> None: | |
| """ | |
| By default, control-Z should literally insert Ctrl-Z. | |
| (Ansi Ctrl-Z, code 26 in MSDOS means End-Of-File. | |
| In a Python REPL for instance, it's possible to type | |
| Control-Z followed by enter to quit.) | |
| When the system bindings are loaded and suspend-to-background is | |
| supported, that will override this binding. | |
| """ | |
| event.current_buffer.insert_text(event.data) | |
| def _paste(event: E) -> None: | |
| """ | |
| Pasting from clipboard. | |
| """ | |
| data = event.data | |
| # Be sure to use \n as line ending. | |
| # Some terminals (Like iTerm2) seem to paste \r\n line endings in a | |
| # bracketed paste. See: https://github.com/ipython/ipython/issues/9737 | |
| data = data.replace("\r\n", "\n") | |
| data = data.replace("\r", "\n") | |
| event.current_buffer.insert_text(data) | |
| def _insert_text(event: E) -> None: | |
| """ | |
| Handle quoted insert. | |
| """ | |
| event.current_buffer.insert_text(event.data, overwrite=False) | |
| event.app.quoted_insert = False | |
| return key_bindings | |