main: Make :AirlineRefresh! skip recrecrating highlighting groups

When `g:skip_empty_sections` is set, `:AirlineRefresh` can be called
very often and cause slow down, because it forcefully re-creates the
highlighting groups. This is mostly not needed for the redraw to happen,
therefore, add the `<bang>` attribute to the command, making it skip to
re-create the highlighting groups and have all extensions that rely on a
forced update use the `!` form.

Should be much fast then.

fixes #1908
This commit is contained in:
Christian Brabandt 2019-04-26 10:16:40 +02:00
parent fdd75df927
commit a753422549
No known key found for this signature in database
GPG Key ID: F3F92DA383FDDE09
5 changed files with 13 additions and 8 deletions

View File

@ -124,6 +124,6 @@ endfunction
function! s:ale_refresh()
if get(g:, 'airline_skip_empty_sections', 0)
exe ':AirlineRefresh'
exe ':AirlineRefresh!'
endif
endfunction

View File

@ -22,7 +22,7 @@ let s:diagnostics = {}
function! s:languageclient_refresh()
if get(g:, 'airline_skip_empty_sections', 0)
exe ':AirlineRefresh'
exe ':AirlineRefresh!'
endif
endfunction

View File

@ -165,7 +165,7 @@ function! s:ws_refresh()
endif
unlet! b:airline_whitespace_check
if get(g:, 'airline_skip_empty_sections', 0)
exe ':AirlineRefresh'
exe ':AirlineRefresh!'
endif
let b:airline_ws_changedtick = b:changedtick
endfunction

View File

@ -257,8 +257,9 @@ COMMANDS *airline-commands*
:AirlineToggle *:AirlineToggle*
Toggles between the standard 'statusline' and airline.
:AirlineRefresh *:AirlineRefresh*
Refreshes all highlight groups and redraws the statusline.
:AirlineRefresh[!] *:AirlineRefresh*
Refreshes all highlight groups and redraws the statusline. With the '!'
attribute, skips refreshing the highlighting groups.
:AirlineExtensions *:AirlineExtensions*
Shows the status of all available airline extensions.

View File

@ -195,14 +195,18 @@ function! s:airline_theme(...)
endif
endfunction
function! s:airline_refresh()
function! s:airline_refresh(...)
" a:1, fast refresh, do not reload the theme
let fast=!empty(get(a:000, 0, 0))
if !exists("#airline")
" disabled
return
endif
call airline#util#doautocmd('AirlineBeforeRefresh')
call airline#highlighter#reset_hlcache()
if !fast
call airline#load_theme()
endif
call airline#update_statusline()
call airline#update_tabline()
endfunction
@ -255,7 +259,7 @@ endfunction
command! -bar -nargs=? -complete=customlist,<sid>get_airline_themes AirlineTheme call <sid>airline_theme(<f-args>)
command! -bar AirlineToggleWhitespace call airline#extensions#whitespace#toggle()
command! -bar AirlineToggle call s:airline_toggle()
command! -bar AirlineRefresh call s:airline_refresh()
command! -bar -bang AirlineRefresh call s:airline_refresh(<q-bang>)
command! AirlineExtensions call s:airline_extensions()
call airline#init#bootstrap()