fix(keycodes): simplify S- properly when D- is present (#27316)

This commit is contained in:
zeertzjq
2024-02-03 11:05:38 +08:00
committed by GitHub
parent 9ab9cde2ca
commit 6709f7f8f1
2 changed files with 21 additions and 4 deletions

View File

@@ -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);