diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/getchar.c | 2 | ||||
-rw-r--r-- | src/proto/getchar.pro | 1 | ||||
-rw-r--r-- | src/ui.c | 6 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 9 insertions, 2 deletions
diff --git a/src/getchar.c b/src/getchar.c index 6867b59ed7..da05033709 100644 --- a/src/getchar.c +++ b/src/getchar.c @@ -2511,7 +2511,7 @@ check_simplify_modifier(int max_offset) * modifyOtherKeys level 2 is enabled or the kitty keyboard protocol is * enabled. */ - static int + int key_protocol_enabled(void) { // If xterm has responded to XTQMODKEYS it overrules seenModifyOtherKeys. diff --git a/src/proto/getchar.pro b/src/proto/getchar.pro index 7e05870a97..b122a14d05 100644 --- a/src/proto/getchar.pro +++ b/src/proto/getchar.pro @@ -51,6 +51,7 @@ void f_getchar(typval_T *argvars, typval_T *rettv); void f_getcharstr(typval_T *argvars, typval_T *rettv); void f_getcharmod(typval_T *argvars, typval_T *rettv); void parse_queued_messages(void); +int key_protocol_enabled(void); void vungetc(int c); int fix_input_buffer(char_u *buf, int len); int input_available(void); @@ -1032,7 +1032,11 @@ fill_input_buf(int exit_on_error UNUSED) // If a CTRL-C was typed, remove it from the buffer and set // got_int. Also recognize CTRL-C with modifyOtherKeys set, lower // and upper case, in two forms. - if (ctrl_c_interrupts && (inbuf[inbufcount] == 3 + // If terminal key protocols are in use, we expect to receive + // Ctrl_C as an escape sequence, ignore a raw Ctrl_C as this could + // be paste data. + if (ctrl_c_interrupts + && ((inbuf[inbufcount] == Ctrl_C && !key_protocol_enabled()) || (len >= 10 && STRNCMP(inbuf + inbufcount, "\033[27;5;99~", 10) == 0) || (len >= 10 && STRNCMP(inbuf + inbufcount, diff --git a/src/version.c b/src/version.c index 0284594f76..890e92c7cb 100644 --- a/src/version.c +++ b/src/version.c @@ -705,6 +705,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2069, +/**/ 2068, /**/ 2067, |