changeset 31722:6fa4f94aca5a v9.0.1193

patch 9.0.1193: cannot map <Esc> when using the Kitty key protocol Commit: https://github.com/vim/vim/commit/32030a9f3be25e1343ef15028511614fb4c20e9f Author: Bram Moolenaar <Bram@vim.org> Date: Fri Jan 13 18:46:57 2023 +0000 patch 9.0.1193: cannot map <Esc> when using the Kitty key protocol Problem: Cannot map <Esc> when using the Kitty key protocol. Solution: Add a non-simplified mapping for K_ESC. (closes https://github.com/vim/vim/issues/11811)
author Bram Moolenaar <Bram@vim.org>
date Fri, 13 Jan 2023 20:00:02 +0100
parents a651dcb2c127
children 27bc6844836a
files src/misc2.c src/version.c
diffstat 2 files changed, 23 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -1292,10 +1292,10 @@ get_special_key_name(int c, int modifier
 }
 
 /*
- * 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, i
 }
 
 /*
- * 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))
--- 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 */
 /**/
+    1193,
+/**/
     1192,
 /**/
     1191,