0
0
mirror of https://github.com/vim/vim.git synced 2025-09-25 03:54:15 -04:00

patch 9.0.0234: cannot make difference between :normal end and argument char

Problem:    Cannot make difference between the end of :normal and a character
            in its argument.
Solution:   Add the "typebuf_was_empty" flag. (closes #10950)
This commit is contained in:
Bram Moolenaar
2022-08-21 10:40:07 +01:00
parent a7704226a2
commit 8d69637133
4 changed files with 16 additions and 3 deletions

View File

@@ -3056,7 +3056,10 @@ vgetorpeek(int advance)
++vgetc_busy;
if (advance)
{
KeyStuffed = FALSE;
typebuf_was_empty = FALSE;
}
init_typebuf();
start_stuff();
@@ -3361,6 +3364,10 @@ vgetorpeek(int advance)
#ifdef FEAT_CMDWIN
tc = c;
#endif
// set a flag to indicate this wasn't a normal char
if (advance)
typebuf_was_empty = TRUE;
// return from main_loop()
if (pending_exmode_active)
exmode_active = EXMODE_NORMAL;

View File

@@ -1206,6 +1206,10 @@ EXTERN typebuf_T typebuf // typeahead buffer
= {NULL, NULL, 0, 0, 0, 0, 0, 0, 0}
#endif
;
// Flag used to indicate that vgetorpeek() returned a char like Esc when the
// :normal argument was exhausted.
EXTERN int typebuf_was_empty INIT(= FALSE);
EXTERN int ex_normal_busy INIT(= 0); // recursiveness of ex_normal()
#ifdef FEAT_EVAL
EXTERN int in_feedkeys INIT(= 0); // ex_normal_busy set in feedkeys()

View File

@@ -6808,11 +6808,11 @@ nv_esc(cmdarg_T *cap)
#endif
}
#ifdef FEAT_CMDWIN
else if (cmdwin_type != 0 && ex_normal_busy)
else if (cmdwin_type != 0 && ex_normal_busy && typebuf_was_empty)
{
// When :normal runs out of characters while in the command line window
// vgetorpeek() will return ESC. Exit the cmdline window to break the
// loop.
// vgetorpeek() will repeatedly return ESC. Exit the cmdline window to
// break the loop.
cmdwin_result = K_IGNORE;
return;
}

View File

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