aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorey Williamson <euclidianAce@protonmail.com>2021-03-09 21:21:45 -0600
committerCorey Williamson <euclidianAce@protonmail.com>2021-03-09 22:51:56 -0600
commit3a342f9cc9f0ca67620fe0886cdc7a5e03e6fece (patch)
tree76e81f498971cd9c55dd34ce42d2abcc7408504c
parentcc23c95bccda06c9bbcadd919f4fb2f2545f1151 (diff)
downloadrneovim-3a342f9cc9f0ca67620fe0886cdc7a5e03e6fece.tar.gz
rneovim-3a342f9cc9f0ca67620fe0886cdc7a5e03e6fece.tar.bz2
rneovim-3a342f9cc9f0ca67620fe0886cdc7a5e03e6fece.zip
api: add vim.api.nvim_win_hide
-rw-r--r--src/nvim/api/window.c24
-rw-r--r--test/functional/api/window_spec.lua40
2 files changed, 64 insertions, 0 deletions
diff --git a/src/nvim/api/window.c b/src/nvim/api/window.c
index f4af1632ec..f10b4b900b 100644
--- a/src/nvim/api/window.c
+++ b/src/nvim/api/window.c
@@ -492,6 +492,30 @@ Dictionary nvim_win_get_config(Window window, Error *err)
return rv;
}
+/// Hides the window (like |:hide| with a |window-ID|).
+///
+/// @param window Window handle, or 0 for current window
+/// @param[out] err Error details, if any
+void nvim_win_hide(Window window, Error *err)
+ FUNC_API_SINCE(7)
+ FUNC_API_CHECK_TEXTLOCK
+{
+ win_T *win = find_window_by_handle(window, err);
+ if (!win) {
+ return;
+ }
+
+ tabpage_T *tabpage = win_find_tabpage(win);
+ TryState tstate;
+ try_enter(&tstate);
+ if (tabpage == curtab) {
+ win_close(win, false);
+ } else {
+ win_close_othertab(win, false, tabpage);
+ }
+ vim_ignored = try_leave(&tstate, err);
+}
+
/// Closes the window (like |:close| with a |window-ID|).
///
/// @param window Window handle, or 0 for current window
diff --git a/test/functional/api/window_spec.lua b/test/functional/api/window_spec.lua
index 7471f50dbd..ceeb84cec9 100644
--- a/test/functional/api/window_spec.lua
+++ b/test/functional/api/window_spec.lua
@@ -347,4 +347,44 @@ describe('API/win', function()
eq('', funcs.getcmdwintype())
end)
end)
+
+ describe('hide', function()
+ it('can hide current window', function()
+ local oldwin = meths.get_current_win()
+ command('split')
+ local newwin = meths.get_current_win()
+ meths.win_hide(newwin)
+ eq({oldwin}, meths.list_wins())
+ end)
+ it('can hide noncurrent window', function()
+ local oldwin = meths.get_current_win()
+ command('split')
+ local newwin = meths.get_current_win()
+ meths.win_hide(oldwin)
+ eq({newwin}, meths.list_wins())
+ end)
+ it('does not close the buffer', function()
+ local oldwin = meths.get_current_win()
+ local oldbuf = meths.get_current_buf()
+ local buf = meths.create_buf(true, false)
+ local newwin = meths.open_win(buf, true, {
+ relative='win', row=3, col=3, width=12, height=3
+ })
+ meths.win_hide(newwin)
+ eq({oldwin}, meths.list_wins())
+ eq({oldbuf, buf}, meths.list_bufs())
+ end)
+ it('deletes the buffer when bufhidden=wipe', function()
+ local oldwin = meths.get_current_win()
+ local oldbuf = meths.get_current_buf()
+ local buf = meths.create_buf(true, false)
+ local newwin = meths.open_win(buf, true, {
+ relative='win', row=3, col=3, width=12, height=3
+ })
+ meths.buf_set_option(buf, 'bufhidden', 'wipe')
+ meths.win_hide(newwin)
+ eq({oldwin}, meths.list_wins())
+ eq({oldbuf}, meths.list_bufs())
+ end)
+ end)
end)