mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.2.0274: hang with combination of feedkeys(), Ex mode and :global
Problem: Hang with combination of feedkeys(), Ex mode and :global. (Yegappan Lakshmanan) Solution: Add the pending_exmode_active flag.
This commit is contained in:
parent
1fa8d2c33d
commit
9e2bcb5d23
@ -6185,9 +6185,11 @@ do_exedit(
|
||||
hold_gui_events = 0;
|
||||
#endif
|
||||
must_redraw = CLEAR;
|
||||
pending_exmode_active = TRUE;
|
||||
|
||||
main_loop(FALSE, TRUE);
|
||||
|
||||
pending_exmode_active = FALSE;
|
||||
RedrawingDisabled = rd;
|
||||
no_wait_return = nwr;
|
||||
msg_scroll = ms;
|
||||
|
@ -3041,6 +3041,10 @@ vgetorpeek(int advance)
|
||||
#ifdef FEAT_CMDWIN
|
||||
tc = c;
|
||||
#endif
|
||||
// return from main_loop()
|
||||
if (pending_exmode_active)
|
||||
exmode_active = EXMODE_NORMAL;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1028,6 +1028,10 @@ EXTERN int motion_force INIT(= 0); // motion force for pending operator
|
||||
* Ex mode (Q) state
|
||||
*/
|
||||
EXTERN int exmode_active INIT(= 0); // zero, EXMODE_NORMAL or EXMODE_VIM
|
||||
|
||||
// Flag set when main_loop() should exit when entering Ex mode.
|
||||
EXTERN int pending_exmode_active INIT(= FALSE);
|
||||
|
||||
EXTERN int ex_no_reprint INIT(= FALSE); // no need to print after z or p
|
||||
|
||||
EXTERN int reg_recording INIT(= 0); // register for recording or zero
|
||||
|
@ -111,4 +111,12 @@ func Test_open_command()
|
||||
close!
|
||||
endfunc
|
||||
|
||||
func Test_Ex_feedkeys()
|
||||
" this doesn't do anything useful, just check it doesn't hang
|
||||
new
|
||||
call setline(1, ["foo"])
|
||||
call feedkeys("Qg/foo/visual\<CR>", "xt")
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
|
@ -738,6 +738,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
274,
|
||||
/**/
|
||||
273,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user