diff options
author | zeertzjq <zeertzjq@outlook.com> | 2024-02-03 11:05:38 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-03 11:05:38 +0800 |
commit | 6709f7f8f130377f44c36b2150a167a2afcbdff9 (patch) | |
tree | ea4c270eccd08d938ea469ff61c70746141b0cd9 /src | |
parent | 9ab9cde2ca7b917a894068698ef2fec3a851fdd5 (diff) | |
download | rneovim-6709f7f8f130377f44c36b2150a167a2afcbdff9.tar.gz rneovim-6709f7f8f130377f44c36b2150a167a2afcbdff9.tar.bz2 rneovim-6709f7f8f130377f44c36b2150a167a2afcbdff9.zip |
fix(keycodes): simplify S- properly when D- is present (#27316)
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/keycodes.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/nvim/keycodes.c b/src/nvim/keycodes.c index c45ad83204..c910d0955a 100644 --- a/src/nvim/keycodes.c +++ b/src/nvim/keycodes.c @@ -758,17 +758,20 @@ static int extract_modifiers(int key, int *modp, const bool simplify, bool *cons { int modifiers = *modp; - // Command-key and ctrl are special - if (!(modifiers & MOD_MASK_CMD) && !(modifiers & MOD_MASK_CTRL)) { - if ((modifiers & MOD_MASK_SHIFT) && ASCII_ISALPHA(key)) { - key = TOUPPER_ASC(key); + if ((modifiers & MOD_MASK_SHIFT) && ASCII_ISALPHA(key)) { + key = TOUPPER_ASC(key); + // With <C-S-a> we keep the shift modifier. + // With <S-a>, <A-S-a> and <S-A> we don't keep the shift modifier. + if (!(modifiers & MOD_MASK_CTRL)) { modifiers &= ~MOD_MASK_SHIFT; } } + // <C-H> and <C-h> mean the same thing, always use "H" if ((modifiers & MOD_MASK_CTRL) && ASCII_ISALPHA(key)) { key = TOUPPER_ASC(key); } + if (simplify && (modifiers & MOD_MASK_CTRL) && ((key >= '?' && key <= '_') || ASCII_ISALPHA(key))) { key = CTRL_CHR(key); |