mirror of
https://github.com/vim-airline/vim-airline.git
synced 2024-11-24 10:45:21 +08:00
979c81c59f
The quickfix title often has useful information about how it was invoked. Include it in the statusline.
215 lines
6.5 KiB
VimL
Executable File
215 lines
6.5 KiB
VimL
Executable File
" MIT License. Copyright (c) 2013 Bailey Ling.
|
|
" vim: et ts=2 sts=2 sw=2
|
|
|
|
let s:ext = {}
|
|
let s:ext._theme_funcrefs = []
|
|
|
|
function! s:ext.add_statusline_func(name) dict
|
|
call airline#add_statusline_func(a:name)
|
|
endfunction
|
|
function! s:ext.add_statusline_funcref(function) dict
|
|
call airline#add_statusline_funcref(a:function)
|
|
endfunction
|
|
function! s:ext.add_inactive_statusline_func(name) dict
|
|
call airline#add_inactive_statusline_func(a:name)
|
|
endfunction
|
|
function! s:ext.add_theme_func(name) dict
|
|
call add(self._theme_funcrefs, function(a:name))
|
|
endfunction
|
|
|
|
let s:script_path = tolower(resolve(expand('<sfile>:p:h')))
|
|
|
|
let s:filetype_overrides = {
|
|
\ 'netrw': [ 'netrw', '%f' ],
|
|
\ 'nerdtree': [ 'NERD', '' ],
|
|
\ 'gundo': [ 'Gundo', '' ],
|
|
\ 'diff': [ 'diff', '' ],
|
|
\ 'vimfiler': [ 'vimfiler', '%{vimfiler#get_status_string()}' ],
|
|
\ 'minibufexpl': [ 'MiniBufExplorer', '' ],
|
|
\ 'startify': [ 'startify', '' ],
|
|
\ }
|
|
|
|
let s:filetype_regex_overrides = {}
|
|
|
|
function! s:check_defined_section(name)
|
|
if !exists('w:airline_section_{a:name}')
|
|
let w:airline_section_{a:name} = g:airline_section_{a:name}
|
|
endif
|
|
endfunction
|
|
|
|
function! airline#extensions#append_to_section(name, value)
|
|
call <sid>check_defined_section(a:name)
|
|
let w:airline_section_{a:name} .= a:value
|
|
endfunction
|
|
|
|
function! airline#extensions#prepend_to_section(name, value)
|
|
call <sid>check_defined_section(a:name)
|
|
let w:airline_section_{a:name} = a:value . w:airline_section_{a:name}
|
|
endfunction
|
|
|
|
function! airline#extensions#apply_left_override(section1, section2)
|
|
let w:airline_section_a = a:section1
|
|
let w:airline_section_b = a:section2
|
|
let w:airline_section_c = ''
|
|
let w:airline_render_left = 1
|
|
let w:airline_render_right = 0
|
|
endfunction
|
|
|
|
let s:active_winnr = -1
|
|
function! airline#extensions#apply(...)
|
|
if s:is_excluded_window()
|
|
return -1
|
|
endif
|
|
|
|
let s:active_winnr = winnr()
|
|
|
|
if &buftype == 'quickfix'
|
|
let w:airline_section_a = '%q'
|
|
let w:airline_section_b = '%{w:quickfix_title}'
|
|
let w:airline_section_c = ''
|
|
let w:airline_section_x = ''
|
|
elseif &buftype == 'help'
|
|
call airline#extensions#apply_left_override('Help', '%f')
|
|
let w:airline_section_x = ''
|
|
let w:airline_section_y = ''
|
|
let w:airline_render_right = 1
|
|
endif
|
|
|
|
if &previewwindow
|
|
let w:airline_section_a = 'Preview'
|
|
let w:airline_section_b = ''
|
|
let w:airline_section_c = bufname(winbufnr(winnr()))
|
|
endif
|
|
|
|
if has_key(s:filetype_overrides, &ft)
|
|
let args = s:filetype_overrides[&ft]
|
|
call airline#extensions#apply_left_override(args[0], args[1])
|
|
endif
|
|
|
|
for item in items(s:filetype_regex_overrides)
|
|
if match(&ft, item[0]) >= 0
|
|
call airline#extensions#apply_left_override(item[1][0], item[1][1])
|
|
endif
|
|
endfor
|
|
endfunction
|
|
|
|
function! s:is_excluded_window()
|
|
for matchft in g:airline_exclude_filetypes
|
|
if matchft ==# &ft
|
|
return 1
|
|
endif
|
|
endfor
|
|
|
|
for matchw in g:airline_exclude_filenames
|
|
if matchstr(expand('%'), matchw) ==# matchw
|
|
return 1
|
|
endif
|
|
endfor
|
|
|
|
if g:airline_exclude_preview && &previewwindow
|
|
return 1
|
|
endif
|
|
|
|
return 0
|
|
endfunction
|
|
|
|
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()
|
|
" non-trivial number of external plugins use eventignore=all, so we need to account for that
|
|
autocmd CursorMoved * call <sid>sync_active_winnr()
|
|
|
|
if get(g:, 'loaded_unite', 0)
|
|
call airline#extensions#unite#init(s:ext)
|
|
endif
|
|
|
|
if get(g:, 'loaded_vimfiler', 0)
|
|
let g:vimfiler_force_overwrite_statusline = 0
|
|
endif
|
|
|
|
if get(g:, 'loaded_ctrlp', 0)
|
|
call airline#extensions#ctrlp#init(s:ext)
|
|
endif
|
|
|
|
if get(g:, 'command_t_loaded', 0)
|
|
call airline#extensions#commandt#init(s:ext)
|
|
endif
|
|
|
|
if exists(':UndotreeToggle')
|
|
call airline#extensions#undotree#init(s:ext)
|
|
endif
|
|
|
|
if (get(g:, 'airline#extensions#hunks#enabled', 1) && get(g:, 'airline_enable_hunks', 1))
|
|
\ && (exists('g:loaded_signify') || exists('g:loaded_gitgutter'))
|
|
call airline#extensions#hunks#init(s:ext)
|
|
endif
|
|
|
|
if (get(g:, 'airline#extensions#tagbar#enabled', 1) && get(g:, 'airline_enable_tagbar', 1))
|
|
\ && exists(':TagbarToggle')
|
|
call airline#extensions#tagbar#init(s:ext)
|
|
endif
|
|
|
|
if (get(g:, 'airline#extensions#csv#enabled', 1) && get(g:, 'airline_enable_csv', 1))
|
|
\ && (get(g:, 'loaded_csv', 0) || exists(':Table'))
|
|
call airline#extensions#csv#init(s:ext)
|
|
endif
|
|
|
|
if exists(':VimShell')
|
|
let s:filetype_overrides['vimshell'] = ['vimshell','%{vimshell#get_status_string()}']
|
|
let s:filetype_regex_overrides['^int-'] = ['vimshell','%{substitute(&ft, "int-", "", "")}']
|
|
endif
|
|
|
|
if (get(g:, 'airline#extensions#branch#enabled', 1) && get(g:, 'airline_enable_branch', 1))
|
|
\ && (get(g:, 'loaded_fugitive', 0) || get(g:, 'loaded_lawrencium', 0))
|
|
call airline#extensions#branch#init(s:ext)
|
|
endif
|
|
|
|
if (get(g:, 'airline#extensions#bufferline#enabled', 1) && get(g:, 'airline_enable_bufferline', 1))
|
|
\ && exists('*bufferline#get_status_string')
|
|
call airline#extensions#bufferline#init(s:ext)
|
|
endif
|
|
|
|
if get(g:, 'virtualenv_loaded', 0) && get(g:, 'airline#extensions#virtualenv#enabled', 1)
|
|
call airline#extensions#virtualenv#init(s:ext)
|
|
endif
|
|
|
|
if (get(g:, 'airline#extensions#syntastic#enabled', 1) && get(g:, 'airline_enable_syntastic', 1))
|
|
\ && exists(':SyntasticCheck')
|
|
call airline#extensions#syntastic#init(s:ext)
|
|
endif
|
|
|
|
if (get(g:, 'airline#extensions#whitespace#enabled', 1) && get(g:, 'airline_detect_whitespace', 1))
|
|
call airline#extensions#whitespace#init(s:ext)
|
|
endif
|
|
|
|
if get(g:, 'airline#extensions#tabline#enabled', 0)
|
|
call airline#extensions#tabline#init(s:ext)
|
|
endif
|
|
|
|
" load all other extensions not part of the default distribution
|
|
for file in split(globpath(&rtp, "autoload/airline/extensions/*.vim"), "\n")
|
|
" we have to check both resolved and unresolved paths, since it's possible
|
|
" that they might not get resolved properly (see #187)
|
|
if stridx(tolower(resolve(fnamemodify(file, ':p'))), s:script_path) < 0
|
|
\ && stridx(tolower(fnamemodify(file, ':p')), s:script_path) < 0
|
|
let name = fnamemodify(file, ':t:r')
|
|
if !get(g:, 'airline#extensions#'.name.'#enabled', 1)
|
|
continue
|
|
endif
|
|
try
|
|
call airline#extensions#{name}#init(s:ext)
|
|
catch
|
|
endtry
|
|
endif
|
|
endfor
|
|
endfunction
|
|
|