summaryrefslogtreecommitdiffstatshomepage
path: root/test/functional
diff options
context:
space:
mode:
authorluukvbaal <luukvbaal@gmail.com>2026-04-20 02:36:55 +0200
committerGitHub <noreply@github.com>2026-04-19 20:36:55 -0400
commitfe986e5dd094b2f7e1d28e64e52ffbc5f7292191 (patch)
treeeae04471b5d12c3e419b4961c8f5405706ffb47b /test/functional
parent5f6abd34f5c12534df0d79ee3507d40106ad505d (diff)
feat(options): add 'winpinned' to pin a window #39157
Problem: - Unable to "pin" a window to prevent closing without specifically being targeted. - :fclose closes hidden windows (even before visible windows). Solution: - Add 'winpinned' window-local option. When set, window is skipped by :fclose and :only. Pin the ui2 cmdline window (which should always be visible), so that it is not closed by :only/fclose. - Skip over hidden (and pinned) windows with :fclose. Co-authored-by: glepnir <glephunter@gmail.com>
Diffstat (limited to 'test/functional')
-rw-r--r--test/functional/api/window_spec.lua24
-rw-r--r--test/functional/ui/messages2_spec.lua2
2 files changed, 25 insertions, 1 deletions
diff --git a/test/functional/api/window_spec.lua b/test/functional/api/window_spec.lua
index daf0ae8ce1..650a4bf5e3 100644
--- a/test/functional/api/window_spec.lua
+++ b/test/functional/api/window_spec.lua
@@ -3861,4 +3861,28 @@ describe('API/win', function()
eq(float_win, api.nvim_get_current_win())
end)
end)
+
+ it(':fclose and :only skip hidden and pinned windows #36123', function()
+ local cfg = { relative = 'editor', row = 0, col = 0, width = 1, height = 1 }
+ local win1 = api.nvim_open_win(0, false, cfg)
+ command('fclose')
+ eq(false, api.nvim_win_is_valid(win1))
+ cfg.hide = true
+ win1 = api.nvim_open_win(0, false, cfg)
+ cfg.hide, cfg.focusable = false, false
+ local win2 = api.nvim_open_win(0, false, cfg)
+ command('fclose')
+ eq(true, api.nvim_win_is_valid(win1))
+ eq(false, api.nvim_win_is_valid(win2))
+ api.nvim_win_set_config(win1, { hide = false })
+ api.nvim_set_option_value('winpinned', true, { win = win1, scope = 'local' })
+ win2 = api.nvim_open_win(0, false, { split = 'right' })
+ api.nvim_set_option_value('winpinned', true, { win = win2, scope = 'local' })
+ command('only')
+ eq(true, api.nvim_win_is_valid(win1))
+ eq(true, api.nvim_win_is_valid(win2))
+ local tab2 = api.nvim_open_tabpage(0, false, {})
+ command('tabclose')
+ eq(tab2, api.nvim_get_current_tabpage())
+ end)
end)
diff --git a/test/functional/ui/messages2_spec.lua b/test/functional/ui/messages2_spec.lua
index c3cf060bc9..f030ca8692 100644
--- a/test/functional/ui/messages2_spec.lua
+++ b/test/functional/ui/messages2_spec.lua
@@ -432,7 +432,7 @@ describe('messages2', function()
screen:expect([[
^ |
{1:~ }|*12
- |
+ foo [+1] |
]])
end)