Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,5 +128,5 @@ See the documentation for more information.
- [@phanen](https://github.com/phanen) - diff header highlighting, unknown
filetype fix, shebang/modeline detection, treesitter injection support,
decoration provider highlighting architecture, gitsigns blame popup
highlighting
highlighting, intra-line bg visibility fix
- [@tris203](https://github.com/tris203) - support for transparent backgrounds
11 changes: 5 additions & 6 deletions doc/diffs.nvim.txt
Original file line number Diff line number Diff line change
Expand Up @@ -956,15 +956,14 @@ Fugitive unified diff highlights: ~

*DiffsAddText*
DiffsAddText Character-level background for changed characters
within `+` lines. Derived by blending `diffAdded`
foreground with `Normal` background at 60% alpha.
Only sets `bg`, so treesitter foreground colors show
through.
within `+` lines. Uses the raw `DiffAdd` background
color. Only sets `bg`, so treesitter foreground
colors show through.

*DiffsDeleteText*
DiffsDeleteText Character-level background for changed characters
within `-` lines. Derived by blending `diffRemoved`
foreground with `Normal` background at 60% alpha.
within `-` lines. Uses the raw `DiffDelete`
background color.

Conflict highlights: ~
*DiffsConflictOurs*
Expand Down
13 changes: 11 additions & 2 deletions lua/diffs/highlight.lua
Original file line number Diff line number Diff line change
Expand Up @@ -636,11 +636,20 @@ function M.highlight_hunk(bufnr, ns, hunk, opts)
end

if opts.highlights.background and is_diff_line then
local bg_end_col = raw_len or (line_len + qw)
pcall(vim.api.nvim_buf_set_extmark, bufnr, ns, buf_line, 0, {
line_hl_group = line_hl,
number_hl_group = opts.highlights.gutter and number_hl or nil,
end_row = buf_line,
end_col = bg_end_col,
hl_group = line_hl,
hl_eol = true,
priority = p.line_bg,
})
if opts.highlights.gutter then
pcall(vim.api.nvim_buf_set_extmark, bufnr, ns, buf_line, 0, {
number_hl_group = number_hl,
priority = p.line_bg,
})
end
end

if is_marker and line_len > pw then
Expand Down
5 changes: 2 additions & 3 deletions lua/diffs/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -543,11 +543,10 @@ local function compute_highlight_groups(is_default)
local normal_fg = normal.fg or (dark and 0xcccccc or 0x333333)

local alpha = config.highlights.blend_alpha or 0.6
local text_alpha = math.min(alpha + 0.3, 1.0)
local blended_add = blend_color(add_bg, bg, alpha)
local blended_del = blend_color(del_bg, bg, alpha)
local blended_add_text = blend_color(add_bg, bg, text_alpha)
local blended_del_text = blend_color(del_bg, bg, text_alpha)
local blended_add_text = add_bg
local blended_del_text = del_bg

local clear_hl = { default = dflt, fg = normal_fg }
if not transparent then
Expand Down
2 changes: 1 addition & 1 deletion spec/email_quote_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -465,7 +465,7 @@ describe('email-quoted diffs', function()
local line_bg_count = 0
for _, mark in ipairs(extmarks) do
local d = mark[4]
if d and d.line_hl_group == 'DiffsAdd' then
if d and d.hl_group == 'DiffsAdd' then
line_bg_count = line_bg_count + 1
end
end
Expand Down
45 changes: 25 additions & 20 deletions spec/highlight_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ describe('highlight', function()
local extmarks = get_extmarks(bufnr)
local has_diff_add = false
for _, mark in ipairs(extmarks) do
if mark[4] and mark[4].line_hl_group == 'DiffsAdd' then
if mark[4] and mark[4].hl_group == 'DiffsAdd' then
has_diff_add = true
break
end
Expand Down Expand Up @@ -320,7 +320,7 @@ describe('highlight', function()
local extmarks = get_extmarks(bufnr)
local has_diff_delete = false
for _, mark in ipairs(extmarks) do
if mark[4] and mark[4].line_hl_group == 'DiffsDelete' then
if mark[4] and mark[4].hl_group == 'DiffsDelete' then
has_diff_delete = true
break
end
Expand Down Expand Up @@ -362,7 +362,7 @@ describe('highlight', function()
delete_buffer(bufnr)
end)

it('line bg uses line_hl_group not hl_group with end_row', function()
it('line bg uses hl_group with hl_eol not line_hl_group', function()
local bufnr = create_buffer({
'@@ -1,1 +1,2 @@',
' local x = 1',
Expand All @@ -384,11 +384,16 @@ describe('highlight', function()
)

local extmarks = get_extmarks(bufnr)
local found = false
for _, mark in ipairs(extmarks) do
local d = mark[4]
assert.is_not_equal('DiffsAdd', d and d.hl_group)
assert.is_not_equal('DiffsDelete', d and d.hl_group)
if d and d.hl_group == 'DiffsAdd' then
assert.is_true(d.hl_eol)
assert.is_nil(d.line_hl_group)
found = true
end
end
assert.is_true(found)
delete_buffer(bufnr)
end)

Expand Down Expand Up @@ -427,7 +432,7 @@ describe('highlight', function()
)
local has_line_bg = false
for _, mark in ipairs(marks) do
if mark[4] and mark[4].line_hl_group == 'DiffsAdd' then
if mark[4] and mark[4].hl_group == 'DiffsAdd' then
has_line_bg = true
end
end
Expand Down Expand Up @@ -502,7 +507,7 @@ describe('highlight', function()
local extmarks = get_extmarks(bufnr)
local has_diff_add = false
for _, mark in ipairs(extmarks) do
if mark[4] and mark[4].line_hl_group == 'DiffsAdd' then
if mark[4] and mark[4].hl_group == 'DiffsAdd' then
has_diff_add = true
break
end
Expand Down Expand Up @@ -693,7 +698,7 @@ describe('highlight', function()
local extmarks = get_extmarks(bufnr)
local has_diff_add = false
for _, mark in ipairs(extmarks) do
if mark[4] and mark[4].line_hl_group == 'DiffsAdd' then
if mark[4] and mark[4].hl_group == 'DiffsAdd' then
has_diff_add = true
break
end
Expand Down Expand Up @@ -778,7 +783,7 @@ describe('highlight', function()
local found = false
for _, mark in ipairs(extmarks) do
local d = mark[4]
if d and (d.line_hl_group == 'DiffsAdd' or d.line_hl_group == 'DiffsDelete') then
if d and (d.hl_group == 'DiffsAdd' or d.hl_group == 'DiffsDelete') then
found = true
end
end
Expand Down Expand Up @@ -934,7 +939,7 @@ describe('highlight', function()
if d then
if d.hl_group == 'DiffsClear' then
table.insert(priorities.clear, d.priority)
elseif d.line_hl_group == 'DiffsAdd' or d.line_hl_group == 'DiffsDelete' then
elseif d.hl_group == 'DiffsAdd' or d.hl_group == 'DiffsDelete' then
table.insert(priorities.line_bg, d.priority)
elseif d.hl_group == 'DiffsAddText' or d.hl_group == 'DiffsDeleteText' then
table.insert(priorities.char_bg, d.priority)
Expand Down Expand Up @@ -1035,8 +1040,8 @@ describe('highlight', function()
local line_bgs = {}
for _, mark in ipairs(extmarks) do
local d = mark[4]
if d and (d.line_hl_group == 'DiffsAdd' or d.line_hl_group == 'DiffsDelete') then
line_bgs[mark[2]] = d.line_hl_group
if d and (d.hl_group == 'DiffsAdd' or d.hl_group == 'DiffsDelete') then
line_bgs[mark[2]] = d.hl_group
end
end
assert.is_nil(line_bgs[1])
Expand Down Expand Up @@ -1232,8 +1237,8 @@ describe('highlight', function()
local marker_text = {}
for _, mark in ipairs(extmarks) do
local d = mark[4]
if d and (d.line_hl_group == 'DiffsAdd' or d.line_hl_group == 'DiffsDelete') then
line_bgs[mark[2]] = d.line_hl_group
if d and (d.hl_group == 'DiffsAdd' or d.hl_group == 'DiffsDelete') then
line_bgs[mark[2]] = d.hl_group
end
if d and d.number_hl_group then
gutter_hls[mark[2]] = d.number_hl_group
Expand Down Expand Up @@ -1376,7 +1381,7 @@ describe('highlight', function()
for _, mark in ipairs(extmarks) do
if mark[2] == row then
local d = mark[4]
if d.line_hl_group then
if d.hl_group and d.hl_eol then
line_hl_count = line_hl_count + 1
end
if d.number_hl_group then
Expand All @@ -1387,7 +1392,7 @@ describe('highlight', function()
end
end
end
assert.are.equal(1, line_hl_count, 'row ' .. row .. ' has duplicate line_hl_group')
assert.are.equal(1, line_hl_count, 'row ' .. row .. ' has duplicate line bg')
assert.are.equal(1, number_hl_count, 'row ' .. row .. ' has duplicate number_hl_group')
assert.is_true(intra_count <= 1, 'row ' .. row .. ' has duplicate intra extmarks')
end
Expand Down Expand Up @@ -1429,18 +1434,18 @@ describe('highlight', function()

local extmarks = get_extmarks(bufnr)
local has_ts = false
local line_hl_count = 0
local line_bg_count = 0
for _, mark in ipairs(extmarks) do
local d = mark[4]
if d and d.hl_group and d.hl_group:match('^@.*%.lua$') then
has_ts = true
end
if d and d.line_hl_group then
line_hl_count = line_hl_count + 1
if d and d.hl_group and d.hl_eol then
line_bg_count = line_bg_count + 1
end
end
assert.is_true(has_ts)
assert.are.equal(1, line_hl_count)
assert.are.equal(1, line_bg_count)
delete_buffer(bufnr)
end)
end)
Expand Down
16 changes: 8 additions & 8 deletions spec/integration_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ describe('integration', function()
local extmarks = get_extmarks(bufnr, ns)
local has_diff_add = false
for _, mark in ipairs(extmarks) do
if mark[4] and mark[4].line_hl_group == 'DiffsAdd' then
if mark[4] and mark[4].hl_group == 'DiffsAdd' then
has_diff_add = true
break
end
Expand All @@ -275,7 +275,7 @@ describe('integration', function()
local extmarks = get_extmarks(bufnr, ns)
local has_diff_delete = false
for _, mark in ipairs(extmarks) do
if mark[4] and mark[4].line_hl_group == 'DiffsDelete' then
if mark[4] and mark[4].hl_group == 'DiffsDelete' then
has_diff_delete = true
break
end
Expand All @@ -302,10 +302,10 @@ describe('integration', function()
local has_add = false
local has_delete = false
for _, mark in ipairs(extmarks) do
if mark[4] and mark[4].line_hl_group == 'DiffsAdd' then
if mark[4] and mark[4].hl_group == 'DiffsAdd' then
has_add = true
end
if mark[4] and mark[4].line_hl_group == 'DiffsDelete' then
if mark[4] and mark[4].hl_group == 'DiffsDelete' then
has_delete = true
end
end
Expand Down Expand Up @@ -334,8 +334,8 @@ describe('integration', function()
local line_bgs = {}
for _, mark in ipairs(extmarks) do
local d = mark[4]
if d and (d.line_hl_group == 'DiffsAdd' or d.line_hl_group == 'DiffsDelete') then
line_bgs[mark[2]] = d.line_hl_group
if d and (d.hl_group == 'DiffsAdd' or d.hl_group == 'DiffsDelete') then
line_bgs[mark[2]] = d.hl_group
end
end
assert.is_nil(line_bgs[1])
Expand Down Expand Up @@ -417,10 +417,10 @@ describe('integration', function()
local del_lines = {}
for _, mark in ipairs(extmarks) do
local d = mark[4]
if d and d.line_hl_group == 'DiffsAdd' then
if d and d.hl_group == 'DiffsAdd' then
add_lines[mark[2]] = true
end
if d and d.line_hl_group == 'DiffsDelete' then
if d and d.hl_group == 'DiffsDelete' then
del_lines[mark[2]] = true
end
end
Expand Down
Loading