Merge pull request #10738 from bfredl/cmdwinclose

api/window: disallow closing non-current window in cmdwin state
This commit is contained in:
Björn Linse 2019-08-10 21:21:13 +02:00 committed by GitHub
commit c190415dc2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 7 deletions

View File

@ -541,14 +541,19 @@ void nvim_win_close(Window window, Boolean force, Error *err)
if (!win) { if (!win) {
return; return;
} }
tabpage_T *tabpage = win_find_tabpage(win);
TryState tstate; if (cmdwin_type != 0) {
try_enter(&tstate); if (win == curwin) {
if (cmdwin_type != 0 && win == curwin) {
cmdwin_result = Ctrl_C; cmdwin_result = Ctrl_C;
} else { } else {
ex_win_close(force, win, tabpage == curtab ? NULL : tabpage); api_set_error(err, kErrorTypeException, "%s", _(e_cmdwin));
} }
return;
}
tabpage_T *tabpage = win_find_tabpage(win);
TryState tstate;
try_enter(&tstate);
ex_win_close(force, win, tabpage == curtab ? NULL : tabpage);
vim_ignored = try_leave(&tstate, err); vim_ignored = try_leave(&tstate, err);
} }

View File

@ -326,12 +326,13 @@ describe('API/win', function()
it('in cmdline-window #9767', function() it('in cmdline-window #9767', function()
command('split') command('split')
eq(2, #meths.list_wins()) eq(2, #meths.list_wins())
local oldwin = meths.get_current_win()
-- Open cmdline-window. -- Open cmdline-window.
feed('q:') feed('q:')
eq(3, #meths.list_wins()) eq(3, #meths.list_wins())
eq(':', funcs.getcmdwintype()) eq(':', funcs.getcmdwintype())
-- Vim: not allowed to close other windows from cmdline-window. -- Vim: not allowed to close other windows from cmdline-window.
expect_err('Invalid window id$', meths.win_close, 1, true) expect_err('E11: Invalid in command%-line window; <CR> executes, CTRL%-C quits$', meths.win_close, oldwin, true)
-- Close cmdline-window. -- Close cmdline-window.
meths.win_close(0,true) meths.win_close(0,true)
eq(2, #meths.list_wins()) eq(2, #meths.list_wins())