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>
This commit is contained in:
luukvbaal
2026-04-20 02:36:55 +02:00
committed by GitHub
parent 5f6abd34f5
commit fe986e5dd0
14 changed files with 88 additions and 9 deletions

View File

@@ -130,6 +130,8 @@ function M.check_targets()
hl = 'Normal:MsgArea'
elseif type == 'msg' then
hl = search_hide
elseif type == 'cmd' then
api.nvim_set_option_value('winpinned', true, { scope = 'local' })
end
api.nvim_set_option_value('winhighlight', hl, { scope = 'local' })
end)

View File

@@ -8324,6 +8324,16 @@ vim.o.wmw = vim.o.winminwidth
vim.go.winminwidth = vim.o.winminwidth
vim.go.wmw = vim.go.winminwidth
--- If enabled, the window is pinned and will not be closed by `:only`
--- and `:fclose`. Only commands specifically targeting the window can
--- close it.
---
--- @type boolean
vim.o.winpinned = false
vim.o.wp = vim.o.winpinned
vim.wo.winpinned = vim.o.winpinned
vim.wo.wp = vim.wo.winpinned
--- Minimal number of columns for the current window. This is not a hard
--- minimum, Vim will use fewer columns if there is not enough room. If
--- the current window is smaller, its size is increased, at the cost of