vim-patch:8.1.2017: cannot execute commands after closing cmdline window #11479

Problem:    Cannot execute commands after closing the cmdline window.
Solution:   Also trigger BufEnter and WinEnter. (closes vim/vim#4762)
96e38a86a7

Fixes https://github.com/neovim/neovim/issues/11279.
This commit is contained in:
Daniel Hahler
2019-11-29 18:51:25 +01:00
committed by Justin M. Keyes
parent e138c4c874
commit f33371c03f
4 changed files with 54 additions and 36 deletions

View File

@@ -6078,12 +6078,9 @@ static int 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(true);
@@ -6092,10 +6089,9 @@ static int open_cmdwin(void)
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();
@@ -6110,13 +6106,11 @@ static int open_cmdwin(void)
curbuf->b_p_ma = true;
curwin->w_p_fen = false;
// 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. */
need_wait_return = FALSE;
// Showing the prompt may have set need_wait_return, reset it.
need_wait_return = false;
const int histtype = hist_char2type(cmdwin_type);
if (histtype == HIST_CMD || histtype == HIST_DEBUG) {
@@ -6128,11 +6122,11 @@ static int 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 (hislen > 0 && histtype != HIST_INVALID) {
i = hisidx[histtype];
@@ -6173,9 +6167,10 @@ static int open_cmdwin(void)
// Trigger CmdwinEnter autocommands.
typestr[0] = (char_u)cmdwin_type;
typestr[1] = NUL;
apply_autocmds(EVENT_CMDWINENTER, typestr, typestr, FALSE, curbuf);
if (restart_edit != 0) /* autocmd with ":startinsert" */
apply_autocmds(EVENT_CMDWINENTER, typestr, typestr, false, curbuf);
if (restart_edit != 0) { // autocmd with ":startinsert"
stuffcharReadbuff(K_NOP);
}
i = RedrawingDisabled;
RedrawingDisabled = 0;
@@ -6192,10 +6187,10 @@ static int open_cmdwin(void)
const bool save_KeyTyped = KeyTyped;
/* Trigger CmdwinLeave autocommands. */
apply_autocmds(EVENT_CMDWINLEAVE, typestr, typestr, FALSE, curbuf);
// Trigger CmdwinLeave autocommands.
apply_autocmds(EVENT_CMDWINLEAVE, typestr, typestr, false, curbuf);
/* Restore KeyTyped in case it is modified by autocommands */
// Restore KeyTyped in case it is modified by autocommands
KeyTyped = save_KeyTyped;
// Restore the command line info.
@@ -6254,9 +6249,7 @@ static int open_cmdwin(void)
}
}
/* Don't execute autocommands while deleting the window. */
block_autocmds();
// Avoid command-line window first character being concealed
// Avoid command-line window first character being concealed.
curwin->w_p_cole = 0;
wp = curwin;
set_bufref(&bufref, curbuf);
@@ -6269,10 +6262,8 @@ static int open_cmdwin(void)
close_buffer(NULL, bufref.br_buf, DOBUF_WIPE, false);
}
/* Restore window sizes. */
// Restore window sizes.
win_size_restore(&winsizes);
unblock_autocmds();
}
ga_clear(&winsizes);