diff --git a/man.md b/man.md index 59bc968..65253ce 100644 --- a/man.md +++ b/man.md @@ -59,7 +59,8 @@ and each modifier is one of: \ **C** - Control\ \ **M** - Meta/Super\ \ **A** - Alt\ -\ **S** - Shift +\ **S** - Shift\ +\ **I** - AltGr (ISO_Level3_Shift) In addition to simple key mappings keyd can remap keys to actions which can conditionally send keystrokes or transform the state of the keymap. diff --git a/src/config.c b/src/config.c index 1c308e5..7957305 100644 --- a/src/config.c +++ b/src/config.c @@ -71,6 +71,11 @@ static const char *modseq_to_string(uint8_t mods) { i+=2; } + if(mods & MOD_ALT_GR) { + strcpy(s+i, "-I"); + i+=2; + } + if(i) return s+1; else @@ -105,6 +110,11 @@ static const char *keyseq_to_string(uint32_t keyseq) { i+=2; } + if(mods & MOD_ALT_GR) { + strcpy(s+i, "I-"); + i+=2; + } + if(key) strcpy(s+i, keycode_strings[code]); else @@ -131,6 +141,9 @@ static int parse_mods(const char *s, uint8_t *mods) case 'S': *mods |= MOD_SHIFT; break; + case 'I': + *mods |= MOD_ALT_GR; + break; default: return -1; break; @@ -170,6 +183,9 @@ static int parse_keyseq(const char *s, uint16_t *keycode, uint8_t *mods) { case 'S': *mods |= MOD_SHIFT; break; + case 'I': + *mods |= MOD_ALT_GR; + break; default: return -1; break; diff --git a/src/keys.h b/src/keys.h index 59bdc59..6afe6ef 100644 --- a/src/keys.h +++ b/src/keys.h @@ -41,6 +41,7 @@ #define MOD_SHIFT 0x4 #define MOD_SUPER 0x2 #define MOD_ALT 0x1 +#define MOD_ALT_GR 0x10 static const char *keycode_strings[] = { [KEY_ESC] = "esc", diff --git a/src/main.c b/src/main.c index 8af4866..eb4c8db 100644 --- a/src/main.c +++ b/src/main.c @@ -244,6 +244,8 @@ static void send_mods(uint16_t mods, int pressed) send_key(KEY_LEFTMETA, pressed); if(mods & MOD_ALT) send_key(KEY_LEFTALT, pressed); + if(mods & MOD_ALT_GR) + send_key(KEY_RIGHTALT, pressed); } static void send_keyseq(uint32_t keyseq, int pressed)