diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2019-08-10 17:27:29 +0200 |
---|---|---|
committer | Björn Linse <bjorn.linse@gmail.com> | 2019-08-10 17:41:31 +0200 |
commit | 67664c74f8ab016e9c7aa3ede96dc66fcb4c9684 (patch) | |
tree | f1ec05b81d135a0ef5217508977159f4f51a802b | |
parent | 5f243fc68ad0ab9c3bdf484c8f2753ec9414bf37 (diff) | |
download | rneovim-67664c74f8ab016e9c7aa3ede96dc66fcb4c9684.tar.gz rneovim-67664c74f8ab016e9c7aa3ede96dc66fcb4c9684.tar.bz2 rneovim-67664c74f8ab016e9c7aa3ede96dc66fcb4c9684.zip |
api/window: disallow closing non-current window in cmdwin state
-rw-r--r-- | src/nvim/api/window.c | 17 | ||||
-rw-r--r-- | test/functional/api/window_spec.lua | 3 |
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()) |