diff --git a/autoload/airline/highlighter.vim b/autoload/airline/highlighter.vim index 0c80dada..8ac0fbf5 100644 --- a/autoload/airline/highlighter.vim +++ b/autoload/airline/highlighter.vim @@ -402,4 +402,31 @@ else endif return true enddef + def airline#highlighter#exec(group: string, clrs: list): void # {{{2 + # TODO: is clrs: list correct? Should probably be list instead + # convert all themes to use strings in cterm color definition + if pumvisible() + return + endif + var colors: list + colors = map(copy(clrs), { _, v -> type(v) != type('') ? string(v) : v}) + if len(colors) == 4 + add(colors, '') + endif + if s:is_win32term + colors[2] = s:gui2cui(get(colors, 0, ''), get(colors, 2, '')) + colors[3] = s:gui2cui(get(colors, 1, ''), get(colors, 3, '')) + endif + var old_hi: list = airline#highlighter#get_highlight(group) + var new_hi: list = colors + colors = s:CheckDefined(colors) + if old_hi != new_hi || !s:hl_group_exists(group) + var cmd = '' + cmd = printf('hi %s%s', group, s:GetHiCmd(colors)) + exe cmd + if has_key(s:hl_groups, group) + s:hl_groups[group] = colors + endif + endif + enddef endif