diff options
author | R. Simon <rasimon22@gmail.com> | 2019-08-10 06:41:35 -0500 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2019-08-10 13:41:35 +0200 |
commit | 5f243fc68ad0ab9c3bdf484c8f2753ec9414bf37 (patch) | |
tree | 73911f0c12875a5057944b2ff562399ee7c1f13d | |
parent | 278c5d452c2cbc436a9cc317407ae6021a226c3a (diff) | |
download | rneovim-5f243fc68ad0ab9c3bdf484c8f2753ec9414bf37.tar.gz rneovim-5f243fc68ad0ab9c3bdf484c8f2753ec9414bf37.tar.bz2 rneovim-5f243fc68ad0ab9c3bdf484c8f2753ec9414bf37.zip |
API: nvim_win_close: Fix closing cmdline-window #10087
-rw-r--r-- | src/nvim/api/window.c | 13 | ||||
-rw-r--r-- | test/functional/api/window_spec.lua | 15 |
2 files changed, 23 insertions, 5 deletions
diff --git a/src/nvim/api/window.c b/src/nvim/api/window.c index 4922dd7efc..0103e17176 100644 --- a/src/nvim/api/window.c +++ b/src/nvim/api/window.c @@ -6,6 +6,8 @@ #include <stdlib.h> #include <limits.h> +#include "nvim/ascii.h" +#include "nvim/globals.h" #include "nvim/api/window.h" #include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" @@ -18,7 +20,6 @@ #include "nvim/screen.h" #include "nvim/move.h" - /// Gets the current buffer in a window /// /// @param window Window handle @@ -526,9 +527,7 @@ Dictionary nvim_win_get_config(Window window, Error *err) return rv; } -/// Close a window. -/// -/// This is equivalent to |:close| with count except that it takes a window id. +/// Closes the window (like |:close| with a |window-ID|). /// /// @param window Window handle /// @param force Behave like `:close!` The last window of a buffer with @@ -546,6 +545,10 @@ void nvim_win_close(Window window, Boolean force, Error *err) TryState tstate; try_enter(&tstate); - ex_win_close(force, win, tabpage == curtab ? NULL : tabpage); + if (cmdwin_type != 0 && win == curwin) { + cmdwin_result = Ctrl_C; + } else { + 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 4ff299cd18..c3a9b987f2 100644 --- a/test/functional/api/window_spec.lua +++ b/test/functional/api/window_spec.lua @@ -322,5 +322,20 @@ describe('API/win', function() meths.win_close(oldwin,true) eq({newwin}, meths.list_wins()) end) + + it('in cmdline-window #9767', function() + command('split') + eq(2, #meths.list_wins()) + -- 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) + -- Close cmdline-window. + meths.win_close(0,true) + eq(2, #meths.list_wins()) + eq('', funcs.getcmdwintype()) + end) end) end) |