vim-patch:8.2.2433: opening cmdline window gives error in BufLeave autocommand

Problem:    Opening cmdline window gives error in BufLeave autocommand.
Solution:   Reset cmdwin_type when triggering the autocommand.
b63f3ca66d
This commit is contained in:
Jan Edmund Lazo 2021-05-11 22:18:48 -04:00
parent 3f9fa730ce
commit 07f6f12cf5
No known key found for this signature in database
GPG Key ID: 64915E6E9F735B15
2 changed files with 25 additions and 0 deletions

View File

@ -2434,6 +2434,11 @@ int do_ecmd(
* is returned by buflist_new(), nothing to do here.
*/
if (buf != curbuf) {
const int save_cmdwin_type = cmdwin_type;
// BufLeave applies to the old buffer.
cmdwin_type = 0;
/*
* Be careful: The autocommands may delete any buffer and change
* the current buffer.
@ -2449,6 +2454,7 @@ int do_ecmd(
}
set_bufref(&au_new_curbuf, buf);
apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, false, curbuf);
cmdwin_type = save_cmdwin_type;
if (!bufref_valid(&au_new_curbuf)) {
// New buffer has been deleted.
delbuf_msg(new_name); // Frees new_name.

View File

@ -1005,6 +1005,25 @@ func Test_buffers_lastused()
bwipeout bufc
endfunc
" Test for CmdwinEnter autocmd
func Test_cmdwin_autocmd()
CheckFeature cmdwin
augroup CmdWin
au!
autocmd BufLeave * if &buftype == '' | update | endif
autocmd CmdwinEnter * startinsert
augroup END
call assert_fails('call feedkeys("q:xyz\<CR>", "xt")', 'E492:')
call assert_equal('xyz', @:)
augroup CmdWin
au!
augroup END
augroup! CmdWin
endfunc
func Test_cmdlineclear_tabenter()
" See test/functional/legacy/cmdline_spec.lua
CheckScreendump