]> granicus.if.org Git - vim/commitdiff
patch 9.0.1193: cannot map <Esc> when using the Kitty key protocol v9.0.1193
authorBram Moolenaar <Bram@vim.org>
Fri, 13 Jan 2023 18:46:57 +0000 (18:46 +0000)
committerBram Moolenaar <Bram@vim.org>
Fri, 13 Jan 2023 18:46:57 +0000 (18:46 +0000)
Problem:    Cannot map <Esc> when using the Kitty key protocol.
Solution:   Add a non-simplified mapping for K_ESC. (closes #11811)

src/misc2.c
src/version.c

index 4de94f3a5f9c223ae2a9e6dd46d251cec8887968..6ffd5aabdd26e674b8cd618856bdb182fff04a91 100644 (file)
@@ -1292,10 +1292,10 @@ get_special_key_name(int c, int modifiers)
 }
 
 /*
- * Try translating a <> name at (*srcp)[] to dst[].
- * Return the number of characters added to dst[], zero for no match.
- * If there is a match, srcp is advanced to after the <> name.
- * dst[] must be big enough to hold the result (up to six characters)!
+ * Try translating a <> name at "(*srcp)[]" to "dst[]".
+ * Return the number of characters added to "dst[]", zero for no match.
+ * If there is a match, "srcp" is advanced to after the <> name.
+ * "dst[]" must be big enough to hold the result (up to six characters)!
  */
     int
 trans_special(
@@ -1352,8 +1352,9 @@ special_to_buf(int key, int modifiers, int escape_ks, char_u *dst)
 }
 
 /*
- * Try translating a <> name at (*srcp)[], return the key and modifiers.
- * srcp is advanced to after the <> name.
+ * Try translating a <> name at "(*srcp)[]", return the key and put modifiers
+ * in "modp".
+ * "srcp" is advanced to after the <> name.
  * returns 0 if there is no match.
  */
     int
@@ -1486,7 +1487,7 @@ find_special_key(
                 */
                key = simplify_key(key, &modifiers);
 
-               if (!(flags & FSK_KEYCODE))
+               if ((flags & FSK_KEYCODE) == 0)
                {
                    // don't want keycode, use single byte code
                    if (key == K_BS)
@@ -1494,6 +1495,19 @@ find_special_key(
                    else if (key == K_DEL || key == K_KDEL)
                        key = DEL;
                }
+               else if (key == 27
+                       && (kitty_protocol_state == KKPS_ENABLED
+                           || kitty_protocol_state == KKPS_DISABLED))
+               {
+                   // Using the Kitty key protocol, which uses K_ESC for an
+                   // Esc character.  For the simplified keys use the Esc
+                   // character and set did_simplify, then in the
+                   // non-simplified keys use K_ESC.
+                   if ((flags & FSK_SIMPLIFY) != 0)
+                       *did_simplify = TRUE;
+                   else
+                       key = K_ESC;
+               }
 
                // Normal Key with modifier: Try to make a single byte code.
                if (!IS_SPECIAL(key))
index a2f363cd09f1e52d92c5a770920d1f0165ddcff7..a4839982fb7da7b1722669bc204f2c746bb50769 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1193,
 /**/
     1192,
 /**/