Recognize Hyper key

Also use only one implementation for detecting if a key is a modifier
key
This commit is contained in:
Kovid Goyal 2021-01-21 05:33:14 +05:30
parent f6d4b8e0b0
commit 60e589f775
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
11 changed files with 41 additions and 41 deletions

View File

@ -535,9 +535,10 @@ compatibility reasons.
"RAISE_VOLUME", "``57438 u``", "MUTE_VOLUME", "``57439 u``" "RAISE_VOLUME", "``57438 u``", "MUTE_VOLUME", "``57439 u``"
"LEFT_SHIFT", "``57440 u``", "LEFT_CONTROL", "``57441 u``" "LEFT_SHIFT", "``57440 u``", "LEFT_CONTROL", "``57441 u``"
"LEFT_ALT", "``57442 u``", "LEFT_SUPER", "``57443 u``" "LEFT_ALT", "``57442 u``", "LEFT_SUPER", "``57443 u``"
"RIGHT_SHIFT", "``57444 u``", "RIGHT_CONTROL", "``57445 u``" "LEFT_HYPER", "``57444 u``", "RIGHT_SHIFT", "``57445 u``"
"RIGHT_ALT", "``57446 u``", "RIGHT_SUPER", "``57447 u``" "RIGHT_CONTROL", "``57446 u``", "RIGHT_ALT", "``57447 u``"
"ISO_LEVEL3_SHIFT", "``57448 u``", "ISO_LEVEL5_SHIFT", "``57449 u``" "RIGHT_SUPER", "``57448 u``", "RIGHT_HYPER", "``57449 u``"
"ISO_LEVEL3_SHIFT", "``57450 u``", "ISO_LEVEL5_SHIFT", "``57451 u``"
.. end functional key table .. end functional key table
.. }}} .. }}}

2
gen-key-constants.py Normal file → Executable file
View File

@ -108,10 +108,12 @@ left_shift Shift_L 0x38 -
left_control Control_L 0x3B - left_control Control_L 0x3B -
left_alt Alt_L 0x3A - left_alt Alt_L 0x3A -
left_super Super_L 0x37 - left_super Super_L 0x37 -
left_hyper Hyper_L - -
right_shift Shift_R 0x3C - right_shift Shift_R 0x3C -
right_control Control_R 0x3E - right_control Control_R 0x3E -
right_alt Alt_R 0x3D - right_alt Alt_R 0x3D -
right_super Super_R 0x36 - right_super Super_R 0x36 -
right_hyper Hyper_R - -
iso_level3_shift ISO_Level3_Shift - - iso_level3_shift ISO_Level3_Shift - -
iso_level5_shift ISO_Level5_Shift - - iso_level5_shift ISO_Level5_Shift - -
''' # }}} ''' # }}}

16
glfw/glfw3.h vendored
View File

@ -445,13 +445,15 @@ typedef enum {
GLFW_FKEY_LEFT_CONTROL = 0xe061u, GLFW_FKEY_LEFT_CONTROL = 0xe061u,
GLFW_FKEY_LEFT_ALT = 0xe062u, GLFW_FKEY_LEFT_ALT = 0xe062u,
GLFW_FKEY_LEFT_SUPER = 0xe063u, GLFW_FKEY_LEFT_SUPER = 0xe063u,
GLFW_FKEY_RIGHT_SHIFT = 0xe064u, GLFW_FKEY_LEFT_HYPER = 0xe064u,
GLFW_FKEY_RIGHT_CONTROL = 0xe065u, GLFW_FKEY_RIGHT_SHIFT = 0xe065u,
GLFW_FKEY_RIGHT_ALT = 0xe066u, GLFW_FKEY_RIGHT_CONTROL = 0xe066u,
GLFW_FKEY_RIGHT_SUPER = 0xe067u, GLFW_FKEY_RIGHT_ALT = 0xe067u,
GLFW_FKEY_ISO_LEVEL3_SHIFT = 0xe068u, GLFW_FKEY_RIGHT_SUPER = 0xe068u,
GLFW_FKEY_ISO_LEVEL5_SHIFT = 0xe069u, GLFW_FKEY_RIGHT_HYPER = 0xe069u,
GLFW_FKEY_LAST = 0xe069u GLFW_FKEY_ISO_LEVEL3_SHIFT = 0xe06au,
GLFW_FKEY_ISO_LEVEL5_SHIFT = 0xe06bu,
GLFW_FKEY_LAST = 0xe06bu
} GLFWFunctionKey; } GLFWFunctionKey;
/* end functional key names */ /* end functional key names */

