0
0
mirror of https://github.com/vim/vim.git synced 2025-07-24 10:45:12 -04:00

patch 9.0.1414: <M-S-x> in Kitty does not use the Shift modifier

Problem:    <M-S-x> in Kitty does not use the Shift modifier.
Solution:   Apply the Shift modifier to ASCII letters. (closes #11913)
This commit is contained in:
Bram Moolenaar 2023-03-18 17:22:46 +00:00
parent 2a003177eb
commit ea83c19462
2 changed files with 15 additions and 1 deletions

View File

@ -1623,13 +1623,14 @@ updatescript(int c)
/*
* Convert "c" plus "modifiers" to merge the effect of modifyOtherKeys into the
* character.
* character. Also for when the Kitty key protocol is used.
*/
int
merge_modifyOtherKeys(int c_arg, int *modifiers)
{
int c = c_arg;
// CTRL only uses the lower 5 bits of the character.
if (*modifiers & MOD_MASK_CTRL)
{
if ((c >= '`' && c <= 0x7f) || (c >= '@' && c <= '_'))
@ -1658,12 +1659,23 @@ merge_modifyOtherKeys(int c_arg, int *modifiers)
if (c != c_arg)
*modifiers &= ~MOD_MASK_CTRL;
}
// Alt/Meta sets the 8th bit of the character.
if ((*modifiers & (MOD_MASK_META | MOD_MASK_ALT))
&& c >= 0 && c <= 127)
{
// Some terminals (esp. Kitty) do not include Shift in the character.
// Apply it here to get consistency across terminals. Only do ASCII
// letters, for other characters it depends on the keyboard layout.
if ((*modifiers & MOD_MASK_SHIFT) && c >= 'a' && c <= 'z')
{
c += 'a' - 'A';
*modifiers &= ~MOD_MASK_SHIFT;
}
c += 0x80;
*modifiers &= ~(MOD_MASK_META | MOD_MASK_ALT);
}
return c;
}

View File

@ -695,6 +695,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1414,
/**/
1413,
/**/