1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-03 16:00:07 +08:00
SpaceVim/lua/spacevim/api/vim/highlight.lua

105 lines
2.5 KiB
Lua
Raw Normal View History

local M = {}
2024-04-21 22:57:47 +08:00
M.group2dict = function(name)
local id = vim.fn.hlID(name)
if id == 0 then
return {
name = '',
ctermbg = '',
ctermfg = '',
bold = '',
italic = '',
reverse = '',
underline = '',
guibg = '',
guifg = '',
}
2024-04-21 22:57:47 +08:00
end
local rst = {
name = vim.fn.synIDattr(id, 'name'),
ctermbg = vim.fn.synIDattr(id, 'bg', 'cterm'),
ctermfg = vim.fn.synIDattr(id, 'fg', 'cterm'),
bold = vim.fn.synIDattr(id, 'bold'),
italic = vim.fn.synIDattr(id, 'italic'),
reverse = vim.fn.synIDattr(id, 'reverse'),
underline = vim.fn.synIDattr(id, 'underline'),
guibg = vim.fn.tolower(vim.fn.synIDattr(id, 'bg#', 'gui')),
guifg = vim.fn.tolower(vim.fn.synIDattr(id, 'fg#', 'gui')),
}
return rst
end
2024-04-21 22:57:47 +08:00
M.hide_in_normal = function(name)
local group = M.group2dict(name)
if vim.fn.empty(group) == 1 then
return
end
local normal = M.group2dict('Normal')
local guibg = normal.guibg or ''
local ctermbg = normal.ctermbg or ''
group.guifg = guibg
group.guibg = guibg
group.ctermfg = ctermbg
group.ctermbg = ctermbg
2024-05-14 23:24:58 +08:00
group.blend = 100
M.hi(group)
end
2024-04-21 22:57:47 +08:00
M.hi = function(info)
if vim.fn.empty(info) == 1 or vim.fn.get(info, 'name', '') == '' then
return
end
vim.cmd('silent! hi clear ' .. info.name)
local cmd = 'silent hi! ' .. info.name
if vim.fn.empty(info.ctermbg) == 0 then
cmd = cmd .. ' ctermbg=' .. info.ctermbg
end
if vim.fn.empty(info.ctermfg) == 0 then
cmd = cmd .. ' ctermfg=' .. info.ctermfg
end
if vim.fn.empty(info.guibg) == 0 then
cmd = cmd .. ' guibg=' .. info.guibg
end
if vim.fn.empty(info.guifg) == 0 then
cmd = cmd .. ' guifg=' .. info.guifg
end
local style = {}
2024-04-21 22:57:47 +08:00
for _, sty in ipairs({ 'bold', 'italic', 'underline', 'reverse' }) do
if info[sty] == 1 then
table.insert(style, sty)
end
2024-04-21 22:57:47 +08:00
end
2024-04-21 22:57:47 +08:00
if vim.fn.empty(style) == 0 then
cmd = cmd .. ' gui=' .. vim.fn.join(style, ',') .. ' cterm=' .. vim.fn.join(style, ',')
end
2024-05-14 23:24:58 +08:00
if info.blend then
cmd = cmd .. ' blend=' .. info.blend
end
2024-04-21 22:57:47 +08:00
pcall(vim.cmd, cmd)
end
2024-04-21 22:57:47 +08:00
function M.hi_separator(a, b)
local hi_a = M.group2dict(a)
local hi_b = M.group2dict(b)
local hi_a_b = {
name = a .. '_' .. b,
guibg = hi_b.guibg,
guifg = hi_a.guibg,
ctermbg = hi_b.ctermbg,
ctermfg = hi_a.ctermbg,
}
local hi_b_a = {
name = b .. '_' .. a,
guibg = hi_a.guibg,
guifg = hi_b.guibg,
ctermbg = hi_a.ctermbg,
ctermfg = hi_b.ctermbg,
}
M.hi(hi_a_b)
M.hi(hi_b_a)
end
return M