changeset 18227:7d90fa3e5f8d v8.1.2108

patch 8.1.2108: cannot close the cmdline window from CmdWinEnter Commit: https://github.com/vim/vim/commit/23324a0b35d18c5caac20b1d543ed2d1f762f5b5 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Oct 1 17:39:04 2019 +0200 patch 8.1.2108: cannot close the cmdline window from CmdWinEnter Problem: Cannot close the cmdline window from CmdWinEnter. (George Brown) Solution: Reset cmdwin_result earlier. (Christian Brabandt, closes https://github.com/vim/vim/issues/4980)
author Bram Moolenaar <Bram@vim.org>
date Tue, 01 Oct 2019 17:45:04 +0200
parents 78e84b457783
children 228e73d84c32
files src/ex_getln.c src/testdir/test_autocmd.vim src/version.c
diffstat 3 files changed, 38 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- 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;
--- 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
--- 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,