Compare commits

..

8 commits

Author SHA1 Message Date
93ec56e616
ci: format 2026-03-05 19:49:59 -05:00
b359ea1595
doc: clarify colorscheme 2026-03-05 19:48:49 -05:00
4848e8d5fe
docs: add 'for example' to colorscheme note 2026-03-05 19:43:45 -05:00
8135179dea
docs: fix tense on colorscheme load-order note 2026-03-05 19:43:32 -05:00
b421b480c2
docs: tighten colorscheme load-order note 2026-03-05 19:43:08 -05:00
3e659eb6ab
docs: move colorscheme load-order note to setup section 2026-03-05 19:42:54 -05:00
d1f7acde8e
fix(highlight): retry highlight computation when Normal has no background
Problem: if `Normal.bg` is nil when `compute_highlight_groups` first runs
(colorscheme not yet loaded), the neutral fallbacks are baked in and never
corrected — the `ColorScheme` autocmd only fires for explicit `:colorscheme`
calls, which may come too late for some plugin manager configurations.

Solution: when `Normal.bg` is absent, schedule a single deferred retry via
`vim.schedule` that recomputes all highlight groups and invalidates attached
buffer caches once the event loop settles. Also document the load-order
requirement and the retry behaviour in the highlight groups section of the
vimdoc.
2026-03-05 19:40:48 -05:00
904f141366
fix(highlight): replace hardcoded theme-specific color fallbacks
Problem: fallback hex values for `Normal.bg`, `DiffAdd.bg`, etc. in
`compute_highlight_groups` were hardcoded to catppuccin mocha colors
(`0x1e1e2e`, `0x2e4a3a`, `0x4a2e3a`, etc.), producing visibly wrong
highlight groups for users on any other colorscheme when `Normal` has
no background (transparent terminals or early startup).

Solution: replace all hardcoded fallbacks with `vim.o.background`-aware
neutral values — dark mode gets near-black/grey, light mode gets
near-white/dark-grey — so the fallback path is theme-agnostic.
2026-03-05 19:37:33 -05:00
2 changed files with 27 additions and 6 deletions

View file

@ -65,6 +65,9 @@ Install with lazy.nvim: >lua
The plugin works automatically with no configuration required. For
customization, see |diffs-config|.
NOTE: Load your colorscheme before `diffs.nvim`. For example, with lazy.nvim,
set `priority = 1000` and `lazy = false` on your colorscheme plugin.
==============================================================================
CONFIGURATION *diffs-config*
@ -758,6 +761,7 @@ character-level groups blend at 60% for more contrast. Line-number groups
combine both: background from the line-level blend, foreground from the
character-level blend.
Fugitive unified diff highlights: ~
*DiffsAdd*
DiffsAdd Background for `+` lines. Derived by blending

View file

@ -162,6 +162,7 @@ local default_config = {
local config = vim.deepcopy(default_config)
local initialized = false
local hl_retry_pending = false
---@diagnostic disable-next-line: missing-fields
local fast_hl_opts = {} ---@type diffs.HunkOpts
@ -470,11 +471,23 @@ local function compute_highlight_groups()
local diff_added = resolve_hl('diffAdded')
local diff_removed = resolve_hl('diffRemoved')
local bg = normal.bg or 0x1e1e2e
local add_bg = diff_add.bg or 0x2e4a3a
local del_bg = diff_delete.bg or 0x4a2e3a
local add_fg = diff_added.fg or diff_add.fg or 0x80c080
local del_fg = diff_removed.fg or diff_delete.fg or 0xc08080
local dark = vim.o.background ~= 'light'
local bg = normal.bg or (dark and 0x1a1a1a or 0xf0f0f0)
local add_bg = diff_add.bg or (dark and 0x1a3a1a or 0xd0ffd0)
local del_bg = diff_delete.bg or (dark and 0x3a1a1a or 0xffd0d0)
local add_fg = diff_added.fg or diff_add.fg or (dark and 0x80d080 or 0x206020)
local del_fg = diff_removed.fg or diff_delete.fg or (dark and 0xd08080 or 0x802020)
if not normal.bg and not hl_retry_pending then
hl_retry_pending = true
vim.schedule(function()
hl_retry_pending = false
compute_highlight_groups()
for bufnr, _ in pairs(attached_buffers) do
invalidate_cache(bufnr)
end
end)
end
local blended_add = blend_color(add_bg, bg, 0.4)
local blended_del = blend_color(del_bg, bg, 0.4)
@ -483,7 +496,11 @@ local function compute_highlight_groups()
local blended_add_text = blend_color(add_fg, bg, alpha)
local blended_del_text = blend_color(del_fg, bg, alpha)
vim.api.nvim_set_hl(0, 'DiffsClear', { default = true, fg = normal.fg or 0xc0c0c0, bg = bg })
vim.api.nvim_set_hl(
0,
'DiffsClear',
{ default = true, fg = normal.fg or (dark and 0xcccccc or 0x333333), bg = bg }
)
vim.api.nvim_set_hl(0, 'DiffsAdd', { default = true, bg = blended_add })
vim.api.nvim_set_hl(0, 'DiffsDelete', { default = true, bg = blended_del })
vim.api.nvim_set_hl(0, 'DiffsAddNr', { default = true, fg = blended_add_text, bg = blended_add })