summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ex_getln.c12
-rw-r--r--src/testdir/test_autocmd.vim29
-rw-r--r--src/version.c2
3 files changed, 38 insertions, 5 deletions
diff --git a/src/ex_getln.c b/src/ex_getln.c
index ef8e387b7..ef87413b7 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -136,11 +136,11 @@ restore_viewstate(viewstate_T *vs)
// Struct to store the state of 'incsearch' highlighting.
typedef struct {
pos_T search_start; // where 'incsearch' starts searching
- pos_T save_cursor;
+ pos_T save_cursor;
viewstate_T init_viewstate;
viewstate_T old_viewstate;
- pos_T match_start;
- pos_T match_end;
+ pos_T match_start;
+ pos_T match_end;
int did_incsearch;
int incsearch_postponed;
int magic_save;
@@ -4152,12 +4152,15 @@ open_cmdwin(void)
invalidate_botline();
redraw_later(SOME_VALID);
- /* No Ex mode here! */
+ // No Ex mode here!
exmode_active = 0;
State = NORMAL;
setmouse();
+ // Reset here so it can be set by a CmdWinEnter autocommand.
+ cmdwin_result = 0;
+
// Trigger CmdwinEnter autocommands.
trigger_cmd_autocmd(cmdwin_type, EVENT_CMDWINENTER);
if (restart_edit != 0) // autocmd with ":startinsert"
@@ -4169,7 +4172,6 @@ open_cmdwin(void)
/*
* Call the main loop until <CR> or CTRL-C is typed.
*/
- cmdwin_result = 0;
main_loop(TRUE, FALSE);
RedrawingDisabled = i;
diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim
index f2c9af50f..fe77bf578 100644
--- a/src/testdir/test_autocmd.vim
+++ b/src/testdir/test_autocmd.vim
@@ -2259,3 +2259,32 @@ func Test_autocmd_SafeState()
call StopVimInTerminal(buf)
call delete('XSafeState')
endfunc
+
+func Test_autocmd_CmdWinEnter()
+ CheckRunVimInTerminal
+ " There is not cmdwin switch, so
+ " test for cmdline_hist
+ " (both are available with small builds)
+ CheckFeature cmdline_hist
+ let lines =<< trim END
+ let b:dummy_var = 'This is a dummy'
+ autocmd CmdWinEnter * quit
+ let winnr = winnr('$')
+ END
+ let filename='XCmdWinEnter'
+ call writefile(lines, filename)
+ let buf = RunVimInTerminal('-S '.filename, #{rows: 6})
+
+ call term_sendkeys(buf, "q:")
+ call term_wait(buf)
+ call term_sendkeys(buf, ":echo b:dummy_var\<cr>")
+ call WaitForAssert({-> assert_match('^This is a dummy', term_getline(buf, 6))}, 1000)
+ call term_sendkeys(buf, ":echo &buftype\<cr>")
+ call WaitForAssert({-> assert_notmatch('^nofile', term_getline(buf, 6))}, 1000)
+ call term_sendkeys(buf, ":echo winnr\<cr>")
+ call WaitForAssert({-> assert_match('^1', term_getline(buf, 6))}, 1000)
+
+ " clean up
+ call StopVimInTerminal(buf)
+ call delete(filename)
+endfunc
diff --git a/src/version.c b/src/version.c
index e2f0c9200..469b759b6 100644
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2108,
+/**/
2107,
/**/
2106,