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:
parent
f1ec378b01
commit
9645e2d9fc
@ -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
|
||||||
|
@ -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
|
||||||
|
9
src/ui.c
9
src/ui.c
@ -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));
|
||||||
|
@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user