# HG changeset patch # User Bram Moolenaar # Date 1679160604 -3600 # Node ID cf48f4b9dc0afad027a75ca5993aeea7e36bae1e # Parent 4e6cc56ca41c64fd0906cf3d90eee36b323413ed patch 9.0.1414: in Kitty does not use the Shift modifier Commit: https://github.com/vim/vim/commit/ea83c194625e51c28a2796eba9ba87b0b9ab23e0 Author: Bram Moolenaar Date: Sat Mar 18 17:22:46 2023 +0000 patch 9.0.1414: in Kitty does not use the Shift modifier Problem: in Kitty does not use the Shift modifier. Solution: Apply the Shift modifier to ASCII letters. (closes https://github.com/vim/vim/issues/11913) diff --git a/src/getchar.c b/src/getchar.c --- a/src/getchar.c +++ b/src/getchar.c @@ -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 *mo 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; } diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1414, +/**/ 1413, /**/ 1412,