diff --git a/lua/diffs/highlight.lua b/lua/diffs/highlight.lua index ed9329b..445354a 100644 --- a/lua/diffs/highlight.lua +++ b/lua/diffs/highlight.lua @@ -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 diff --git a/lua/diffs/init.lua b/lua/diffs/init.lua index b986eae..81d4f97 100644 --- a/lua/diffs/init.lua +++ b/lua/diffs/init.lua @@ -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 diff --git a/spec/email_quote_spec.lua b/spec/email_quote_spec.lua index e1744a1..9ebc47f 100644 --- a/spec/email_quote_spec.lua +++ b/spec/email_quote_spec.lua @@ -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 diff --git a/spec/highlight_spec.lua b/spec/highlight_spec.lua index 22b884c..37ae9d5 100644 --- a/spec/highlight_spec.lua +++ b/spec/highlight_spec.lua @@ -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 @@ -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 @@ -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', @@ -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) @@ -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 @@ -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 @@ -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 @@ -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 @@ -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) @@ -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]) @@ -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 @@ -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 @@ -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 @@ -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) diff --git a/spec/integration_spec.lua b/spec/integration_spec.lua index 23e870b..8fd57ee 100644 --- a/spec/integration_spec.lua +++ b/spec/integration_spec.lua @@ -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 @@ -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 @@ -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 @@ -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]) @@ -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