From 2f7b0d1d944dcb2f616d077388430788405ca158 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 25 Jan 2024 08:08:52 +0530 Subject: [PATCH] Dont show multiple keys bindings in debug output when their focus on conditions are the same --- kitty/debug_config.py | 13 ++++++++++--- kitty/options/utils.py | 4 ++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/kitty/debug_config.py b/kitty/debug_config.py index b70e5b39f..7eed7a080 100644 --- a/kitty/debug_config.py +++ b/kitty/debug_config.py @@ -10,7 +10,7 @@ import time from contextlib import suppress from functools import partial from pprint import pformat -from typing import IO, Callable, Dict, Iterable, Iterator, Optional, Set, TypeVar +from typing import IO, Callable, Dict, Iterator, Optional, Sequence, Set, TypeVar from kittens.tui.operations import colored, styled @@ -109,8 +109,15 @@ def compare_opts(opts: KittyOpts, print: Print) -> None: return Shortcut((v.trigger,) + v.rest) return Shortcut((k,)) - def as_str(defns: Iterable[KeyDefinition]) -> str: - return ', '.join(d.human_repr() for d in defns) + def as_str(defns: Sequence[KeyDefinition]) -> str: + seen = set() + uniq = [] + for d in reversed(defns): + key = d.full_key_sequence_to_trigger, d.options.when_focus_on + if key not in seen: + seen.add(key) + uniq.append(d) + return ', '.join(d.human_repr() for d in uniq) for kmn, initial_ in default_opts.keyboard_modes.items(): initial = {as_sc(k, v[0]): as_str(v) for k, v in initial_.keymap.items()} diff --git a/kitty/options/utils.py b/kitty/options/utils.py index a4c146f49..200a21d9d 100644 --- a/kitty/options/utils.py +++ b/kitty/options/utils.py @@ -1207,6 +1207,10 @@ class KeyDefinition(BaseDefinition): def is_suitable_for_global_shortcut(self) -> bool: return not self.options.when_focus_on and not self.options.mode and not self.options.new_mode and not self.is_sequence + @property + def full_key_sequence_to_trigger(self) -> Tuple[SingleKey, ...]: + return (self.trigger,) + self.rest + def __repr__(self) -> str: return self.pretty_repr('is_sequence', 'trigger', 'rest', 'options')