bugfix: override bg colors in CodeDiff so dim-inactive works
Text had a visible black background in my colorscheme in certain CodeDiff buffers like the explorer or git log when dim-inactive (the window does not have current focus). This hack Claude came up with seems to resolve that issue until it can be fixed upstream.
This commit is contained in:
@@ -83,5 +83,44 @@ return {
|
|||||||
group = group,
|
group = group,
|
||||||
callback = sync_animations,
|
callback = sync_animations,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- The explorer and history panels tag their text (filenames, commit subjects,
|
||||||
|
-- padding) with the literal `Normal` group, which carries an opaque bg. Under
|
||||||
|
-- a colorscheme with dim_inactive that text keeps Normal's background while
|
||||||
|
-- the rest of the window dims to NormalNC, so every row looks highlighted.
|
||||||
|
-- Remapping the group to NormalNC while the panel is unfocused makes the text
|
||||||
|
-- dim along with the window, the way an ordinary buffer does.
|
||||||
|
local panel_ft = { ["codediff-explorer"] = true, ["codediff-history"] = true }
|
||||||
|
|
||||||
|
local function sync_panel_dim()
|
||||||
|
local current = vim.api.nvim_get_current_win()
|
||||||
|
for _, win in ipairs(vim.api.nvim_tabpage_list_wins(0)) do
|
||||||
|
local ok, buf = pcall(vim.api.nvim_win_get_buf, win)
|
||||||
|
if ok and panel_ft[vim.bo[buf].filetype] then
|
||||||
|
local want = win ~= current and "Normal:NormalNC" or ""
|
||||||
|
if vim.wo[win].winhighlight ~= want then
|
||||||
|
vim.wo[win].winhighlight = want
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Deferred: codediff hops windows with nvim_win_call to refresh panes, which
|
||||||
|
-- fires WinEnter with a window that is not the real focus. Scheduling lets
|
||||||
|
-- those transient switches unwind before we read the current window.
|
||||||
|
local function schedule_panel_dim()
|
||||||
|
vim.schedule(sync_panel_dim)
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd({ "WinEnter", "WinLeave", "BufWinEnter", "TabEnter" }, {
|
||||||
|
group = group,
|
||||||
|
callback = schedule_panel_dim,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd("User", {
|
||||||
|
group = group,
|
||||||
|
pattern = "CodeDiffOpen",
|
||||||
|
callback = schedule_panel_dim,
|
||||||
|
})
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user