mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-22 00:08:04 +02:00
Add NumLock and CapsLock reporting to the keyboard protocol
This commit is contained in:
@@ -5,11 +5,18 @@
|
||||
from typing import Optional, Union
|
||||
|
||||
from .config import KeyAction, KeyMap, SequenceMap, SubSequenceMap
|
||||
from .fast_data_types import KeyEvent
|
||||
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, KeyEvent
|
||||
)
|
||||
from .types import SingleKey
|
||||
from .typing import ScreenType
|
||||
|
||||
|
||||
mod_mask = GLFW_MOD_ALT | GLFW_MOD_CONTROL | GLFW_MOD_SHIFT | GLFW_MOD_SUPER | GLFW_MOD_META | GLFW_MOD_HYPER
|
||||
lock_mask = GLFW_MOD_NUM_LOCK | GLFW_MOD_CAPS_LOCK
|
||||
|
||||
|
||||
def keyboard_mode_name(screen: ScreenType) -> str:
|
||||
flags = screen.current_key_encoding_flags()
|
||||
if flags:
|
||||
@@ -18,22 +25,22 @@ def keyboard_mode_name(screen: ScreenType) -> str:
|
||||
|
||||
|
||||
def get_shortcut(keymap: Union[KeyMap, SequenceMap], ev: KeyEvent) -> Optional[Union[KeyAction, SubSequenceMap]]:
|
||||
mods = ev.mods & 0b1111
|
||||
mods = ev.mods & mod_mask
|
||||
ans = keymap.get(SingleKey(mods, False, ev.key))
|
||||
if ans is None and ev.shifted_key and mods & 0b1:
|
||||
ans = keymap.get(SingleKey(mods & 0b1110, False, ev.shifted_key))
|
||||
if ans is None and ev.shifted_key and mods & GLFW_MOD_SHIFT:
|
||||
ans = keymap.get(SingleKey(mods & (~GLFW_MOD_SHIFT), False, ev.shifted_key))
|
||||
if ans is None:
|
||||
ans = keymap.get(SingleKey(mods, True, ev.native_key))
|
||||
return ans
|
||||
|
||||
|
||||
def shortcut_matches(s: SingleKey, ev: KeyEvent) -> bool:
|
||||
mods = ev.mods & 0b1111
|
||||
smods = s.mods & 0b1111
|
||||
mods = ev.mods & mod_mask
|
||||
smods = s.mods & mod_mask
|
||||
if s.is_native:
|
||||
return s.key == ev.native_key and smods == mods
|
||||
if s.key == ev.key and mods == smods:
|
||||
return True
|
||||
if ev.shifted_key and mods & 0b1 and (mods & 0b1110) == smods and ev.shifted_key == s.key:
|
||||
if ev.shifted_key and mods & GLFW_MOD_SHIFT and (mods & ~GLFW_MOD_SHIFT) == smods and ev.shifted_key == s.key:
|
||||
return True
|
||||
return False
|
||||
|
||||
Reference in New Issue
Block a user