more sophisticated handling of padding window focus

This commit is contained in:
2025-12-12 19:23:44 +01:00
parent 956cee2697
commit 60030df642
+21 -3
View File
@@ -217,7 +217,14 @@ vim.api.nvim_create_autocmd('BufEnter', {
do do
-- one shared statusline looks better for the split. -- one shared statusline looks better for the split.
vim.o.laststatus = 3 vim.o.laststatus = 3
local ID = '4f2de2e3-a1bf-481f-919c-7f68ec6511c9' local ID = '4f2de2e3-a1bf-481f-919c-7f68ec6511c9'
local function is_padding_window(win)
local ok, _ = pcall(vim.api.nvim_buf_get_var, vim.api.nvim_win_get_buf(win), ID)
return ok
end
local buf = _G[ID] local buf = _G[ID]
if buf == nil then if buf == nil then
buf = vim.api.nvim_create_buf(false, true) buf = vim.api.nvim_create_buf(false, true)
@@ -230,7 +237,19 @@ do
if #vim.api.nvim_list_wins() == 1 then if #vim.api.nvim_list_wins() == 1 then
vim.cmd"q" vim.cmd"q"
end end
vim.cmd"wincmd p" local windows = vim.api.nvim_list_wins()
local leftmost_win = nil
local min_col = math.huge
for _, win in ipairs(windows) do
local info = vim.fn.getwininfo(win)[1]
if info.wincol < min_col and not is_padding_window(win) then
min_col = info.wincol
leftmost_win = win
end
end
if leftmost_win ~= nil then
vim.api.nvim_set_current_win(leftmost_win)
end
end end
end end
}) })
@@ -241,8 +260,7 @@ do
local function get_padding_window() local function get_padding_window()
local windows = vim.api.nvim_list_wins() local windows = vim.api.nvim_list_wins()
for _, win in ipairs(windows) do for _, win in ipairs(windows) do
local ok, _ = pcall(vim.api.nvim_buf_get_var, vim.api.nvim_win_get_buf(win), ID) if is_padding_window(win) then
if ok then
return win return win
end end
end end