diff options
author | Bram Moolenaar <Bram@vim.org> | 2023-01-13 18:46:57 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2023-01-13 18:46:57 +0000 |
commit | 32030a9f3be25e1343ef15028511614fb4c20e9f (patch) | |
tree | c8f4271f148ec5bdfd24ab20419a9b7d4699893d | |
parent | d40f00cb43019fb4d39b89f407f8b52e92f9e16f (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.c | 28 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |