highlighter: Only recreate hi groups for visible buffers
In a long editing session, there could happen to accumulate several highlighting groups for buffers that might no longer be visible. Therefore, only re-create the highlighting group for buffers that are actually displayed in the current tabpage. If not, skip them. references #1779
This commit is contained in:
parent
a334a89e59
commit
09b5eb952c
@ -235,7 +235,11 @@ function! airline#highlighter#highlight(modes, ...)
|
|||||||
" draw the base mode, followed by any overrides
|
" draw the base mode, followed by any overrides
|
||||||
let mapped = map(a:modes, 'v:val == a:modes[0] ? v:val : a:modes[0]."_".v:val')
|
let mapped = map(a:modes, 'v:val == a:modes[0] ? v:val : a:modes[0]."_".v:val')
|
||||||
let suffix = a:modes[0] == 'inactive' ? '_inactive' : ''
|
let suffix = a:modes[0] == 'inactive' ? '_inactive' : ''
|
||||||
let airline_grouplist=[]
|
let airline_grouplist = []
|
||||||
|
let buffers_in_tabpage = sort(tabpagebuflist())
|
||||||
|
if exists("*uniq")
|
||||||
|
let buffers_in_tabpage = uniq(buffers_in_tabpage)
|
||||||
|
endif
|
||||||
" mapped might be something like ['normal', 'normal_modified']
|
" mapped might be something like ['normal', 'normal_modified']
|
||||||
" if a group is in both modes available, only define the second
|
" if a group is in both modes available, only define the second
|
||||||
" that is how this was done previously overwrite the previous definition
|
" that is how this was done previously overwrite the previous definition
|
||||||
@ -248,6 +252,14 @@ function! airline#highlighter#highlight(modes, ...)
|
|||||||
if name is# 'airline_c' && !empty(bufnr) && suffix is# '_inactive'
|
if name is# 'airline_c' && !empty(bufnr) && suffix is# '_inactive'
|
||||||
let name = 'airline_c'.bufnr
|
let name = 'airline_c'.bufnr
|
||||||
endif
|
endif
|
||||||
|
" do not re-create highlighting for buffers that are no longer visible
|
||||||
|
" in the current tabpage
|
||||||
|
if name[0:8] is# 'airline_c'
|
||||||
|
let bnr = matchstr(name, 'airline_c\\zs\d\+') + 0
|
||||||
|
if index(buffers_in_tabpage, bnr) == -1
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
endif
|
||||||
if s:group_not_done(airline_grouplist, name.suffix)
|
if s:group_not_done(airline_grouplist, name.suffix)
|
||||||
call airline#highlighter#exec(name.suffix, mode_colors)
|
call airline#highlighter#exec(name.suffix, mode_colors)
|
||||||
endif
|
endif
|
||||||
|
Loading…
Reference in New Issue
Block a user