diff --git a/kittens/resize_window/main.py b/kittens/resize_window/main.py index 22169a0fa..7c252abe5 100644 --- a/kittens/resize_window/main.py +++ b/kittens/resize_window/main.py @@ -9,7 +9,7 @@ from typing import Any, Dict, List, Optional from kitty.cli import parse_args from kitty.cli_stub import RCOptions, ResizeCLIOptions from kitty.constants import version -from kitty.key_encoding import CTRL, RELEASE, KeyEvent, key_defs as K +from kitty.key_encoding import CTRL, EventType, KeyEvent from kitty.rc.base import command_for_name, parse_subcommand_cli from kitty.remote_control import encode_send, parse_rc_args from kitty.utils import ScreenSize @@ -19,11 +19,6 @@ from ..tui.loop import Loop from ..tui.operations import styled global_opts = RCOptions() -ESCAPE = K['ESCAPE'] -N = K['N'] -S = K['S'] -T = K['T'] -W = K['W'] class Resize(Handler): @@ -74,12 +69,13 @@ class Resize(Handler): self.quit_loop(0) def on_key(self, key_event: KeyEvent) -> None: - if key_event.type is RELEASE: + if key_event.type is EventType.RELEASE: return - if key_event.key is ESCAPE: + if key_event.matches('esc'): self.quit_loop(0) - elif key_event.key in (W, N, T, S) and key_event.mods & CTRL: - self.do_window_resize(is_decrease=key_event.key in (N, S), is_horizontal=key_event.key in (W, N), multiplier=2) + return + if key_event.key in ('w', 'n', 't', 's') and key_event.mods == CTRL: + self.do_window_resize(is_decrease=key_event.key in 'ns', is_horizontal=key_event.key in 'wn', multiplier=2) def on_resize(self, new_size: ScreenSize) -> None: self.draw_screen() diff --git a/kittens/unicode_input/main.py b/kittens/unicode_input/main.py index e6a48779a..953780940 100644 --- a/kittens/unicode_input/main.py +++ b/kittens/unicode_input/main.py @@ -18,9 +18,7 @@ from kitty.cli_stub import UnicodeCLIOptions from kitty.config import cached_values_for from kitty.constants import config_dir from kitty.fast_data_types import is_emoji_presentation_base, wcswidth -from kitty.key_encoding import ( - CTRL, PRESS, RELEASE, SHIFT, KeyEvent, enter_key, key_defs as K -) +from kitty.key_encoding import EventType, KeyEvent from kitty.typing import BossType from kitty.utils import ScreenSize, get_editor @@ -33,19 +31,6 @@ from ..tui.operations import ( ) HEX, NAME, EMOTICONS, FAVORITES = 'HEX', 'NAME', 'EMOTICONS', 'FAVORITES' -UP = K['UP'] -DOWN = K['DOWN'] -LEFT = K['LEFT'] -RIGHT = K['RIGHT'] -RIGHT_BRACKET = K['RIGHT_BRACKET'] -LEFT_BRACKET = K['LEFT_BRACKET'] -TAB = K['TAB'] -ESCAPE = K['ESCAPE'] -F1 = K['F1'] -F2 = K['F2'] -F3 = K['F3'] -F4 = K['F4'] -F12 = K['F12'] favorites_path = os.path.join(config_dir, 'unicode-input-favorites.conf') INDEX_CHAR = '.' INDEX_BASE = 36 @@ -431,46 +416,46 @@ class UnicodeInput(Handler): self.refresh() def on_key(self, key_event: KeyEvent) -> None: - if self.mode is HEX and key_event.type is not RELEASE and not key_event.mods: + if self.mode is HEX and key_event.type is not EventType.RELEASE and not key_event.mods: try: val = int(self.line_edit.current_input, 16) except Exception: pass else: - if key_event.key is TAB: + if key_event.matches('tab'): self.line_edit.current_input = hex(val + 0x10)[2:] self.refresh() return - if key_event.key is UP: + if key_event.matches('up'): self.line_edit.current_input = hex(val + 1)[2:] self.refresh() return - if key_event.key is DOWN: + if key_event.matches('down'): self.line_edit.current_input = hex(val - 1)[2:] self.refresh() return - if self.mode is NAME and key_event.type is not RELEASE and not key_event.mods: - if key_event.key is TAB: - if key_event.mods == SHIFT: - self.table.move_current(cols=-1) - self.refresh() - elif not key_event.mods: - self.table.move_current(cols=1) - self.refresh() - return - elif key_event.key is LEFT and not key_event.mods: + if self.mode is NAME and key_event.type is not EventType.RELEASE and not key_event.mods: + if key_event.matches('shift+tab'): self.table.move_current(cols=-1) self.refresh() return - elif key_event.key is RIGHT and not key_event.mods: + if key_event.matches('tab'): self.table.move_current(cols=1) self.refresh() return - elif key_event.key is UP and not key_event.mods: + if key_event.matches('left'): + self.table.move_current(cols=-1) + self.refresh() + return + if key_event.matches('right'): + self.table.move_current(cols=1) + self.refresh() + return + if key_event.matches('up'): self.table.move_current(rows=-1) self.refresh() return - elif key_event.key is DOWN and not key_event.mods: + if key_event.matches('down'): self.table.move_current(rows=1) self.refresh() return @@ -478,26 +463,34 @@ class UnicodeInput(Handler): if self.line_edit.on_key(key_event): self.refresh() return - if key_event is enter_key: + if key_event.matches('enter'): self.quit_loop(0) - elif key_event.type is PRESS: - if not key_event.mods: - if key_event.key is ESCAPE: - self.quit_loop(1) - elif key_event.key is F1: - self.switch_mode(HEX) - elif key_event.key is F2: - self.switch_mode(NAME) - elif key_event.key is F3: - self.switch_mode(EMOTICONS) - elif key_event.key is F4: - self.switch_mode(FAVORITES) - elif key_event.key is F12 and self.mode is FAVORITES: - self.edit_favorites() - elif key_event.mods == CTRL and key_event.key in (TAB, RIGHT_BRACKET, LEFT_BRACKET): - self.next_mode(-1 if key_event.key is LEFT_BRACKET else 1) - elif key_event.mods == CTRL | SHIFT and key_event.key is TAB: - self.next_mode(-1) + return + if key_event.matches('esc'): + self.quit_loop(1) + return + if key_event.matches('f1'): + self.switch_mode(HEX) + return + if key_event.matches('f2'): + self.switch_mode(NAME) + return + if key_event.matches('f3'): + self.switch_mode(EMOTICONS) + return + if key_event.matches('f4'): + self.switch_mode(FAVORITES) + return + if key_event.matches('f12') and self.mode is FAVORITES: + self.edit_favorites() + return + if key_event.matches('ctrl+shift+tab'): + self.next_mode(-1) + return + for key in ('tab', '[', ']'): + if key_event.matches(f'ctrl+{key}'): + self.next_mode(-1 if key == '[' else 1) + return def edit_favorites(self) -> None: if not os.path.exists(favorites_path): diff --git a/kitty/key_encoding.py b/kitty/key_encoding.py index ec04691cd..6f5d72974 100644 --- a/kitty/key_encoding.py +++ b/kitty/key_encoding.py @@ -281,8 +281,11 @@ def decode_key_event(csi: str, csi_type: str) -> KeyEvent: def key_name(num: int) -> str: if not num: return '' - num = csi_number_to_functional_number_map.get(num, num) - ans = functional_key_number_to_name_map.get(num) + if num != 13: + num = csi_number_to_functional_number_map.get(num, num) + ans = functional_key_number_to_name_map.get(num) + else: + ans = 'ENTER' if csi_type == 'u' else 'F3' if ans is None: ans = chr(num) return ans diff --git a/kitty/options_stub.py b/kitty/options_stub.py index 0c4e7ae62..3ecf0b0d9 100644 --- a/kitty/options_stub.py +++ b/kitty/options_stub.py @@ -20,7 +20,7 @@ def generate_stub(): 'font_features': 'typing.Dict[str, typing.Tuple[str, ...]]' }, preamble_lines=( - 'from kitty.constants import SingleKey', + 'from kitty.types import SingleKey', 'from kitty.config import KeyAction, KeyMap, SequenceMap', ), extra_fields=(