patch 9.0.1665: empty CmdlineEnter autocommand causes errors in Ex mode
Problem: Empty CmdlineEnter autocommand causes errors in Ex mode.
Solution: Save and restore ex_pressedreturn. (Christian Brabandt,
closes # 12581, closes #12578)
diff --git a/src/autocmd.c b/src/autocmd.c
index 862ddf7..63e5673 100644
--- a/src/autocmd.c
+++ b/src/autocmd.c
@@ -2018,7 +2018,6 @@
int did_save_redobuff = FALSE;
save_redo_T save_redo;
int save_KeyTyped = KeyTyped;
- int save_did_emsg;
ESTACK_CHECK_DECLARATION;
/*
@@ -2310,12 +2309,14 @@
else
check_lnums_nested(TRUE);
- save_did_emsg = did_emsg;
+ int save_did_emsg = did_emsg;
+ int save_ex_pressedreturn = get_pressedreturn();
do_cmdline(NULL, getnextac, (void *)&patcmd,
DOCMD_NOWAIT|DOCMD_VERBOSE|DOCMD_REPEAT);
did_emsg += save_did_emsg;
+ set_pressedreturn(save_ex_pressedreturn);
if (nesting == 1)
// restore cursor and topline, unless they were changed
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 959331a..8fda332 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -9840,7 +9840,6 @@
}
#endif
-#if defined(FEAT_TIMERS) || defined(PROTO)
int
get_pressedreturn(void)
{
@@ -9852,4 +9851,3 @@
{
ex_pressedreturn = val;
}
-#endif
diff --git a/src/testdir/test_ex_mode.vim b/src/testdir/test_ex_mode.vim
index d03ec8f..59c28f3 100644
--- a/src/testdir/test_ex_mode.vim
+++ b/src/testdir/test_ex_mode.vim
@@ -239,6 +239,12 @@
au! CmdLineEnter
delfunc ExEnterFunc
+
+ au CmdlineEnter * :
+ call feedkeys("gQecho 1\r", 'xt')
+
+ au! CmdlineEnter
+
quit
endfunc
diff --git a/src/version.c b/src/version.c
index 894b47d..9c451ae 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1665,
+/**/
1664,
/**/
1663,