2
glfw/input.c vendored
View File

@ -624,10 +624,12 @@ _glfwGetKeyName(int key)
case GLFW_FKEY_LEFT_CONTROL: return "LEFT_CONTROL"; case GLFW_FKEY_LEFT_CONTROL: return "LEFT_CONTROL";
case GLFW_FKEY_LEFT_ALT: return "LEFT_ALT"; case GLFW_FKEY_LEFT_ALT: return "LEFT_ALT";
case GLFW_FKEY_LEFT_SUPER: return "LEFT_SUPER"; case GLFW_FKEY_LEFT_SUPER: return "LEFT_SUPER";
case GLFW_FKEY_LEFT_HYPER: return "LEFT_HYPER";
case GLFW_FKEY_RIGHT_SHIFT: return "RIGHT_SHIFT"; case GLFW_FKEY_RIGHT_SHIFT: return "RIGHT_SHIFT";
case GLFW_FKEY_RIGHT_CONTROL: return "RIGHT_CONTROL"; case GLFW_FKEY_RIGHT_CONTROL: return "RIGHT_CONTROL";
case GLFW_FKEY_RIGHT_ALT: return "RIGHT_ALT"; case GLFW_FKEY_RIGHT_ALT: return "RIGHT_ALT";
case GLFW_FKEY_RIGHT_SUPER: return "RIGHT_SUPER"; case GLFW_FKEY_RIGHT_SUPER: return "RIGHT_SUPER";
case GLFW_FKEY_RIGHT_HYPER: return "RIGHT_HYPER";
case GLFW_FKEY_ISO_LEVEL3_SHIFT: return "ISO_LEVEL3_SHIFT"; case GLFW_FKEY_ISO_LEVEL3_SHIFT: return "ISO_LEVEL3_SHIFT";
case GLFW_FKEY_ISO_LEVEL5_SHIFT: return "ISO_LEVEL5_SHIFT"; case GLFW_FKEY_ISO_LEVEL5_SHIFT: return "ISO_LEVEL5_SHIFT";
/* end functional key names */ /* end functional key names */

4
glfw/xkb_glfw.c vendored
View File

