49 lines
1.5 KiB
Lua
49 lines
1.5 KiB
Lua
-- Copyright (c) 2020-2021 shadmansaleh
|
|
-- MIT license, see LICENSE for more details.
|
|
|
|
local M = {}
|
|
|
|
-- Works as a decorator to expand set_lualine_theme functions
|
|
-- functionality at runtime .
|
|
function M.expand_set_theme(func)
|
|
-- execute a local version of global function to not get in a inf recurtion
|
|
local set_theme = _G.lualine_set_theme
|
|
_G.lualine_set_theme = function()
|
|
set_theme()
|
|
func()
|
|
end
|
|
end
|
|
|
|
-- Note for now only works for termguicolors scope can be background or foreground
|
|
function M.extract_highlight_colors(color_group, scope)
|
|
if not M.highlight_exists(color_group) 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
|
|
|
|
-- determine if an highlight exist and isn't cleared
|
|
function M.highlight_exists(highlight_name)
|
|
local ok, result = pcall(vim.api.nvim_exec, 'highlight '..highlight_name, true)
|
|
if not ok then return false end
|
|
return result:find('xxx cleared') == nil
|
|
end
|
|
|
|
return M
|