Merge pull request #14091 from euclidianAce/euclidianAce/nvim_win_hide

api: add vim.api.nvim_win_hide
This commit is contained in:
Björn Linse 2021-03-28 19:07:56 +02:00 committed by GitHub
commit 6d4a922e07
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 84 additions and 0 deletions

View File

@ -2518,6 +2518,21 @@ nvim_win_get_width({window}) *nvim_win_get_width()*
Return: ~
Width as a count of columns
nvim_win_hide({window}) *nvim_win_hide()*
Closes the window and hide the buffer it contains (like
|:hide| with a |window-ID|).
Like |:hide| the buffer becomes hidden unless another window
is editing it, or 'bufhidden' is `unload` , `delete` or `wipe`
as opposed to |:close| or |nvim_win_close|, which will close
the buffer.
Attributes: ~
not allowed when |textlock| is active
Parameters: ~
{window} Window handle, or 0 for current window
nvim_win_is_valid({window}) *nvim_win_is_valid()*
Checks if a window is valid

View File

@ -492,6 +492,35 @@ Dictionary nvim_win_get_config(Window window, Error *err)
return rv;
}
/// Closes the window and hide the buffer it contains (like |:hide| with a
/// |window-ID|).
///
/// Like |:hide| the buffer becomes hidden unless another window is editing it,
/// or 'bufhidden' is `unload`, `delete` or `wipe` as opposed to |:close| or
/// |nvim_win_close|, which will close the buffer.
///
/// @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

View File

@ -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)