From 7bf7cc284d4841d8ffa2a8e6324044163c78841e Mon Sep 17 00:00:00 2001 From: pagedown Date: Wed, 19 Jan 2022 14:12:39 +0800 Subject: [PATCH] Add the missing mouse triggers click (-2) and double-click (-3) --- kitty/debug_config.py | 19 +++++++++++++++---- kitty/options/utils.py | 6 ++++-- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/kitty/debug_config.py b/kitty/debug_config.py index b5f417902..f2aec186b 100644 --- a/kitty/debug_config.py +++ b/kitty/debug_config.py @@ -20,10 +20,9 @@ from .constants import ( ) from .fast_data_types import Color, num_users from .options.types import Options as KittyOpts, defaults -from .options.utils import MouseMap +from .options.utils import MouseMap, SequenceMap, mouse_button_map, mouse_trigger_count_map from .rgb import color_as_sharp from .types import MouseEvent, SingleKey -from .typing import SequenceMap ShortcutMap = Dict[Tuple[SingleKey, ...], str] @@ -53,6 +52,18 @@ def mod_to_names(mods: int) -> Iterator[str]: yield name +def mouse_button_num_to_name(num: int) -> str: + button_map = {v: k for k, v in mouse_button_map.items()} + name = f'b{num+1}' + return button_map.get(name, name) + + +def mouse_trigger_count_to_name(count: int) -> str: + trigger_count_map = {str(v): k for k, v in mouse_trigger_count_map.items()} + k = str(count) + return trigger_count_map.get(k, k) + + def print_shortcut(key_sequence: Iterable[SingleKey], defn: str, print: Callable[..., None]) -> None: from .fast_data_types import glfw_get_key_name keys = [] @@ -99,8 +110,8 @@ def compare_mousemaps(final: MouseMap, initial: MouseMap, print: Callable[..., N changed = {k for k in set(final) & set(initial) if final[k] != initial[k]} def print_mouse_action(trigger: MouseEvent, defn: str) -> None: - names = list(mod_to_names(trigger.mods)) + [f'b{trigger.button+1}'] - when = {-1: 'repeat', 1: 'press', 2: 'doublepress', 3: 'triplepress'}.get(trigger.repeat_count, trigger.repeat_count) + names = list(mod_to_names(trigger.mods)) + [mouse_button_num_to_name(trigger.button)] + when = mouse_trigger_count_to_name(trigger.repeat_count) grabbed = 'grabbed' if trigger.grabbed else 'ungrabbed' print('\t' + '+'.join(names), when, grabbed, defn) diff --git a/kitty/options/utils.py b/kitty/options/utils.py index 5e6227f08..d4d9848c1 100644 --- a/kitty/options/utils.py +++ b/kitty/options/utils.py @@ -42,6 +42,8 @@ character_key_name_aliases_with_ascii_lowercase: Dict[str, str] = character_key_ for x in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ': character_key_name_aliases_with_ascii_lowercase[x] = x.lower() sequence_sep = '>' +mouse_button_map = {'left': 'b1', 'middle': 'b3', 'right': 'b2'} +mouse_trigger_count_map = {'doubleclick': -3, 'click': -2, 'release': -1, 'press': 1, 'doublepress': 2, 'triplepress': 3} FuncArgsType = Tuple[str, Sequence[Any]] func_with_args = KeyFuncWrapper[FuncArgsType]() DELETE_ENV_VAR = '_delete_this_env_var_' @@ -1054,13 +1056,13 @@ def parse_mouse_map(val: str) -> Iterable[MouseMapping]: obutton = parts[0].lower() mods = 0 try: - b = {'left': 'b1', 'middle': 'b3', 'right': 'b2'}.get(obutton, obutton)[1:] + b = mouse_button_map.get(obutton, obutton)[1:] button = getattr(defines, f'GLFW_MOUSE_BUTTON_{b}') except Exception: log_error(f'Mouse button: {xbutton} not recognized, ignoring') return try: - count = {'doubleclick': -3, 'click': -2, 'release': -1, 'press': 1, 'doublepress': 2, 'triplepress': 3}[event.lower()] + count = mouse_trigger_count_map[event.lower()] except KeyError: log_error(f'Mouse event type: {event} not recognized, ignoring') return