58 lines
1.8 KiB
Lua
58 lines
1.8 KiB
Lua
-- Copyright (c) 2020-2021 shadmansaleh
|
|
-- MIT license, see LICENSE for more details.
|
|
local M = {}
|
|
|
|
-- Note for now only works for termguicolors scope can be background or foreground
|
|
function M.extract_highlight_colors(color_group, scope)
|
|
if vim.fn.hlexists(color_group) == 0 then return nil end
|
|
local gui_colors = vim.api.nvim_get_hl_by_name(color_group, true)
|
|
local cterm_colors = vim.api.nvim_get_hl_by_name(color_group, false)
|
|
local color = {
|
|
ctermfg = cterm_colors.foreground,
|
|
ctermbg = cterm_colors.background
|
|
}
|
|
if gui_colors.background then
|
|
color.guibg = string.format('#%06x', gui_colors.background)
|
|
gui_colors.background = nil
|
|
end
|
|
if gui_colors.foreground then
|
|
color.guifg = string.format('#%06x', gui_colors.foreground)
|
|
gui_colors.foreground = nil
|
|
end
|
|
cterm_colors.background = nil
|
|
cterm_colors.foreground = nil
|
|
color = vim.tbl_extend('keep', color, gui_colors, cterm_colors)
|
|
if scope then return color[scope] end
|
|
return color
|
|
end
|
|
|
|
-- table to store the highlight names created by lualine
|
|
M.loaded_highlights = {}
|
|
|
|
-- sets loaded_highlights table
|
|
function M.save_highlight(highlight_name, highlight_args)
|
|
M.loaded_highlights[highlight_name] = highlight_args
|
|
end
|
|
|
|
function M.reload_highlights()
|
|
local highlight = require('lualine.highlight')
|
|
for _, highlight_args in pairs(M.loaded_highlights) do
|
|
highlight.highlight(unpack(highlight_args))
|
|
end
|
|
end
|
|
|
|
-- determine if an highlight exist and isn't cleared
|
|
function M.highlight_exists(highlight_name)
|
|
return M.loaded_highlights[highlight_name] and true or false
|
|
end
|
|
|
|
-- clears loaded_highlights table and highlights
|
|
function M.clear_highlights()
|
|
for highlight_name, _ in pairs(M.loaded_highlights) do
|
|
vim.cmd('highlight clear ' .. highlight_name)
|
|
M.loaded_highlights[highlight_name] = nil
|
|
end
|
|
end
|
|
|
|
return M
|