summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2023-01-13 18:46:57 +0000
committerBram Moolenaar <Bram@vim.org>2023-01-13 18:46:57 +0000
commit32030a9f3be25e1343ef15028511614fb4c20e9f (patch)
treec8f4271f148ec5bdfd24ab20419a9b7d4699893d
parentd40f00cb43019fb4d39b89f407f8b52e92f9e16f (diff)
patch 9.0.1193: cannot map <Esc> when using the Kitty key protocolv9.0.1193
Problem: Cannot map <Esc> when using the Kitty key protocol. Solution: Add a non-simplified mapping for K_ESC. (closes #11811)
-rw-r--r--src/misc2.c28
-rw-r--r--src/version.c2
2 files changed, 23 insertions, 7 deletions
diff --git a/src/misc2.c b/src/misc2.c
index 4de94f3a5f..6ffd5aabdd 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -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))
diff --git a/src/version.c b/src/version.c
index a2f363cd09..a4839982fb 100644
--- 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,