vim-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 vim/vim#4980)
23324a0b35
This commit is contained in:
Jan Edmund Lazo 2020-09-15 01:49:54 -04:00
parent eb981a01e3
commit ba16475549
No known key found for this signature in database
GPG Key ID: 64915E6E9F735B15
2 changed files with 35 additions and 2 deletions

View File

@ -6471,12 +6471,15 @@ static int open_cmdwin(void)
// Save the command line info, can be used recursively.
save_cmdline(&save_ccline);
/* 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.
typestr[0] = (char_u)cmdwin_type;
typestr[1] = NUL;
@ -6492,7 +6495,6 @@ static int open_cmdwin(void)
/*
* Call the main loop until <CR> or CTRL-C is typed.
*/
cmdwin_result = 0;
normal_enter(true, false);
RedrawingDisabled = i;

View File

@ -1,6 +1,8 @@
" Tests for autocommands
source shared.vim
source check.vim
source term_util.vim
func! s:cleanup_buffers() abort
for bnr in range(1, bufnr('$'))
@ -1735,6 +1737,35 @@ func Test_throw_in_BufWritePre()
au! throwing
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
func Test_FileChangedShell_reload()
if !has('unix')
return