From: Consolatis <35009135+Consolatis@users.noreply.github.com> Date: Sun, 8 Oct 2023 17:24:35 +0000 (+0200) Subject: keybinds: add support for Meta and Hyper modifiers X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=65bd32d62500389a1d6affafac6d1989ba28042f;p=proto%2Flabwc.git keybinds: add support for Meta and Hyper modifiers The modifiers can be used in keybinds via M-key and H-key Additionally adds support for: - Mod1 (same as A) - Mod3 (same as H) - Mod4 (same as W) - Mod5 (same as M) This is compatible with the format used by Openbox. (http://openbox.org/wiki/Help:Bindings#Syntax) Mod2 (NumLock) and Caps are still not supported due to their locking behavior but could theoretically be added. Fixes: #1061 --- diff --git a/src/config/keybind.c b/src/config/keybind.c index f741b2bd..1de02513 100644 --- a/src/config/keybind.c +++ b/src/config/keybind.c @@ -15,14 +15,19 @@ uint32_t parse_modifier(const char *symname) { + /* Mod2 == NumLock */ if (!strcmp(symname, "S")) { return WLR_MODIFIER_SHIFT; } else if (!strcmp(symname, "C")) { return WLR_MODIFIER_CTRL; - } else if (!strcmp(symname, "A")) { + } else if (!strcmp(symname, "A") || !strcmp(symname, "Mod1")) { return WLR_MODIFIER_ALT; - } else if (!strcmp(symname, "W")) { + } else if (!strcmp(symname, "W") || !strcmp(symname, "Mod4")) { return WLR_MODIFIER_LOGO; + } else if (!strcmp(symname, "M") || !strcmp(symname, "Mod5")) { + return WLR_MODIFIER_MOD5; + } else if (!strcmp(symname, "H") || !strcmp(symname, "Mod3")) { + return WLR_MODIFIER_MOD3; } else { return 0; } diff --git a/src/keyboard.c b/src/keyboard.c index 43c84755..2b705140 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -130,7 +130,10 @@ static bool is_modifier_key(xkb_keysym_t sym) || sym == XKB_KEY_Control_L || sym == XKB_KEY_Control_R || sym == XKB_KEY_Super_L - || sym == XKB_KEY_Super_R; + || sym == XKB_KEY_Super_R + /* Right hand Alt key for Mod5 */ + || sym == XKB_KEY_Mode_switch + || sym == XKB_KEY_ISO_Level3_Shift; } struct keysyms {