diff --git a/autoload/airline/extensions.vim b/autoload/airline/extensions.vim index 2ff03f4..cb94604 100644 --- a/autoload/airline/extensions.vim +++ b/autoload/airline/extensions.vim @@ -56,9 +56,7 @@ function! airline#extensions#apply_left_override(section1, section2) let w:airline_render_right = 0 endfunction -let s:active_winnr = -1 function! airline#extensions#apply(...) - let s:active_winnr = winnr() if s:is_excluded_window() return -1 @@ -113,16 +111,8 @@ function! airline#extensions#load_theme() call airline#util#exec_funcrefs(s:ext._theme_funcrefs, g:airline#themes#{g:airline_theme}#palette) endfunction -function! s:sync_active_winnr() - if exists('#airline') && winnr() != s:active_winnr - call airline#update_statusline() - endif -endfunction - function! airline#extensions#load() let loaded_ext = [] - " non-trivial number of external plugins use eventignore=all, so we need to account for that - autocmd CursorMoved * call sync_active_winnr() if exists('g:airline_extensions') for ext in g:airline_extensions diff --git a/plugin/airline.vim b/plugin/airline.vim index 7d2a85e..3c50f83 100644 --- a/plugin/airline.vim +++ b/plugin/airline.vim @@ -35,15 +35,18 @@ function! s:init() silent doautocmd User AirlineAfterInit endfunction +let s:active_winnr = -1 function! s:on_window_changed() + let s:active_winnr = winnr() + if pumvisible() && (!&previewwindow || g:airline_exclude_preview) return endif " Handle each window only once, since we might come here several times for " different autocommands. - let l:key = [bufnr('%'), winnr(), winnr('$'), tabpagenr(), &ft] + let l:key = [bufnr('%'), s:active_winnr, winnr('$'), tabpagenr(), &ft] if get(g:, 'airline_last_window_changed', []) == l:key - \ && &stl is# '%!airline#statusline('.winnr().')' + \ && &stl is# '%!airline#statusline('.s:active_winnr.')' \ && &ft !~? 'gitcommit' " fugitive is special, it changes names and filetypes several times, " make sure the caching does not get into its way @@ -110,6 +113,11 @@ function! s:airline_toggle() if exists('##CompleteDone') autocmd CompleteDone * call on_window_changed() endif + " non-trivial number of external plugins use eventignore=all, so we need to account for that + autocmd CursorMoved * + \ if winnr() != s:active_winnr + \ | call on_window_changed() + \ | endif autocmd VimResized * unlet! w:airline_lastmode | :call airline_refresh() autocmd TabEnter * :unlet! w:airline_lastmode | let w:airline_active=1