From 3b8c7f6dd93dfee96b8847a6dc4c825ca5065e95 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 8 Sep 2024 09:48:14 +0530 Subject: [PATCH] macOS: Fix shortcuts that become entries in the global menubar being reported as removed shortcuts in the debug output --- docs/changelog.rst | 2 ++ kitty/boss.py | 2 +- kitty/debug_config.py | 11 ++++++++--- kitty/keys.py | 2 +- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 3514416a7f..97de84267e 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -79,6 +79,8 @@ Detailed list of changes - Fix a regression in the previous release that broke use of the ``cd`` command in session files (:iss:`7829`) +- macOS: Fix shortcuts that become entries in the global menubar being reported as removed shortcuts in the debug output + 0.36.2 [2024-09-06] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/kitty/boss.py b/kitty/boss.py index 91fbc21863..4afac62586 100644 --- a/kitty/boss.py +++ b/kitty/boss.py @@ -3034,7 +3034,7 @@ def debug_config(self) -> None: from .debug_config import debug_config w = self.window_for_dispatch or self.active_window if w is not None: - output = debug_config(get_options()) + output = debug_config(get_options(), self.mappings.global_shortcuts) set_clipboard_string(re.sub(r'\x1b.+?m', '', output)) output += '\n\x1b[35mThis debug output has been copied to the clipboard\x1b[m' self.display_scrollback(w, output, title=_('Current kitty options'), report_cursor=False) diff --git a/kitty/debug_config.py b/kitty/debug_config.py index cbcb6743dc..0bc450266d 100644 --- a/kitty/debug_config.py +++ b/kitty/debug_config.py @@ -70,7 +70,7 @@ def compare_maps( -def compare_opts(opts: KittyOpts, print: Print) -> None: +def compare_opts(opts: KittyOpts, global_shortcuts: dict[str, SingleKey] | None, print: Print) -> None: from .config import load_config print() print('Config options different from defaults:') @@ -134,6 +134,11 @@ def as_str(defns: Sequence[KeyDefinition]) -> str: initial = {as_sc(k, v[0]): as_str(v) for k, v in initial_.keymap.items()} final_ = opts.keyboard_modes.get(kmn, KeyboardMode(kmn)) final = {as_sc(k, v[0]): as_str(v) for k, v in final_.keymap.items()} + if not kmn and global_shortcuts: + for action, sk in global_shortcuts.items(): + sc = Shortcut((sk,)) + if sc not in final: + final[sc] = action compare_maps(final, opts.kitty_mod, initial, default_opts.kitty_mod, print, mode_name=kmn) new_keyboard_modes = set(opts.keyboard_modes) - set(default_opts.keyboard_modes) for kmn in new_keyboard_modes: @@ -229,7 +234,7 @@ def compositor_name() -> str: return ans -def debug_config(opts: KittyOpts) -> str: +def debug_config(opts: KittyOpts, global_shortcuts: dict[str, SingleKey] | None = None) -> str: from io import StringIO out = StringIO() p = partial(print, file=out) @@ -276,7 +281,7 @@ def debug_config(opts: KittyOpts) -> str: if opts.config_overrides: p(green('Loaded config overrides:')) p(' ', '\n '.join(opts.config_overrides)) - compare_opts(opts, p) + compare_opts(opts, global_shortcuts, p) p() p(green('Important environment variables seen by the kitty process:')) diff --git a/kitty/keys.py b/kitty/keys.py index 274f554f4b..0147926cbf 100644 --- a/kitty/keys.py +++ b/kitty/keys.py @@ -73,7 +73,7 @@ def __init__(self, global_shortcuts:Optional[dict[str, SingleKey]] = None, callb def current_keyboard_mode_name(self) -> str: return self.keyboard_mode_stack[-1].name if self.keyboard_mode_stack else '' - def update_keymap(self, global_shortcuts:Optional[dict[str, SingleKey]] = None) -> None: + def update_keymap(self, global_shortcuts: Optional[dict[str, SingleKey]] = None) -> None: if global_shortcuts is None: global_shortcuts = self.set_cocoa_global_shortcuts(self.get_options()) if is_macos else {} self.global_shortcuts_map: KeyMap = {v: [KeyDefinition(definition=k)] for k, v in global_shortcuts.items()}