From 5fb91eb8d72af618c8ba59059cc644085da02cf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?angel=C2=BF?= <155915830+NopAngel@users.noreply.github.com> Date: Mon, 20 Apr 2026 10:19:28 -0400 Subject: [PATCH] style: adhere to contributing guidelines and optimize core logic (#2748) * style: adhere to contributing guidelines and optimize core logic * plugin: adhere to coding style and fix initialization --- plugin/airline.vim | 102 ++++++++++++++++++++++++--------------------- 1 file changed, 54 insertions(+), 48 deletions(-) diff --git a/plugin/airline.vim b/plugin/airline.vim index 845743c1..13d4f690 100644 --- a/plugin/airline.vim +++ b/plugin/airline.vim @@ -6,7 +6,7 @@ set cpo&vim scriptencoding utf-8 -if &cp || v:version < 702 || (exists('g:loaded_airline') && g:loaded_airline) +if &compatible || v:version < 702 || (exists('g:loaded_airline') && g:loaded_airline) finish endif let g:loaded_airline = 1 @@ -25,11 +25,11 @@ function! s:init() if s:theme_in_vimrc try if g:airline_theme is# 'random' - let g:airline_theme=s:random_theme() + let g:airline_theme = s:random_theme() endif let palette = g:airline#themes#{g:airline_theme}#palette catch - call airline#util#warning(printf('Could not resolve airline theme "%s". Themes have been migrated to github.com/vim-airline/vim-airline-themes.', g:airline_theme)) + call airline#util#warning(printf('Could not resolve airline theme "%s".', g:airline_theme)) let g:airline_theme = 'dark' endtry try @@ -59,13 +59,15 @@ function! s:on_window_changed(event) " do not trigger for previewwindows return endif + let s:active_winnr = winnr() " Handle each window only once, since we might come here several times for " different autocommands. - let l:key = [bufnr('%'), s:active_winnr, winnr('$'), tabpagenr(), &ft] - if get(g:, 'airline_last_window_changed', []) == l:key - \ && &stl is# '%!airline#statusline('.s:active_winnr.')' - \ && &ft !~? 'gitcommit' + let key = [bufnr('%'), s:active_winnr, winnr('$'), tabpagenr(), &filetype] + + if get(g:, 'airline_last_window_changed', []) == key + \ && &statusline is# '%!airline#statusline('.s:active_winnr.')' + \ && &filetype !~? 'gitcommit' " fugitive is special, it changes names and filetypes several times, " make sure the caching does not get into its way if a:event ==# 'BufUnload' @@ -75,7 +77,8 @@ function! s:on_window_changed(event) endif return endif - let g:airline_last_window_changed = l:key + + let g:airline_last_window_changed = key call s:init() call airline#update_statusline() @@ -90,7 +93,8 @@ function! s:on_focus_gained() endif if airline#util#try_focusgained() - unlet! w:airline_lastmode | :call airline_refresh(1) + unlet! w:airline_lastmode + call s:airline_refresh(1) endif endfunction @@ -108,8 +112,6 @@ function! s:on_colorscheme_changed() if !s:theme_in_vimrc call airline#switch_matching_theme() endif - - " couldn't find a match, or theme was defined, just refresh call airline#load_theme() endfunction @@ -120,18 +122,17 @@ endfunction function! s:airline_toggle() if exists("#airline") augroup airline - au! + autocmd! augroup END augroup! airline if exists("s:stl") - let &stl = s:stl + let &statusline = s:stl endif if exists("s:tal") - let [&tal, &showtabline] = s:tal + let [&tabline, &showtabline] = s:tal endif call airline#highlighter#reset_hlcache() - call airline#util#doautocmd('AirlineToggledOff') else let s:stl = &statusline @@ -147,65 +148,72 @@ function! s:airline_toggle() autocmd ColorScheme * call on_colorscheme_changed() " Set all statuslines to inactive autocmd FocusLost * call airline#update_statusline_focuslost() + " Refresh airline for :syntax off autocmd SourcePre */syntax/syntax.vim \ call airline#extensions#tabline#buffers#invalidate() + autocmd VimEnter * call on_window_changed('VimEnter') autocmd WinEnter * call on_window_changed('WinEnter') autocmd FileType * call on_window_changed('FileType') autocmd BufWinEnter * call on_window_changed('BufWinEnter') autocmd BufUnload * call on_window_changed('BufUnload') + if exists('##CompleteDone') autocmd CompleteDone * call on_window_changed('CompleteDone') endif + " non-trivial number of external plugins use eventignore=all, so we need to account for that autocmd CursorMoved * call on_cursor_moved() - autocmd VimResized * call on_focus_gained() + if exists('*timer_start') && exists('*funcref') && &eventignore !~? 'focusgained' " do not trigger FocusGained on startup, it might erase the intro screen (see #1817) " needs funcref() (needs 7.4.2137) and timers (7.4.1578) - let Handler=funcref('FocusGainedHandler') - let s:timer=timer_start(5000, Handler) + let Handler = funcref('FocusGainedHandler') + let s:timer = timer_start(5000, Handler) else - autocmd FocusGained * call on_focus_gained() + autocmd FocusGained * call s:on_focus_gained() endif if exists("##TerminalOpen") " Using the same function with the TermOpen autocommand " breaks for Neovim see #1828, looks like a neovim bug. - autocmd TerminalOpen * :call airline#load_theme() " reload current theme for Terminal, forces the terminal extension to be loaded + autocmd TerminalOpen * call airline#load_theme() endif - autocmd TabEnter * :unlet! w:airline_lastmode | let w:airline_active=1 + + autocmd TabEnter * unlet! w:airline_lastmode | let w:airline_active = 1 + autocmd BufWritePost */autoload/airline/themes/*.vim - \ exec 'source '.split(globpath(&rtp, 'autoload/airline/themes/'.g:airline_theme.'.vim', 1), "\n")[0] + \ execute 'source '.split(globpath(&rtp, 'autoload/airline/themes/'.g:airline_theme.'.vim', 1), "\n")[0] \ | call airline#load_theme() + autocmd User AirlineModeChanged nested call airline#mode_changed() if get(g:, 'airline_statusline_ontop', 0) " Force update of tabline more often - autocmd InsertEnter,InsertLeave,CursorMovedI * :call airline#update_tabline() + autocmd InsertEnter,InsertLeave,CursorMovedI * call airline#update_tabline() endif if exists("##ModeChanged") - autocmd ModeChanged * :call airline#update_tabline() + autocmd ModeChanged * call airline#update_tabline() endif augroup END if !airline#util#stl_disabled(winnr()) if &laststatus < 2 - let _scroll=&scroll + let scroll_bak = &scroll if !get(g:, 'airline_statusline_ontop', 0) set laststatus=2 endif - if &scroll != _scroll - let &scroll = _scroll - endif + let &scroll = scroll_bak endif endif - if airline#util#has_multiline() && &statuslineopt !~ 'maxheight:' + + if airline#util#has_multiline() && &statuslineopt !~# 'maxheight:' set statuslineopt+=maxheight:2 endif + if s:airline_initialized call s:on_window_changed('Init') endif @@ -222,11 +230,11 @@ function! s:airline_theme(...) if a:0 try let theme = a:1 - if theme is# 'random' + if theme is# 'random' let theme = s:random_theme() endif call airline#switch_theme(theme) - catch " discard error + catch endtry if a:1 is# 'random' echo g:airline_theme @@ -238,7 +246,7 @@ endfunction function! s:airline_refresh(...) " a:1, fast refresh, do not reload the theme - let fast=!empty(get(a:000, 0, 0)) + let fast = !empty(get(a:000, 0, 0)) if !exists("#airline") " disabled return @@ -255,10 +263,10 @@ endfunction function! s:FocusGainedHandler(timer) if exists("s:timer") && a:timer == s:timer && exists('#airline') && &eventignore !~? 'focusgained' augroup airline - au FocusGained * call s:on_focus_gained() + autocmd FocusGained * call s:on_focus_gained() augroup END endif -endfu +endfunction function! s:airline_extensions() let loaded = airline#extensions#get_loaded_extensions() @@ -271,20 +279,20 @@ function! s:airline_extensions() echohl Title echo printf("%-15s\t%s\t%s", "Extension", "Extern", "Status") echohl Normal - let set=[] - let not_loaded=[] + let set = [] + let not_loaded = [] for ext in sort(files) " prevent duplicates if index(set + not_loaded, ext) > -1 continue endif - let indx=match(loaded, '^'.ext.'\*\?$') + let indx = match(loaded, '^'.ext.'\*\?$') if indx == -1 call add(not_loaded, ext) continue endif call add(set, ext) - let external=(loaded[indx] =~ '\*$') + let external = (loaded[indx] =~ '\*$') echo printf("%-15s\t%s\tloaded", ext, external) endfor for ext in not_loaded @@ -295,24 +303,21 @@ endfunction function! s:rand(max) abort if exists("*rand") " Needs Vim 8.1.2342 - let number=rand() + let number = rand() elseif has("reltime") - let timerstr=reltimestr(reltime()) - let number=split(timerstr, '\.')[1]+0 - elseif has("win32") && &shell =~ 'cmd' - let number=system("echo %random%")+0 + let timerstr = reltimestr(reltime()) + let number = split(timerstr, '\.')[1] + 0 + elseif has("win32") && &shell =~? 'cmd' + let number = system("echo %random%") + 0 else " best effort, bash and zsh provide $RANDOM - " cmd.exe on windows provides %random%, but expand() - " does not seem to be able to expand this correctly. - " In the worst case, this always returns zero - let number=expand("$RANDOM")+0 + let number = expand("$RANDOM") + 0 endif return number % a:max endfunction function! s:random_theme() abort - let themes=airline#util#themes('') + let themes = airline#util#themes('') return themes[s:rand(len(themes))] endfunction @@ -324,6 +329,7 @@ command! AirlineExtensions call s:airline_extensions() call airline#init#bootstrap() call s:airline_toggle() + if exists("v:vim_did_enter") && v:vim_did_enter call on_window_changed('VimEnter') endif