aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorglepnir <glephunter@gmail.com>2024-09-28 06:02:14 +0800
committerGitHub <noreply@github.com>2024-09-28 06:02:14 +0800
commit7b71fdbc1e9fcb71e642e67e0ac9a2711dd67df0 (patch)
tree911bafafb5298e43f30758b515e21ccde466af0e
parent09d76afe84dd5b895e102dcd8df8ce6271bebfef (diff)
downloadrneovim-7b71fdbc1e9fcb71e642e67e0ac9a2711dd67df0.tar.gz
rneovim-7b71fdbc1e9fcb71e642e67e0ac9a2711dd67df0.tar.bz2
rneovim-7b71fdbc1e9fcb71e642e67e0ac9a2711dd67df0.zip
fix(window): respect hide flag of float windows when switching (#30507)
-rw-r--r--src/nvim/ex_cmds2.c2
-rw-r--r--src/nvim/window.c6
-rw-r--r--test/functional/ui/float_spec.lua17
3 files changed, 21 insertions, 4 deletions
diff --git a/src/nvim/ex_cmds2.c b/src/nvim/ex_cmds2.c
index 210539d6a4..aff9dce7c1 100644
--- a/src/nvim/ex_cmds2.c
+++ b/src/nvim/ex_cmds2.c
@@ -590,7 +590,7 @@ void ex_listdo(exarg_T *eap)
break;
}
assert(wp);
- execute = !wp->w_floating || wp->w_config.focusable;
+ execute = !wp->w_floating || (!wp->w_config.hide && wp->w_config.focusable);
if (execute) {
win_goto(wp);
if (curwin != wp) {
diff --git a/src/nvim/window.c b/src/nvim/window.c
index f61485ccb3..f7d5ee92cd 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -359,13 +359,13 @@ newwindow:
wp = lastwin; // wrap around
}
while (wp != NULL && wp->w_floating
- && !wp->w_config.focusable) {
+ && (wp->w_config.hide || !wp->w_config.focusable)) {
wp = wp->w_prev;
}
} else { // go to next window
wp = curwin->w_next;
while (wp != NULL && wp->w_floating
- && !wp->w_config.focusable) {
+ && (wp->w_config.hide || !wp->w_config.focusable)) {
wp = wp->w_next;
}
if (wp == NULL) {
@@ -2851,7 +2851,7 @@ int win_close(win_T *win, bool free_buf, bool force)
break;
}
if (!wp->w_p_pvw && !bt_quickfix(wp->w_buffer)
- && !(wp->w_floating && !wp->w_config.focusable)) {
+ && !(wp->w_floating && (wp->w_config.hide || !wp->w_config.focusable))) {
curwin = wp;
break;
}
diff --git a/test/functional/ui/float_spec.lua b/test/functional/ui/float_spec.lua
index 409cf5aac4..52b46d0ecb 100644
--- a/test/functional/ui/float_spec.lua
+++ b/test/functional/ui/float_spec.lua
@@ -9068,6 +9068,7 @@ describe('float window', function()
end)
it('float window with hide option', function()
+ local cwin = api.nvim_get_current_win()
local buf = api.nvim_create_buf(false,false)
local win = api.nvim_open_win(buf, false, {relative='editor', width=10, height=2, row=2, col=5, hide = true})
local expected_pos = {
@@ -9147,6 +9148,22 @@ describe('float window', function()
|
]])
end
+ -- check window jump with hide
+ feed('<C-W><C-W>')
+ -- should keep on current window
+ eq(cwin, api.nvim_get_current_win())
+ api.nvim_win_set_config(win, {hide=false})
+ api.nvim_set_current_win(win)
+ local win3 = api.nvim_open_win(buf, true, {relative='editor', width=4, height=4, row=2, col=5, hide = false})
+ api.nvim_win_set_config(win, {hide=true})
+ feed('<C-W>w')
+ -- should goto the first window with prev
+ eq(cwin, api.nvim_get_current_win())
+ -- windo
+ command('windo set winheight=6')
+ eq(win3, api.nvim_get_current_win())
+ eq(6, api.nvim_win_get_height(win3))
+ eq(2, api.nvim_win_get_height(win))
end)
it(':fclose command #9663', function()