Use kitty_mod in debug config output

Fixes #5367
This commit is contained in:
Kovid Goyal
2022-08-11 23:45:23 +05:30
parent f42d2c63a6
commit 2b7455e353
2 changed files with 61 additions and 35 deletions

View File

@@ -3,7 +3,7 @@
from functools import update_wrapper
from typing import (
TYPE_CHECKING, Any, Callable, Generic, NamedTuple, Tuple, TypeVar, Union, Iterator
TYPE_CHECKING, Any, Callable, Generic, NamedTuple, Tuple, TypeVar, Union, Iterator, Dict
)
_T = TypeVar('_T')
@@ -49,16 +49,12 @@ class SignalInfo(NamedTuple):
sival_ptr: int
def mod_to_names(mods: int) -> Iterator[str]:
from .fast_data_types import (
GLFW_MOD_ALT, GLFW_MOD_CAPS_LOCK, GLFW_MOD_CONTROL, GLFW_MOD_HYPER,
GLFW_MOD_META, GLFW_MOD_NUM_LOCK, GLFW_MOD_SHIFT, GLFW_MOD_SUPER
)
from .constants import is_macos
modmap = {'ctrl': GLFW_MOD_CONTROL, 'shift': GLFW_MOD_SHIFT, ('opt' if is_macos else 'alt'): GLFW_MOD_ALT,
('cmd' if is_macos else 'super'): GLFW_MOD_SUPER, 'hyper': GLFW_MOD_HYPER, 'meta': GLFW_MOD_META,
'caps_lock': GLFW_MOD_CAPS_LOCK, 'num_lock': GLFW_MOD_NUM_LOCK}
for name, val in modmap.items():
def mod_to_names(mods: int, kitty_mod: int = 0) -> Iterator[str]:
has_kitty_mod = kitty_mod and (mods & kitty_mod) == kitty_mod
if has_kitty_mod:
mods &= ~kitty_mod
yield 'kitty_mod'
for name, val in modmap().items():
if mods & val:
yield name
@@ -76,24 +72,28 @@ class SingleKey(NamedTuple):
kwds.append(f'{f}={val!r}')
return 'SingleKey(' + ', '.join(kwds) + ')'
@property
def human_repr(self) -> str:
def human_repr_with_kitty_mod(self, kitty_mod: int = 0) -> str:
from .fast_data_types import glfw_get_key_name
names = []
names = list(mod_to_names(self.mods))
names = list(mod_to_names(self.mods, kitty_mod))
if self.key > 0:
kname = (glfw_get_key_name(0, self.key) if self.is_native else glfw_get_key_name(self.key, 0)) or f'{self.key}'
kname = {' ': 'space'}.get(kname, kname)
names.append(kname)
return '+'.join(names)
@property
def human_repr(self) -> str:
return self.human_repr_with_kitty_mod()
class Shortcut(NamedTuple):
keys: Tuple[SingleKey, ...]
kitty_mod: int = 0
@property
def human_repr(self) -> str:
return ' > '.join(k.human_repr for k in self.keys)
return ' > '.join(k.human_repr_with_kitty_mod(self.kitty_mod) for k in self.keys)
class MouseEvent(NamedTuple):
@@ -177,6 +177,19 @@ def run_once(f: Callable[[], _T]) -> 'RunOnce[_T]':
return RunOnce(f)
@run_once
def modmap() -> Dict[str, int]:
from .fast_data_types import (
GLFW_MOD_ALT, GLFW_MOD_CAPS_LOCK, GLFW_MOD_CONTROL, GLFW_MOD_HYPER,
GLFW_MOD_META, GLFW_MOD_NUM_LOCK, GLFW_MOD_SHIFT, GLFW_MOD_SUPER
)
from .constants import is_macos
return {'ctrl': GLFW_MOD_CONTROL, 'shift': GLFW_MOD_SHIFT, ('opt' if is_macos else 'alt'): GLFW_MOD_ALT,
('cmd' if is_macos else 'super'): GLFW_MOD_SUPER, 'hyper': GLFW_MOD_HYPER, 'meta': GLFW_MOD_META,
'caps_lock': GLFW_MOD_CAPS_LOCK, 'num_lock': GLFW_MOD_NUM_LOCK}
if TYPE_CHECKING:
from typing import Literal
ActionGroup = Literal['cp', 'sc', 'win', 'tab', 'mouse', 'mk', 'lay', 'misc', 'debug']