0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.2.0421: interrupting with CTRL-C does not always work

Problem:    Interrupting with CTRL-C does not always work.
Solution:   Recognize CTRL-C while modifyOtherKeys is set.
This commit is contained in:
Bram Moolenaar 2020-03-20 20:48:49 +01:00
parent f1ec378b01
commit 9645e2d9fc
4 changed files with 28 additions and 13 deletions

View File

@ -2472,7 +2472,17 @@ f_feedkeys(typval_T *argvars, typval_T *rettv UNUSED)
if (lowlevel) if (lowlevel)
{ {
#ifdef USE_INPUT_BUF #ifdef USE_INPUT_BUF
add_to_input_buf(keys, (int)STRLEN(keys)); int idx;
int len = (int)STRLEN(keys);
for (idx = 0; idx < len; ++idx)
{
// if a CTRL-C was typed, set got_int, similar to what
// happens in fill_input_buf()
if (keys[idx] == 3 && ctrl_c_interrupts && typed)
got_int = TRUE;
add_to_input_buf(keys + idx, 1);
}
#else #else
emsg(_("E980: lowlevel input not supported")); emsg(_("E980: lowlevel input not supported"));
#endif #endif

View File

@ -942,15 +942,15 @@ def Test_while_loop()
assert_equal('1_3_', result) assert_equal('1_3_', result)
enddef enddef
" def Test_interrupt_loop() def Test_interrupt_loop()
" let x = 0 let x = 0
" while 1 while 1
" x += 1 x += 1
" if x == 100 if x == 100
" feedkeys("\<C-C>", 'L') feedkeys("\<C-C>", 'Lt')
" endif endif
" endwhile endwhile
" enddef enddef
def Test_substitute_cmd() def Test_substitute_cmd()
new new

View File

@ -2280,7 +2280,7 @@ fill_input_buf(int exit_on_error UNUSED)
for (try = 0; try < 100; ++try) for (try = 0; try < 100; ++try)
{ {
size_t readlen = (size_t)((INBUFLEN - inbufcount) size_t readlen = (size_t)((INBUFLEN - inbufcount)
/ input_conv.vc_factor); / input_conv.vc_factor);
# ifdef VMS # ifdef VMS
len = vms_read((char *)inbuf + inbufcount, readlen); len = vms_read((char *)inbuf + inbufcount, readlen);
# else # else
@ -2344,9 +2344,12 @@ fill_input_buf(int exit_on_error UNUSED)
while (len-- > 0) while (len-- > 0)
{ {
/* /*
* if a CTRL-C was typed, remove it from the buffer and set got_int * If a CTRL-C was typed, remove it from the buffer and set
* got_int. Also recognize CTRL-C with modifyOtherKeys set.
*/ */
if (inbuf[inbufcount] == 3 && ctrl_c_interrupts) if (ctrl_c_interrupts && (inbuf[inbufcount] == 3
|| (len >= 9 && STRNCMP(inbuf + inbufcount,
"\e[27;5;99~", 10) == 0)))
{ {
// remove everything typed before the CTRL-C // remove everything typed before the CTRL-C
mch_memmove(inbuf, inbuf + inbufcount, (size_t)(len + 1)); mch_memmove(inbuf, inbuf + inbufcount, (size_t)(len + 1));

View File

@ -738,6 +738,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
421,
/**/ /**/
420, 420,
/**/ /**/