aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/api/window.c17
-rw-r--r--test/functional/api/window_spec.lua3
2 files changed, 13 insertions, 7 deletions
diff --git a/src/nvim/api/window.c b/src/nvim/api/window.c
index 0103e17176..e279edebde 100644
--- a/src/nvim/api/window.c
+++ b/src/nvim/api/window.c
@@ -541,14 +541,19 @@ void nvim_win_close(Window window, Boolean force, Error *err)
if (!win) {
return;
}
- tabpage_T *tabpage = win_find_tabpage(win);
+ if (cmdwin_type != 0) {
+ if (win == curwin) {
+ cmdwin_result = Ctrl_C;
+ } else {
+ api_set_error(err, kErrorTypeException, "%s", _(e_cmdwin));
+ }
+ return;
+ }
+
+ tabpage_T *tabpage = win_find_tabpage(win);
TryState tstate;
try_enter(&tstate);
- if (cmdwin_type != 0 && win == curwin) {
- cmdwin_result = Ctrl_C;
- } else {
- ex_win_close(force, win, tabpage == curtab ? NULL : tabpage);
- }
+ ex_win_close(force, win, tabpage == curtab ? NULL : tabpage);
vim_ignored = try_leave(&tstate, err);
}
diff --git a/test/functional/api/window_spec.lua b/test/functional/api/window_spec.lua
index c3a9b987f2..9af1bdb93b 100644
--- a/test/functional/api/window_spec.lua
+++ b/test/functional/api/window_spec.lua
@@ -326,12 +326,13 @@ describe('API/win', function()
it('in cmdline-window #9767', function()
command('split')
eq(2, #meths.list_wins())
+ local oldwin = meths.get_current_win()
-- Open cmdline-window.
feed('q:')
eq(3, #meths.list_wins())
eq(':', funcs.getcmdwintype())
-- 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.
meths.win_close(0,true)
eq(2, #meths.list_wins())