@ -140,10 +140,12 @@ glfw_key_for_sym(xkb_keysym_t key) {
case XKB_KEY_Control_L: return GLFW_FKEY_LEFT_CONTROL; case XKB_KEY_Control_L: return GLFW_FKEY_LEFT_CONTROL;
case XKB_KEY_Alt_L: return GLFW_FKEY_LEFT_ALT; case XKB_KEY_Alt_L: return GLFW_FKEY_LEFT_ALT;
case XKB_KEY_Super_L: return GLFW_FKEY_LEFT_SUPER; case XKB_KEY_Super_L: return GLFW_FKEY_LEFT_SUPER;
case XKB_KEY_Hyper_L: return GLFW_FKEY_LEFT_HYPER;
case XKB_KEY_Shift_R: return GLFW_FKEY_RIGHT_SHIFT; case XKB_KEY_Shift_R: return GLFW_FKEY_RIGHT_SHIFT;
case XKB_KEY_Control_R: return GLFW_FKEY_RIGHT_CONTROL; case XKB_KEY_Control_R: return GLFW_FKEY_RIGHT_CONTROL;
case XKB_KEY_Alt_R: return GLFW_FKEY_RIGHT_ALT; case XKB_KEY_Alt_R: return GLFW_FKEY_RIGHT_ALT;
case XKB_KEY_Super_R: return GLFW_FKEY_RIGHT_SUPER; case XKB_KEY_Super_R: return GLFW_FKEY_RIGHT_SUPER;
case XKB_KEY_Hyper_R: return GLFW_FKEY_RIGHT_HYPER;
case XKB_KEY_ISO_Level3_Shift: return GLFW_FKEY_ISO_LEVEL3_SHIFT; case XKB_KEY_ISO_Level3_Shift: return GLFW_FKEY_ISO_LEVEL3_SHIFT;
case XKB_KEY_ISO_Level5_Shift: return GLFW_FKEY_ISO_LEVEL5_SHIFT; case XKB_KEY_ISO_Level5_Shift: return GLFW_FKEY_ISO_LEVEL5_SHIFT;
/* end xkb to glfw */ /* end xkb to glfw */
@ -254,10 +256,12 @@ glfw_xkb_sym_for_key(uint32_t key) {
case GLFW_FKEY_LEFT_CONTROL: return XKB_KEY_Control_L; case GLFW_FKEY_LEFT_CONTROL: return XKB_KEY_Control_L;
case GLFW_FKEY_LEFT_ALT: return XKB_KEY_Alt_L; case GLFW_FKEY_LEFT_ALT: return XKB_KEY_Alt_L;
case GLFW_FKEY_LEFT_SUPER: return XKB_KEY_Super_L; case GLFW_FKEY_LEFT_SUPER: return XKB_KEY_Super_L;
case GLFW_FKEY_LEFT_HYPER: return XKB_KEY_Hyper_L;
case GLFW_FKEY_RIGHT_SHIFT: return XKB_KEY_Shift_R; case GLFW_FKEY_RIGHT_SHIFT: return XKB_KEY_Shift_R;
case GLFW_FKEY_RIGHT_CONTROL: return XKB_KEY_Control_R; case GLFW_FKEY_RIGHT_CONTROL: return XKB_KEY_Control_R;
case GLFW_FKEY_RIGHT_ALT: return XKB_KEY_Alt_R; case GLFW_FKEY_RIGHT_ALT: return XKB_KEY_Alt_R;
case GLFW_FKEY_RIGHT_SUPER: return XKB_KEY_Super_R; case GLFW_FKEY_RIGHT_SUPER: return XKB_KEY_Super_R;
case GLFW_FKEY_RIGHT_HYPER: return XKB_KEY_Hyper_R;
case GLFW_FKEY_ISO_LEVEL3_SHIFT: return XKB_KEY_ISO_Level3_Shift; case GLFW_FKEY_ISO_LEVEL3_SHIFT: return XKB_KEY_ISO_Level3_Shift;
case GLFW_FKEY_ISO_LEVEL5_SHIFT: return XKB_KEY_ISO_Level5_Shift; case GLFW_FKEY_ISO_LEVEL5_SHIFT: return XKB_KEY_ISO_Level5_Shift;
/* end glfw to xkb */ /* end glfw to xkb */

View File

@ -118,10 +118,12 @@ GLFW_FKEY_LEFT_SHIFT: int
GLFW_FKEY_LEFT_CONTROL: int GLFW_FKEY_LEFT_CONTROL: int
GLFW_FKEY_LEFT_ALT: int GLFW_FKEY_LEFT_ALT: int
GLFW_FKEY_LEFT_SUPER: int GLFW_FKEY_LEFT_SUPER: int
GLFW_FKEY_LEFT_HYPER: int
GLFW_FKEY_RIGHT_SHIFT: int GLFW_FKEY_RIGHT_SHIFT: int
GLFW_FKEY_RIGHT_CONTROL: int GLFW_FKEY_RIGHT_CONTROL: int
GLFW_FKEY_RIGHT_ALT: int GLFW_FKEY_RIGHT_ALT: int
GLFW_FKEY_RIGHT_SUPER: int GLFW_FKEY_RIGHT_SUPER: int
GLFW_FKEY_RIGHT_HYPER: int
GLFW_FKEY_ISO_LEVEL3_SHIFT: int GLFW_FKEY_ISO_LEVEL3_SHIFT: int
GLFW_FKEY_ISO_LEVEL5_SHIFT: int GLFW_FKEY_ISO_LEVEL5_SHIFT: int
# end glfw functional keys # end glfw functional keys

View File

@ -962,10 +962,12 @@ glfw_get_key_name(PyObject UNUSED *self, PyObject *args) {
case GLFW_FKEY_LEFT_CONTROL: return PyUnicode_FromString("left_control"); case GLFW_FKEY_LEFT_CONTROL: return PyUnicode_FromString("left_control");
case GLFW_FKEY_LEFT_ALT: return PyUnicode_FromString("left_alt"); case GLFW_FKEY_LEFT_ALT: return PyUnicode_FromString("left_alt");
case GLFW_FKEY_LEFT_SUPER: return PyUnicode_FromString("left_super"); case GLFW_FKEY_LEFT_SUPER: return PyUnicode_FromString("left_super");
case GLFW_FKEY_LEFT_HYPER: return PyUnicode_FromString("left_hyper");
case GLFW_FKEY_RIGHT_SHIFT: return PyUnicode_FromString("right_shift"); case GLFW_FKEY_RIGHT_SHIFT: return PyUnicode_FromString("right_shift");
case GLFW_FKEY_RIGHT_CONTROL: return PyUnicode_FromString("right_control"); case GLFW_FKEY_RIGHT_CONTROL: return PyUnicode_FromString("right_control");
case GLFW_FKEY_RIGHT_ALT: return PyUnicode_FromString("right_alt"); case GLFW_FKEY_RIGHT_ALT: return PyUnicode_FromString("right_alt");
case GLFW_FKEY_RIGHT_SUPER: return PyUnicode_FromString("right_super"); case GLFW_FKEY_RIGHT_SUPER: return PyUnicode_FromString("right_super");
case GLFW_FKEY_RIGHT_HYPER: return PyUnicode_FromString("right_hyper");
case GLFW_FKEY_ISO_LEVEL3_SHIFT: return PyUnicode_FromString("iso_level3_shift"); case GLFW_FKEY_ISO_LEVEL3_SHIFT: return PyUnicode_FromString("iso_level3_shift");
case GLFW_FKEY_ISO_LEVEL5_SHIFT: return PyUnicode_FromString("iso_level5_shift"); case GLFW_FKEY_ISO_LEVEL5_SHIFT: return PyUnicode_FromString("iso_level5_shift");
/* end glfw functional key names */ /* end glfw functional key names */
@ -1476,10 +1478,12 @@ init_glfw(PyObject *m) {
ADDC(GLFW_FKEY_LEFT_CONTROL); ADDC(GLFW_FKEY_LEFT_CONTROL);
ADDC(GLFW_FKEY_LEFT_ALT); ADDC(GLFW_FKEY_LEFT_ALT);
ADDC(GLFW_FKEY_LEFT_SUPER); ADDC(GLFW_FKEY_LEFT_SUPER);
ADDC(GLFW_FKEY_LEFT_HYPER);
ADDC(GLFW_FKEY_RIGHT_SHIFT); ADDC(GLFW_FKEY_RIGHT_SHIFT);
ADDC(GLFW_FKEY_RIGHT_CONTROL); ADDC(GLFW_FKEY_RIGHT_CONTROL);
ADDC(GLFW_FKEY_RIGHT_ALT); ADDC(GLFW_FKEY_RIGHT_ALT);
ADDC(GLFW_FKEY_RIGHT_SUPER); ADDC(GLFW_FKEY_RIGHT_SUPER);
ADDC(GLFW_FKEY_RIGHT_HYPER);
ADDC(GLFW_FKEY_ISO_LEVEL3_SHIFT); ADDC(GLFW_FKEY_ISO_LEVEL3_SHIFT);
ADDC(GLFW_FKEY_ISO_LEVEL5_SHIFT); ADDC(GLFW_FKEY_ISO_LEVEL5_SHIFT);
/* end glfw functional keys */ /* end glfw functional keys */

View File

@ -31,8 +31,8 @@ typedef struct {
KeyAction action; KeyAction action;
} EncodingData; } EncodingData;
static inline bool bool
is_modifier_key(uint32_t key) { is_modifier_key(const uint32_t key) {
START_ALLOW_CASE_RANGE START_ALLOW_CASE_RANGE
switch (key) { switch (key) {
case GLFW_FKEY_LEFT_SHIFT ... GLFW_FKEY_ISO_LEVEL5_SHIFT: case GLFW_FKEY_LEFT_SHIFT ... GLFW_FKEY_ISO_LEVEL5_SHIFT:

14
kitty/key_encoding.py generated
View File

@ -114,12 +114,14 @@ functional_key_number_to_name_map = {
57441: 'LEFT_CONTROL', 57441: 'LEFT_CONTROL',
57442: 'LEFT_ALT', 57442: 'LEFT_ALT',
57443: 'LEFT_SUPER', 57443: 'LEFT_SUPER',
57444: 'RIGHT_SHIFT', 57444: 'LEFT_HYPER',
57445: 'RIGHT_CONTROL', 57445: 'RIGHT_SHIFT',
57446: 'RIGHT_ALT', 57446: 'RIGHT_CONTROL',
57447: 'RIGHT_SUPER', 57447: 'RIGHT_ALT',
57448: 'ISO_LEVEL3_SHIFT', 57448: 'RIGHT_SUPER',
57449: 'ISO_LEVEL5_SHIFT'} 57449: 'RIGHT_HYPER',
57450: 'ISO_LEVEL3_SHIFT',
57451: 'ISO_LEVEL5_SHIFT'}
csi_number_to_functional_number_map = { csi_number_to_functional_number_map = {
2: 57348, 2: 57348,
3: 57349, 3: 57349,

View File

@ -79,24 +79,6 @@ active_window(void) {
return NULL; return NULL;
} }
static inline bool
is_modifier_key(uint32_t key) {
switch(key) {
case GLFW_FKEY_LEFT_SHIFT:
case GLFW_FKEY_RIGHT_SHIFT:
case GLFW_FKEY_LEFT_ALT:
case GLFW_FKEY_RIGHT_ALT:
case GLFW_FKEY_LEFT_CONTROL:
case GLFW_FKEY_RIGHT_CONTROL:
case GLFW_FKEY_LEFT_SUPER:
case GLFW_FKEY_RIGHT_SUPER:
case GLFW_FKEY_CAPS_LOCK:
return true;
default:
return false;
}
}
static inline void static inline void
update_ime_position(OSWindow *os_window, Window* w, Screen *screen) { update_ime_position(OSWindow *os_window, Window* w, Screen *screen) {
unsigned int cell_width = os_window->fonts_data->cell_width, cell_height = os_window->fonts_data->cell_height; unsigned int cell_width = os_window->fonts_data->cell_width, cell_height = os_window->fonts_data->cell_height;
@ -149,11 +131,7 @@ on_key_input(GLFWkeyevent *ev) {
if (global_state.in_sequence_mode) { if (global_state.in_sequence_mode) {
debug("in sequence mode, handling as shortcut\n"); debug("in sequence mode, handling as shortcut\n");
if ( if (
action != GLFW_RELEASE && action != GLFW_RELEASE && !is_modifier_key(key)
key != GLFW_FKEY_LEFT_SHIFT && key != GLFW_FKEY_RIGHT_SHIFT &&
key != GLFW_FKEY_LEFT_ALT && key != GLFW_FKEY_RIGHT_ALT &&
key != GLFW_FKEY_LEFT_CONTROL && key != GLFW_FKEY_RIGHT_CONTROL &&
key != GLFW_FKEY_LEFT_SUPER && key != GLFW_FKEY_RIGHT_SUPER
) { ) {
create_key_event(); create_key_event();
call_boss(process_sequence, "O", ke); call_boss(process_sequence, "O", ke);

View File

@ -17,3 +17,6 @@
int int
encode_glfw_key_event(const GLFWkeyevent *e, const bool cursor_key_mode, const unsigned flags, char *output); encode_glfw_key_event(const GLFWkeyevent *e, const bool cursor_key_mode, const unsigned flags, char *output);
bool
is_modifier_key(const uint32_t key);