1
0
forked from aniani/vim

patch 8.2.0420: Vim9: cannot interrupt a loop with CTRL-C

Problem:    Vim9: cannot interrupt a loop with CTRL-C.
Solution:   Check for CTRL-C once in a while.  Doesn't fully work yet.
This commit is contained in:
Bram Moolenaar
2020-03-20 19:37:47 +01:00
parent 20431c9dbb
commit f1ec378b01
4 changed files with 25 additions and 9 deletions

View File

@@ -2223,6 +2223,19 @@ fast_breakcheck(void)
} }
} }
/*
* Like line_breakcheck() but check 100 times less often.
*/
void
veryfast_breakcheck(void)
{
if (++breakcheck_count >= BREAKCHECK_SKIP * 100)
{
breakcheck_count = 0;
ui_breakcheck();
}
}
#if defined(VIM_BACKTICK) || defined(FEAT_EVAL) \ #if defined(VIM_BACKTICK) || defined(FEAT_EVAL) \
|| (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \ || (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
|| defined(PROTO) || defined(PROTO)

View File

@@ -40,6 +40,7 @@ char_u *concat_str(char_u *str1, char_u *str2);
void preserve_exit(void); void preserve_exit(void);
void line_breakcheck(void); void line_breakcheck(void);
void fast_breakcheck(void); void fast_breakcheck(void);
void veryfast_breakcheck(void);
char_u *get_cmd_output(char_u *cmd, char_u *infile, int flags, int *ret_len); char_u *get_cmd_output(char_u *cmd, char_u *infile, int flags, int *ret_len);
void f_system(typval_T *argvars, typval_T *rettv); void f_system(typval_T *argvars, typval_T *rettv);
void f_systemlist(typval_T *argvars, typval_T *rettv); void f_systemlist(typval_T *argvars, typval_T *rettv);

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>", 'L')
endif " endif
endwhile " endwhile
enddef " enddef
def Test_substitute_cmd() def Test_substitute_cmd()
new new

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 */
/**/
420,
/**/ /**/
419, 419,
/**/ /**/