diff options
author | Bram Moolenaar <Bram@vim.org> | 2019-09-09 18:35:33 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2019-09-09 18:35:33 +0200 |
commit | 96e38a86a710fb6daec4550ac1667f019dc3a40e (patch) | |
tree | c49b193fdb61c2643ffade36920b9308093be1cc /src | |
parent | adbde3fbedd4a5379ddf0cfc9a6854b52955fd4a (diff) | |
download | vim-git-96e38a86a710fb6daec4550ac1667f019dc3a40e.tar.gz |
patch 8.1.2017: cannot execute commands after closing the cmdline windowv8.1.2017
Problem: Cannot execute commands after closing the cmdline window.
Solution: Also trigger BufEnter and WinEnter. (closes #4762)
Diffstat (limited to 'src')
-rw-r--r-- | src/ex_getln.c | 46 | ||||
-rw-r--r-- | src/testdir/test_cmdline.vim | 35 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 53 insertions, 30 deletions
diff --git a/src/ex_getln.c b/src/ex_getln.c index ce32dbe33..5e32f2b6c 100644 --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -4069,30 +4069,26 @@ open_cmdwin(void) } set_bufref(&old_curbuf, curbuf); - /* Save current window sizes. */ + // Save current window sizes. win_size_save(&winsizes); - /* Don't execute autocommands while creating the window. */ - block_autocmds(); - // When using completion in Insert mode with <C-R>=<C-F> one can open the // command line window, but we don't want the popup menu then. pum_undisplay(); - /* don't use a new tab page */ + // don't use a new tab page cmdmod.tab = 0; cmdmod.noswapfile = 1; - /* Create a window for the command-line buffer. */ + // Create a window for the command-line buffer. if (win_split((int)p_cwh, WSP_BOT) == FAIL) { beep_flush(); - unblock_autocmds(); return K_IGNORE; } cmdwin_type = get_cmdline_type(); - /* Create the command-line buffer empty. */ + // Create the command-line buffer empty. (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, NULL); (void)setfname(curbuf, (char_u *)"[Command Line]", NULL, TRUE); set_option_value((char_u *)"bt", 0L, (char_u *)"nofile", OPT_LOCAL); @@ -4106,12 +4102,10 @@ open_cmdwin(void) # endif RESET_BINDING(curwin); - /* Do execute autocommands for setting the filetype (load syntax). */ - unblock_autocmds(); - /* But don't allow switching to another buffer. */ + // Don't allow switching to another buffer. ++curbuf_lock; - /* Showing the prompt may have set need_wait_return, reset it. */ + // Showing the prompt may have set need_wait_return, reset it. need_wait_return = FALSE; histtype = hist_char2type(cmdwin_type); @@ -4126,11 +4120,11 @@ open_cmdwin(void) } --curbuf_lock; - /* Reset 'textwidth' after setting 'filetype' (the Vim filetype plugin - * sets 'textwidth' to 78). */ + // Reset 'textwidth' after setting 'filetype' (the Vim filetype plugin + // sets 'textwidth' to 78). curbuf->b_p_tw = 0; - /* Fill the buffer with the history. */ + // Fill the buffer with the history. init_history(); if (get_hislen() > 0) { @@ -4167,9 +4161,9 @@ open_cmdwin(void) setmouse(); # endif - /* Trigger CmdwinEnter autocommands. */ + // Trigger CmdwinEnter autocommands. trigger_cmd_autocmd(cmdwin_type, EVENT_CMDWINENTER); - if (restart_edit != 0) /* autocmd with ":startinsert" */ + if (restart_edit != 0) // autocmd with ":startinsert" stuffcharReadbuff(K_NOP); i = RedrawingDisabled; @@ -4187,11 +4181,11 @@ open_cmdwin(void) save_KeyTyped = KeyTyped; # endif - /* Trigger CmdwinLeave autocommands. */ + // Trigger CmdwinLeave autocommands. trigger_cmd_autocmd(cmdwin_type, EVENT_CMDWINLEAVE); # ifdef FEAT_FOLDING - /* Restore KeyTyped in case it is modified by autocommands */ + // Restore KeyTyped in case it is modified by autocommands KeyTyped = save_KeyTyped; # endif @@ -4268,10 +4262,8 @@ open_cmdwin(void) } } - /* Don't execute autocommands while deleting the window. */ - block_autocmds(); # ifdef FEAT_CONCEAL - /* Avoid command-line window first character being concealed. */ + // Avoid command-line window first character being concealed. curwin->w_p_cole = 0; # endif wp = curwin; @@ -4279,15 +4271,13 @@ open_cmdwin(void) win_goto(old_curwin); win_close(wp, TRUE); - /* win_close() may have already wiped the buffer when 'bh' is - * set to 'wipe' */ + // win_close() may have already wiped the buffer when 'bh' is + // set to 'wipe' if (bufref_valid(&bufref)) close_buffer(NULL, bufref.br_buf, DOBUF_WIPE, FALSE); - /* Restore window sizes. */ + // Restore window sizes. win_size_restore(&winsizes); - - unblock_autocmds(); } ga_clear(&winsizes); @@ -4303,7 +4293,7 @@ open_cmdwin(void) return cmdwin_result; } -#endif /* FEAT_CMDWIN */ +#endif // FEAT_CMDWIN /* * Used for commands that either take a simple command string argument, or: diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim index 26a50e010..f8d612565 100644 --- a/src/testdir/test_cmdline.vim +++ b/src/testdir/test_cmdline.vim @@ -604,6 +604,8 @@ func Check_cmdline(cmdtype) return '' endfunc +set cpo& + func Test_getcmdtype() call feedkeys(":MyCmd a\<C-R>=Check_cmdline(':')\<CR>\<Esc>", "xt") @@ -644,6 +646,37 @@ func Test_getcmdwintype() call assert_equal('', getcmdwintype()) endfunc +func Test_getcmdwin_autocmd() + let s:seq = [] + augroup CmdWin + au WinEnter * call add(s:seq, 'WinEnter ' .. win_getid()) + au WinLeave * call add(s:seq, 'WinLeave ' .. win_getid()) + au BufEnter * call add(s:seq, 'BufEnter ' .. bufnr()) + au BufLeave * call add(s:seq, 'BufLeave ' .. bufnr()) + au CmdWinEnter * call add(s:seq, 'CmdWinEnter ' .. win_getid()) + au CmdWinLeave * call add(s:seq, 'CmdWinLeave ' .. win_getid()) + + let org_winid = win_getid() + let org_bufnr = bufnr() + call feedkeys("q::let a = getcmdwintype()\<CR>:let s:cmd_winid = win_getid()\<CR>:let s:cmd_bufnr = bufnr()\<CR>:q\<CR>", 'x!') + call assert_equal(':', a) + call assert_equal([ + \ 'WinLeave ' .. org_winid, + \ 'WinEnter ' .. s:cmd_winid, + \ 'BufLeave ' .. org_bufnr, + \ 'BufEnter ' .. s:cmd_bufnr, + \ 'CmdWinEnter ' .. s:cmd_winid, + \ 'CmdWinLeave ' .. s:cmd_winid, + \ 'BufLeave ' .. s:cmd_bufnr, + \ 'WinLeave ' .. s:cmd_winid, + \ 'WinEnter ' .. org_winid, + \ 'BufEnter ' .. org_bufnr, + \ ], s:seq) + + au! + augroup END +endfunc + func Test_verbosefile() set verbosefile=Xlog echomsg 'foo' @@ -701,5 +734,3 @@ func Test_cmdline_overstrike() let &encoding = encoding_save endfunc - -set cpo& diff --git a/src/version.c b/src/version.c index 86aaec9e2..c6f60af27 100644 --- a/src/version.c +++ b/src/version.c @@ -758,6 +758,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2017, +/**/ 2016, /**/ 2015, |