2021-02-13 00:03:57 +00:00
|
|
|
-- Copyright (c) 2020-2021 hoob3rt
|
|
|
|
-- MIT license, see LICENSE for more details.
|
|
|
|
|
2020-12-30 14:48:51 +00:00
|
|
|
local M = { }
|
2021-01-08 01:35:09 +00:00
|
|
|
local utils = require "lualine.utils"
|
2020-12-30 14:48:51 +00:00
|
|
|
|
2021-01-08 01:35:09 +00:00
|
|
|
local function highlight (name, foreground, background, gui)
|
2021-01-03 19:11:22 +00:00
|
|
|
local command = {
|
2021-01-08 01:35:09 +00:00
|
|
|
'highlight', name,
|
|
|
|
'ctermfg=' .. (foreground[2] or utils.get_cterm_color(foreground)),
|
|
|
|
'ctermbg=' .. (background[2] or utils.get_cterm_color(background)),
|
|
|
|
'cterm=' .. (gui or 'none'),
|
|
|
|
'guifg=' .. (foreground[1] or foreground),
|
|
|
|
'guibg=' .. (background[1] or background),
|
|
|
|
'gui=' .. (gui or 'none'),
|
|
|
|
}
|
2021-01-03 19:11:22 +00:00
|
|
|
return table.concat(command, ' ')
|
2020-12-30 14:48:51 +00:00
|
|
|
end
|
|
|
|
|
2021-01-05 15:08:56 +00:00
|
|
|
local function apply_defaults_to_theme(theme)
|
|
|
|
local modes = {'insert', 'visual', 'replace', 'command', 'terminal', 'inactive'}
|
|
|
|
for _, mode in ipairs(modes) do
|
|
|
|
if not theme[mode] then
|
|
|
|
theme[mode] = theme['normal']
|
|
|
|
else
|
|
|
|
for section_name, section in pairs(theme['normal']) do
|
|
|
|
theme[mode][section_name] = (theme[mode][section_name] or section)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
return theme
|
|
|
|
end
|
|
|
|
|
2021-01-04 01:14:29 +00:00
|
|
|
function M.create_highlight_groups(theme)
|
2021-01-05 15:08:56 +00:00
|
|
|
apply_defaults_to_theme(theme)
|
2020-12-30 14:48:51 +00:00
|
|
|
for mode, sections in pairs(theme) do
|
|
|
|
for section, colorscheme in pairs(sections) do
|
2021-01-04 01:14:29 +00:00
|
|
|
local highlight_group_name = { 'lualine', section, mode }
|
2021-01-08 01:35:09 +00:00
|
|
|
vim.cmd(highlight(table.concat(highlight_group_name, '_'), colorscheme.fg, colorscheme.bg, colorscheme.gui))
|
2020-12-30 14:48:51 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2021-01-04 01:14:29 +00:00
|
|
|
function M.format_highlight(is_focused, highlight_group)
|
2020-12-30 14:48:51 +00:00
|
|
|
local mode = require('lualine.components.mode')()
|
2021-01-04 01:14:29 +00:00
|
|
|
highlight_group = [[%#]] .. highlight_group
|
|
|
|
if not is_focused then
|
|
|
|
highlight_group = highlight_group .. [[_inactive]]
|
2020-12-30 14:48:51 +00:00
|
|
|
else
|
2021-01-11 03:52:34 +00:00
|
|
|
if mode == 'VISUAL' or mode == 'V-BLOCK' or mode == 'V-LINE'
|
|
|
|
or mode == 'SELECT' or mode == 'S-LINE' or mode == 'S-BLOCK'then
|
2021-01-04 01:14:29 +00:00
|
|
|
highlight_group = highlight_group .. '_visual'
|
2021-01-11 03:52:34 +00:00
|
|
|
elseif mode == 'REPLACE' or mode == 'V-REPLACE' then
|
2021-01-04 01:14:29 +00:00
|
|
|
highlight_group = highlight_group .. '_replace'
|
2021-01-09 11:01:02 +00:00
|
|
|
elseif mode == 'INSERT' then
|
|
|
|
highlight_group = highlight_group .. '_insert'
|
2021-01-11 03:52:34 +00:00
|
|
|
elseif mode == 'COMMAND' or mode == 'EX' or mode == 'MORE' or mode == 'CONFIRM'then
|
2021-01-09 11:01:02 +00:00
|
|
|
highlight_group = highlight_group .. '_command'
|
|
|
|
elseif mode == 'TERMINAL' then
|
|
|
|
highlight_group = highlight_group .. '_terminal'
|
2020-12-30 14:48:51 +00:00
|
|
|
else
|
2021-01-08 03:52:30 +00:00
|
|
|
highlight_group = highlight_group .. '_normal'
|
2020-12-30 14:48:51 +00:00
|
|
|
end
|
|
|
|
end
|
2021-01-04 01:14:29 +00:00
|
|
|
highlight_group = highlight_group .. [[#]]
|
|
|
|
return highlight_group
|
2020-12-30 14:48:51 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
return M
|