diff options
author | Corey Williamson <euclidianAce@protonmail.com> | 2021-03-09 21:21:45 -0600 |
---|---|---|
committer | Corey Williamson <euclidianAce@protonmail.com> | 2021-03-09 22:51:56 -0600 |
commit | 3a342f9cc9f0ca67620fe0886cdc7a5e03e6fece (patch) | |
tree | 76e81f498971cd9c55dd34ce42d2abcc7408504c | |
parent | cc23c95bccda06c9bbcadd919f4fb2f2545f1151 (diff) | |
download | rneovim-3a342f9cc9f0ca67620fe0886cdc7a5e03e6fece.tar.gz rneovim-3a342f9cc9f0ca67620fe0886cdc7a5e03e6fece.tar.bz2 rneovim-3a342f9cc9f0ca67620fe0886cdc7a5e03e6fece.zip |
api: add vim.api.nvim_win_hide
-rw-r--r-- | src/nvim/api/window.c | 24 | ||||
-rw-r--r-- | test/functional/api/window_spec.lua | 40 |
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) |