diff --git a/lua/avante/config.lua b/lua/avante/config.lua index 620cbfa..89afded 100644 --- a/lua/avante/config.lua +++ b/lua/avante/config.lua @@ -260,10 +260,9 @@ M._defaults = { }, }, highlights = { - ---@type AvanteConflictHighlights diff = { - current = "DiffText", - incoming = "DiffAdd", + current = nil, + incoming = nil, }, }, mappings = { @@ -376,11 +375,6 @@ M._defaults = { ---@type avante.Config M._options = {} ----@class avante.ConflictConfig: AvanteConflictConfig ----@field mappings AvanteConflictMappings ----@field highlights AvanteConflictHighlights -M.diff = {} - ---@type Provider[] M.providers = {} @@ -412,13 +406,6 @@ function M.setup(opts) vim.validate({ provider = { M._options.provider, "string", false } }) - M.diff = vim.tbl_deep_extend( - "force", - {}, - M._options.diff, - { mappings = M._options.mappings.diff, highlights = M._options.highlights.diff } - ) - if next(M._options.vendors) ~= nil then for k, v in pairs(M._options.vendors) do M._options.vendors[k] = type(v) == "function" and v() or v @@ -433,12 +420,6 @@ function M.override(opts) vim.validate({ opts = { opts, "table", true } }) M._options = vim.tbl_deep_extend("force", M._options, opts or {}) - M.diff = vim.tbl_deep_extend( - "force", - {}, - M._options.diff, - { mappings = M._options.mappings.diff, highlights = M._options.highlights.diff } - ) if next(M._options.vendors) ~= nil then for k, v in pairs(M._options.vendors) do diff --git a/lua/avante/diff.lua b/lua/avante/diff.lua index f5eead7..3fd923e 100644 --- a/lua/avante/diff.lua +++ b/lua/avante/diff.lua @@ -283,12 +283,12 @@ local function register_cursor_move_events(bufnr) local hint = string.format( "[<%s>: OURS, <%s>: THEIRS, <%s>: CURSOR, <%s>: ALL THEIRS, <%s>: PREV, <%s>: NEXT]", - Config.diff.mappings.ours, - Config.diff.mappings.theirs, - Config.diff.mappings.cursor, - Config.diff.mappings.all_theirs, - Config.diff.mappings.prev, - Config.diff.mappings.next + Config.mappings.diff.ours, + Config.mappings.diff.theirs, + Config.mappings.diff.cursor, + Config.mappings.diff.all_theirs, + Config.mappings.diff.prev, + Config.mappings.diff.next ) show_keybinding_hint_extmark_id = api.nvim_buf_set_extmark(bufnr, KEYBINDING_NAMESPACE, lnum - 1, -1, { @@ -355,18 +355,18 @@ H.setup_buffer_mappings = function(bufnr) ---@param desc string local function opts(desc) return { silent = true, buffer = bufnr, desc = "avante(conflict): " .. desc } end - vim.keymap.set({ "n", "v" }, Config.diff.mappings.ours, function() M.choose("ours") end, opts("choose ours")) - vim.keymap.set({ "n", "v" }, Config.diff.mappings.both, function() M.choose("both") end, opts("choose both")) - vim.keymap.set({ "n", "v" }, Config.diff.mappings.theirs, function() M.choose("theirs") end, opts("choose theirs")) + vim.keymap.set({ "n", "v" }, Config.mappings.diff.ours, function() M.choose("ours") end, opts("choose ours")) + vim.keymap.set({ "n", "v" }, Config.mappings.diff.both, function() M.choose("both") end, opts("choose both")) + vim.keymap.set({ "n", "v" }, Config.mappings.diff.theirs, function() M.choose("theirs") end, opts("choose theirs")) vim.keymap.set( { "n", "v" }, - Config.diff.mappings.all_theirs, + Config.mappings.diff.all_theirs, function() M.choose("all_theirs") end, opts("choose all theirs") ) - vim.keymap.set("n", Config.diff.mappings.cursor, function() M.choose("cursor") end, opts("choose under cursor")) - vim.keymap.set("n", Config.diff.mappings.prev, function() M.find_prev("ours") end, opts("previous conflict")) - vim.keymap.set("n", Config.diff.mappings.next, function() M.find_next("ours") end, opts("next conflict")) + vim.keymap.set("n", Config.mappings.diff.cursor, function() M.choose("cursor") end, opts("choose under cursor")) + vim.keymap.set("n", Config.mappings.diff.prev, function() M.find_prev("ours") end, opts("previous conflict")) + vim.keymap.set("n", Config.mappings.diff.next, function() M.find_next("ours") end, opts("next conflict")) vim.b[bufnr].avante_conflict_mappings_set = true end @@ -374,7 +374,7 @@ end ---@param bufnr integer H.clear_buffer_mappings = function(bufnr) if not bufnr or not vim.b[bufnr].avante_conflict_mappings_set then return end - for _, mapping in pairs(Config.diff.mappings) do + for _, mapping in pairs(Config.mappings.diff) do if vim.fn.hasmapto(mapping, "n") > 0 then api.nvim_buf_del_keymap(bufnr, "n", mapping) end end vim.b[bufnr].avante_conflict_mappings_set = false diff --git a/lua/avante/highlights.lua b/lua/avante/highlights.lua index b9a4b09..c6d7715 100644 --- a/lua/avante/highlights.lua +++ b/lua/avante/highlights.lua @@ -20,10 +20,10 @@ local Highlights = { } Highlights.conflict = { - CURRENT = { name = "AvanteConflictCurrent", bg = "#562C30", bold = true }, -- #405d7e - CURRENT_LABEL = { name = "AvanteConflictCurrentLabel", link = "CURRENT", shade = 60 }, + CURRENT = { name = "AvanteConflictCurrent", bg = "#562C30", bold = true }, + CURRENT_LABEL = { name = "AvanteConflictCurrentLabel", shade_link = "AvanteConflictCurrent", shade = 30 }, INCOMING = { name = "AvanteConflictIncoming", bg = 3229523, bold = true }, -- #314753 - INCOMING_LABEL = { name = "AvanteConflictIncomingLabel", link = "INCOMING", shade = 60 }, + INCOMING_LABEL = { name = "AvanteConflictIncomingLabel", shade_link = "AvanteConflictIncoming", shade = 30 }, } --- helper @@ -55,41 +55,59 @@ M.setup = function() end) end - M.conflict_highlights() + M.setup_conflict_highlights() end ----@param opts? AvanteConflictHighlights -M.conflict_highlights = function(opts) - opts = opts or Config.diff.highlights +M.setup_conflict_highlights = function() + local custom_hls = Config.highlights.diff - local get_highlights = function(key, hl) - local cl = api.nvim_get_hl(0, { name = opts[key:lower()] }) - return cl ~= nil and cl or api.nvim_get_hl(0, { name = hl.name }) + local get_bg = function(hl_name) + local hl = api.nvim_get_hl(0, { name = hl_name }) + return hl.bg end - local get_default_colors = function(key, hl) - --- We will first check for user custom highlight. Then fallback to default name highlight. - return get_highlights(key, hl).bg or hl.bg - end - - local get_shade = function(hl) - local color = get_default_colors(hl.link, Highlights.conflict[hl.link]) - return H.shade_color(color, hl.shade) + local get_bold = function(hl_name) + local hl = api.nvim_get_hl(0, { name = hl_name }) + return hl.bold end vim.iter(Highlights.conflict):each(function(key, hl) - if not has_set_colors(hl.name) then - if hl.link ~= nil then - api.nvim_set_hl(0, hl.name, { bg = get_shade(hl), default = true }) - else - local bold = get_highlights(key, hl).bold - api.nvim_set_hl( - 0, - hl.name, - { bg = get_default_colors(key, hl), default = true, bold = bold ~= nil and bold or hl.bold } - ) - end + --- set none shade linked highlights first + if hl.shade_link ~= nil and hl.shade ~= nil then return end + + if has_set_colors(hl.name) then return end + + local bg = hl.bg + local bold = hl.bold + + local custom_hl_name = custom_hls[key:lower()] + if custom_hl_name ~= nil then + bg = get_bg(custom_hl_name) or hl.bg + bold = get_bold(custom_hl_name) or hl.bold end + + api.nvim_set_hl(0, hl.name, { bg = bg, default = true, bold = bold }) + end) + + vim.iter(Highlights.conflict):each(function(key, hl) + --- only set shade linked highlights + if hl.shade_link == nil or hl.shade == nil then return end + + if has_set_colors(hl.name) then return end + + local bg + local bold = hl.bold + + local custom_hl_name = custom_hls[key:lower()] + if custom_hl_name ~= nil then + bg = get_bg(custom_hl_name) + bold = get_bold(custom_hl_name) or hl.bold + else + local link_bg = get_bg(hl.shade_link) + bg = H.shade_color(link_bg, hl.shade) + end + + api.nvim_set_hl(0, hl.name, { bg = bg, default = true, bold = bold }) end) end @@ -128,7 +146,7 @@ H.alter = function(attr, percent) return math.floor(attr * (100 + percent) / 100 ---@param percent number ---@return string H.shade_color = function(color, percent) - percent = vim.opt.background:get() == "light" and percent / 10 or percent + percent = vim.opt.background:get() == "light" and percent / 5 or percent local rgb = H.decode_24bit_rgb(color) if not rgb.r or not rgb.g or not rgb.b then return "NONE" end local r, g, b = H.alter(rgb.r, percent), H.alter(rgb.g, percent), H.alter(rgb.b, percent)