highlight: skip processing the same hi group twice

Shouldn't happen, but just in case skip creating highlighting group,
if the same group with the same attributes has already been defined.
This commit is contained in:
Christian Brabandt 2017-06-26 23:06:46 +02:00
parent 583ae3d5f9
commit feee9bcf3c
No known key found for this signature in database
GPG Key ID: F3F92DA383FDDE09
3 changed files with 25 additions and 7 deletions

View File

@ -47,7 +47,9 @@ function! airline#load_theme()
endif
call airline#highlighter#load_theme()
let g:airline_theme_dict = {}
call airline#extensions#load_theme()
unlet g:airline_theme_dict
call airline#update_statusline()
endfunction
@ -102,6 +104,7 @@ function! airline#update_statusline()
if airline#util#getwinvar(winnr(), 'airline_disabled', 0)
return
endif
let g:airline_theme_dict={}
for nr in filter(range(1, winnr('$')), 'v:val != winnr()')
if airline#util#getwinvar(nr, 'airline_disabled', 0)
continue
@ -117,6 +120,7 @@ function! airline#update_statusline()
let w:airline_active = 1
let context = { 'winnr': winnr(), 'active': 1, 'bufnr': winbufnr(winnr()) }
call s:invoke_funcrefs(context, g:airline_statusline_funcrefs)
unlet g:airline_theme_dict
endfunction
let s:contexts = {}
@ -198,9 +202,11 @@ function! airline#check_mode(winnr)
return ''
endif
if get(w:, 'airline_lastmode', '') != mode_string
let g:airline_theme_dict = {}
call airline#highlighter#highlight_modified_inactive(context.bufnr)
call airline#highlighter#highlight(l:mode, context.bufnr)
let w:airline_lastmode = mode_string
unlet g:airline_theme_dict
endif
return ''

View File

@ -118,13 +118,18 @@ function! airline#extensions#tabline#get()
if !exists('#airline#BufAdd#*')
autocmd airline BufAdd * call <sid>update_tabline()
endif
if s:ctrlspace
return airline#extensions#tabline#ctrlspace#get()
elseif s:show_buffers && curtabcnt == 1 || !s:show_tabs
return airline#extensions#tabline#buffers#get()
else
return airline#extensions#tabline#tabs#get()
endif
try
let g:airline_theme_dict = {}
if s:ctrlspace
return airline#extensions#tabline#ctrlspace#get()
elseif s:show_buffers && curtabcnt == 1 || !s:show_tabs
return airline#extensions#tabline#buffers#get()
else
return airline#extensions#tabline#tabs#get()
endif
finally
unlet g:airline_theme_dict
endtry
endfunction
function! airline#extensions#tabline#title(n)

View File

@ -84,6 +84,10 @@ function! airline#highlighter#exec(group, colors)
if len(colors) == 4
call add(colors, '')
endif
if has_key(g:airline_theme_dict, 'a:group') &&
\ get(g:airline_theme_dict[a:group]) == a:colors
return
endif
if g:airline_gui_mode ==# 'gui'
let new_hi = [colors[0], colors[1], '', '', colors[4]]
else
@ -98,6 +102,7 @@ function! airline#highlighter#exec(group, colors)
\ s:Get(colors, 4, 'term=', ''))
exe cmd
endif
let g:airline_theme_dict[a:group] = a:colors
endfunction
function! s:CheckDefined(colors)
@ -160,6 +165,7 @@ function! airline#highlighter#load_theme()
if pumvisible()
return
endif
let g:airline_theme_dict = {}
for winnr in filter(range(1, winnr('$')), 'v:val != winnr()')
call airline#highlighter#highlight_modified_inactive(winbufnr(winnr))
endfor
@ -169,6 +175,7 @@ function! airline#highlighter#load_theme()
else
call airline#highlighter#highlight(['normal'])
endif
unlet g:airline_theme_dict
endfunction
function! airline#highlighter#add_separator(from, to, inverse)