diff options
| author | luukvbaal <luukvbaal@gmail.com> | 2026-04-20 02:36:55 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-04-19 20:36:55 -0400 |
| commit | fe986e5dd094b2f7e1d28e64e52ffbc5f7292191 (patch) | |
| tree | eae04471b5d12c3e419b4961c8f5405706ffb47b /test | |
| parent | 5f6abd34f5c12534df0d79ee3507d40106ad505d (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')
| -rw-r--r-- | test/functional/api/window_spec.lua | 24 | ||||
| -rw-r--r-- | test/functional/ui/messages2_spec.lua | 2 |
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) |
