mirror of
https://github.com/neovim/neovim.git
synced 2025-09-29 22:48:34 +00:00
vim-patch:9.1.0047: issues with temp curwin/buf while cmdwin is open
Problem: Things that temporarily change/restore curwin/buf (e.g:
win_execute, some autocmds) may break assumptions that
curwin/buf is the cmdwin when "cmdwin_type != 0", causing
issues.
Solution: Expose the cmdwin's real win/buf and check that instead. Also
try to ensure these variables are NULL if "cmdwin_type == 0",
allowing them to be used directly in most cases without
checking cmdwin_type. (Sean Dewar)
Reset and save `cmdwin_old_curwin` in a similar fashion.
Apply suitable changes for API functions and add Lua tests.
988f74311c
This commit is contained in:
@@ -2485,7 +2485,7 @@ bool can_close_in_cmdwin(win_T *win, Error *err)
|
||||
FUNC_ATTR_NONNULL_ALL
|
||||
{
|
||||
if (cmdwin_type != 0) {
|
||||
if (win == curwin) {
|
||||
if (win == cmdwin_win) {
|
||||
cmdwin_result = Ctrl_C;
|
||||
return false;
|
||||
} else if (win == cmdwin_old_curwin) {
|
||||
@@ -3030,6 +3030,9 @@ void win_free_all(void)
|
||||
{
|
||||
// avoid an error for switching tabpage with the cmdline window open
|
||||
cmdwin_type = 0;
|
||||
cmdwin_buf = NULL;
|
||||
cmdwin_win = NULL;
|
||||
cmdwin_old_curwin = NULL;
|
||||
|
||||
while (first_tabpage->tp_next != NULL) {
|
||||
tabpage_close(true);
|
||||
|
Reference in New Issue
Block a user