2021-02-15 18:09:12 +00:00
|
|
|
-- 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
|
2021-02-20 03:21:05 +00:00
|
|
|
local set_theme = _G.lualine_set_theme
|
|
|
|
_G.lualine_set_theme = function()
|
2021-02-15 18:09:12 +00:00
|
|
|
set_theme()
|
|
|
|
func()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2021-02-17 18:29:50 +00:00
|
|
|
-- Note for now only works for termguicolors scope can be background or foreground
|
|
|
|
function M.extract_highlight_colors(color_group, scope)
|
2021-02-21 14:37:59 +00:00
|
|
|
if vim.fn.hlexists(color_group) == 0 then return nil end
|
2021-02-20 03:21:05 +00:00
|
|
|
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,
|
2021-03-15 23:37:46 +00:00
|
|
|
ctermbg = cterm_colors.background
|
2021-02-20 03:21:05 +00:00
|
|
|
}
|
|
|
|
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
|
|
|
|
|
2021-02-21 14:37:59 +00:00
|
|
|
-- table to store the highlight names created by lualine
|
|
|
|
M.loaded_highlights = {}
|
|
|
|
|
|
|
|
-- sets loaded_highlights table
|
|
|
|
function M.save_highlight(highlight_name)
|
|
|
|
M.loaded_highlights[highlight_name] = true
|
|
|
|
end
|
|
|
|
|
|
|
|
-- clears loaded_highlights table and highlights
|
|
|
|
function M.clear_highlights()
|
2021-03-15 23:37:46 +00:00
|
|
|
for highlight_name, _ in pairs(M.loaded_highlights) do
|
2021-02-21 14:37:59 +00:00
|
|
|
vim.cmd('highlight clear ' .. highlight_name)
|
|
|
|
M.loaded_highlights[highlight_name] = nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2021-02-20 03:21:05 +00:00
|
|
|
-- determine if an highlight exist and isn't cleared
|
|
|
|
function M.highlight_exists(highlight_name)
|
2021-02-21 14:37:59 +00:00
|
|
|
return M.loaded_highlights[highlight_name] and true or false
|
2021-02-17 18:29:50 +00:00
|
|
|
end
|
|
|
|
|
2021-02-15 18:09:12 +00:00
|
|
|
return M
|