2016-01-15 10:38:38 +08:00
|
|
|
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
|
2013-08-20 08:13:29 +08:00
|
|
|
" vim: et ts=2 sts=2 sw=2
|
2013-08-03 01:56:12 +08:00
|
|
|
|
2013-08-06 10:44:34 +08:00
|
|
|
let s:ext = {}
|
2013-09-02 07:39:06 +08:00
|
|
|
let s:ext._theme_funcrefs = []
|
|
|
|
|
2013-08-24 05:22:20 +08:00
|
|
|
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)
|
2013-08-06 10:44:34 +08:00
|
|
|
endfunction
|
2013-08-24 21:31:30 +08:00
|
|
|
function! s:ext.add_inactive_statusline_func(name) dict
|
|
|
|
call airline#add_inactive_statusline_func(a:name)
|
|
|
|
endfunction
|
2013-09-02 07:39:06 +08:00
|
|
|
function! s:ext.add_theme_func(name) dict
|
|
|
|
call add(self._theme_funcrefs, function(a:name))
|
|
|
|
endfunction
|
2013-08-06 10:44:34 +08:00
|
|
|
|
2013-09-03 23:04:17 +08:00
|
|
|
let s:script_path = tolower(resolve(expand('<sfile>:p:h')))
|
2013-08-22 12:19:56 +08:00
|
|
|
|
2013-08-06 11:56:20 +08:00
|
|
|
let s:filetype_overrides = {
|
|
|
|
\ 'nerdtree': [ 'NERD', '' ],
|
|
|
|
\ 'gundo': [ 'Gundo', '' ],
|
|
|
|
\ 'vimfiler': [ 'vimfiler', '%{vimfiler#get_status_string()}' ],
|
|
|
|
\ 'minibufexpl': [ 'MiniBufExplorer', '' ],
|
|
|
|
\ 'startify': [ 'startify', '' ],
|
2014-11-25 23:49:43 +08:00
|
|
|
\ 'vim-plug': [ 'Plugins', '' ],
|
2013-08-06 11:56:20 +08:00
|
|
|
\ }
|
|
|
|
|
2013-08-12 09:13:18 +08:00
|
|
|
let s:filetype_regex_overrides = {}
|
|
|
|
|
2013-08-25 23:39:11 +08:00
|
|
|
function! s:check_defined_section(name)
|
|
|
|
if !exists('w:airline_section_{a:name}')
|
2013-08-28 10:36:12 +08:00
|
|
|
let w:airline_section_{a:name} = g:airline_section_{a:name}
|
2013-08-25 23:39:11 +08:00
|
|
|
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
|
|
|
|
|
2013-07-26 05:54:49 +08:00
|
|
|
function! airline#extensions#apply_left_override(section1, section2)
|
2013-07-09 10:52:07 +08:00
|
|
|
let w:airline_section_a = a:section1
|
|
|
|
let w:airline_section_b = a:section2
|
2013-09-23 04:19:15 +08:00
|
|
|
let w:airline_section_c = airline#section#create(['readonly'])
|
2013-08-11 00:05:49 +08:00
|
|
|
let w:airline_render_left = 1
|
|
|
|
let w:airline_render_right = 0
|
2013-07-09 10:52:07 +08:00
|
|
|
endfunction
|
|
|
|
|
2013-08-06 11:34:45 +08:00
|
|
|
let s:active_winnr = -1
|
2013-08-31 23:55:00 +08:00
|
|
|
function! airline#extensions#apply(...)
|
2013-09-23 07:13:08 +08:00
|
|
|
let s:active_winnr = winnr()
|
|
|
|
|
2013-08-25 11:09:12 +08:00
|
|
|
if s:is_excluded_window()
|
2013-08-22 11:25:22 +08:00
|
|
|
return -1
|
|
|
|
endif
|
|
|
|
|
2013-10-22 01:22:07 +08:00
|
|
|
if &buftype == 'help'
|
2013-08-11 00:05:49 +08:00
|
|
|
call airline#extensions#apply_left_override('Help', '%f')
|
2013-07-26 20:12:39 +08:00
|
|
|
let w:airline_section_x = ''
|
|
|
|
let w:airline_section_y = ''
|
2013-08-11 00:05:49 +08:00
|
|
|
let w:airline_render_right = 1
|
2013-07-25 20:00:17 +08:00
|
|
|
endif
|
|
|
|
|
|
|
|
if &previewwindow
|
|
|
|
let w:airline_section_a = 'Preview'
|
|
|
|
let w:airline_section_b = ''
|
|
|
|
let w:airline_section_c = bufname(winbufnr(winnr()))
|
|
|
|
endif
|
|
|
|
|
2013-08-06 11:56:20 +08:00
|
|
|
if has_key(s:filetype_overrides, &ft)
|
|
|
|
let args = s:filetype_overrides[&ft]
|
|
|
|
call airline#extensions#apply_left_override(args[0], args[1])
|
2013-07-09 08:51:33 +08:00
|
|
|
endif
|
2013-08-12 09:13:18 +08:00
|
|
|
|
|
|
|
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
|
2013-07-26 06:29:18 +08:00
|
|
|
endfunction
|
|
|
|
|
2013-08-25 11:09:12 +08:00
|
|
|
function! s:is_excluded_window()
|
2013-07-26 06:29:18 +08:00
|
|
|
for matchft in g:airline_exclude_filetypes
|
|
|
|
if matchft ==# &ft
|
|
|
|
return 1
|
|
|
|
endif
|
|
|
|
endfor
|
2013-07-25 20:00:17 +08:00
|
|
|
|
2013-07-26 06:29:18 +08:00
|
|
|
for matchw in g:airline_exclude_filenames
|
|
|
|
if matchstr(expand('%'), matchw) ==# matchw
|
|
|
|
return 1
|
|
|
|
endif
|
2013-07-25 20:00:17 +08:00
|
|
|
endfor
|
2013-07-26 06:29:18 +08:00
|
|
|
|
|
|
|
if g:airline_exclude_preview && &previewwindow
|
|
|
|
return 1
|
|
|
|
endif
|
|
|
|
|
|
|
|
return 0
|
2013-07-09 08:51:33 +08:00
|
|
|
endfunction
|
2013-07-09 21:48:57 +08:00
|
|
|
|
2013-07-27 22:02:43 +08:00
|
|
|
function! airline#extensions#load_theme()
|
2013-09-02 07:39:06 +08:00
|
|
|
call airline#util#exec_funcrefs(s:ext._theme_funcrefs, g:airline#themes#{g:airline_theme}#palette)
|
2013-07-27 22:02:43 +08:00
|
|
|
endfunction
|
|
|
|
|
2013-08-06 11:34:45 +08:00
|
|
|
function! s:sync_active_winnr()
|
2013-08-16 04:05:12 +08:00
|
|
|
if exists('#airline') && winnr() != s:active_winnr
|
2013-08-06 11:34:45 +08:00
|
|
|
call airline#update_statusline()
|
|
|
|
endif
|
|
|
|
endfunction
|
|
|
|
|
2013-07-09 21:48:57 +08:00
|
|
|
function! airline#extensions#load()
|
2013-08-06 11:34:45 +08:00
|
|
|
" non-trivial number of external plugins use eventignore=all, so we need to account for that
|
|
|
|
autocmd CursorMoved * call <sid>sync_active_winnr()
|
|
|
|
|
2015-03-01 06:40:23 +08:00
|
|
|
if exists('g:airline_extensions')
|
|
|
|
for ext in g:airline_extensions
|
|
|
|
call airline#extensions#{ext}#init(s:ext)
|
|
|
|
endfor
|
|
|
|
return
|
|
|
|
endif
|
|
|
|
|
2013-10-22 01:22:07 +08:00
|
|
|
call airline#extensions#quickfix#init(s:ext)
|
|
|
|
|
2013-07-27 22:02:43 +08:00
|
|
|
if get(g:, 'loaded_unite', 0)
|
2013-08-24 12:08:57 +08:00
|
|
|
call airline#extensions#unite#init(s:ext)
|
2013-07-27 22:02:43 +08:00
|
|
|
endif
|
2013-08-06 11:34:45 +08:00
|
|
|
|
2014-01-20 03:06:55 +08:00
|
|
|
if exists(':NetrwSettings')
|
|
|
|
call airline#extensions#netrw#init(s:ext)
|
|
|
|
endif
|
|
|
|
|
2016-01-30 13:32:29 +08:00
|
|
|
if get(g:, 'airline#extensions#ycm#enabled', 0)
|
2016-01-29 00:38:59 +08:00
|
|
|
call airline#extensions#ycm#init(s:ext)
|
|
|
|
endif
|
2015-12-26 13:10:55 +08:00
|
|
|
|
2013-07-27 22:02:43 +08:00
|
|
|
if get(g:, 'loaded_vimfiler', 0)
|
|
|
|
let g:vimfiler_force_overwrite_statusline = 0
|
|
|
|
endif
|
2013-07-09 21:48:57 +08:00
|
|
|
|
2013-07-22 09:29:31 +08:00
|
|
|
if get(g:, 'loaded_ctrlp', 0)
|
2013-08-06 11:34:45 +08:00
|
|
|
call airline#extensions#ctrlp#init(s:ext)
|
2013-07-09 21:48:57 +08:00
|
|
|
endif
|
|
|
|
|
2016-01-12 20:47:44 +08:00
|
|
|
if get(g:, 'CtrlSpaceLoaded', 0)
|
2015-02-28 10:44:35 +08:00
|
|
|
call airline#extensions#ctrlspace#init(s:ext)
|
|
|
|
endif
|
|
|
|
|
2013-07-26 05:54:49 +08:00
|
|
|
if get(g:, 'command_t_loaded', 0)
|
2013-08-06 10:56:30 +08:00
|
|
|
call airline#extensions#commandt#init(s:ext)
|
2013-07-26 05:54:49 +08:00
|
|
|
endif
|
|
|
|
|
2013-08-19 02:50:22 +08:00
|
|
|
if exists(':UndotreeToggle')
|
|
|
|
call airline#extensions#undotree#init(s:ext)
|
|
|
|
endif
|
|
|
|
|
2016-01-28 22:54:14 +08:00
|
|
|
if get(g:, 'airline#extensions#hunks#enabled', 1)
|
2015-04-17 02:26:42 +08:00
|
|
|
\ && (exists('g:loaded_signify') || exists('g:loaded_gitgutter') || exists('g:loaded_changes') || exists('g:loaded_quickfixsigns'))
|
2013-08-19 05:02:33 +08:00
|
|
|
call airline#extensions#hunks#init(s:ext)
|
|
|
|
endif
|
|
|
|
|
2016-01-28 22:54:14 +08:00
|
|
|
if get(g:, 'airline#extensions#tagbar#enabled', 1)
|
2013-08-20 08:13:29 +08:00
|
|
|
\ && exists(':TagbarToggle')
|
2013-08-06 11:16:49 +08:00
|
|
|
call airline#extensions#tagbar#init(s:ext)
|
2013-07-21 10:31:05 +08:00
|
|
|
endif
|
2013-07-26 06:29:18 +08:00
|
|
|
|
2016-01-28 22:54:14 +08:00
|
|
|
if get(g:, 'airline#extensions#csv#enabled', 1)
|
2013-08-20 08:13:29 +08:00
|
|
|
\ && (get(g:, 'loaded_csv', 0) || exists(':Table'))
|
2013-08-14 09:47:08 +08:00
|
|
|
call airline#extensions#csv#init(s:ext)
|
2013-08-14 05:27:21 +08:00
|
|
|
endif
|
|
|
|
|
2013-08-12 09:13:18 +08:00
|
|
|
if exists(':VimShell')
|
|
|
|
let s:filetype_overrides['vimshell'] = ['vimshell','%{vimshell#get_status_string()}']
|
|
|
|
let s:filetype_regex_overrides['^int-'] = ['vimshell','%{substitute(&ft, "int-", "", "")}']
|
|
|
|
endif
|
|
|
|
|
2016-01-28 22:54:14 +08:00
|
|
|
if get(g:, 'airline#extensions#branch#enabled', 1)
|
2014-02-26 05:43:19 +08:00
|
|
|
\ && (exists('*fugitive#head') || exists('*lawrencium#statusline') ||
|
|
|
|
\ (get(g:, 'airline#extensions#branch#use_vcscommand', 0) && exists('*VCSCommandGetStatusLine')))
|
2013-08-06 11:07:01 +08:00
|
|
|
call airline#extensions#branch#init(s:ext)
|
|
|
|
endif
|
|
|
|
|
2016-01-28 22:54:14 +08:00
|
|
|
if get(g:, 'airline#extensions#bufferline#enabled', 1)
|
2013-08-20 08:13:29 +08:00
|
|
|
\ && exists('*bufferline#get_status_string')
|
2013-08-06 10:44:34 +08:00
|
|
|
call airline#extensions#bufferline#init(s:ext)
|
2013-07-21 10:31:05 +08:00
|
|
|
endif
|
2013-08-03 22:59:34 +08:00
|
|
|
|
2016-01-21 06:21:20 +08:00
|
|
|
if (get(g:, 'airline#extensions#virtualenv#enabled', 1) && (exists(':VirtualEnvList') || isdirectory($VIRTUAL_ENV)))
|
2013-08-25 04:49:54 +08:00
|
|
|
call airline#extensions#virtualenv#init(s:ext)
|
|
|
|
endif
|
|
|
|
|
2013-10-02 02:25:43 +08:00
|
|
|
if (get(g:, 'airline#extensions#eclim#enabled', 1) && exists(':ProjectCreate'))
|
2013-10-01 12:42:42 +08:00
|
|
|
call airline#extensions#eclim#init(s:ext)
|
|
|
|
endif
|
|
|
|
|
2016-01-28 22:54:14 +08:00
|
|
|
if get(g:, 'airline#extensions#syntastic#enabled', 1)
|
2013-10-02 02:25:43 +08:00
|
|
|
\ && exists(':SyntasticCheck')
|
2013-08-28 07:38:34 +08:00
|
|
|
call airline#extensions#syntastic#init(s:ext)
|
2013-08-07 08:17:33 +08:00
|
|
|
endif
|
|
|
|
|
2016-01-28 22:54:14 +08:00
|
|
|
if get(g:, 'airline#extensions#whitespace#enabled', 1)
|
2013-08-28 21:51:54 +08:00
|
|
|
call airline#extensions#whitespace#init(s:ext)
|
|
|
|
endif
|
|
|
|
|
2015-10-05 22:17:04 +08:00
|
|
|
if get(g:, 'airline#extensions#wordcount#enabled', 1)
|
|
|
|
call airline#extensions#wordcount#init(s:ext)
|
|
|
|
endif
|
|
|
|
|
2013-08-28 21:51:54 +08:00
|
|
|
if get(g:, 'airline#extensions#tabline#enabled', 0)
|
|
|
|
call airline#extensions#tabline#init(s:ext)
|
|
|
|
endif
|
|
|
|
|
2013-11-18 03:15:55 +08:00
|
|
|
if get(g:, 'airline#extensions#tmuxline#enabled', 1) && exists(':Tmuxline')
|
|
|
|
call airline#extensions#tmuxline#init(s:ext)
|
|
|
|
endif
|
|
|
|
|
2014-01-06 01:47:44 +08:00
|
|
|
if get(g:, 'airline#extensions#promptline#enabled', 1) && exists(':PromptlineSnapshot') && len(get(g:, 'airline#extensions#promptline#snapshot_file', ''))
|
|
|
|
call airline#extensions#promptline#init(s:ext)
|
|
|
|
endif
|
|
|
|
|
2014-04-23 06:13:16 +08:00
|
|
|
if get(g:, 'airline#extensions#nrrwrgn#enabled', 1) && exists(':NR') == 2
|
|
|
|
call airline#extensions#nrrwrgn#init(s:ext)
|
|
|
|
endif
|
|
|
|
|
2016-02-06 23:05:29 +08:00
|
|
|
if get(g:, 'airline#extensions#unicode#enabled', 1) && exists(':UnicodeTable') == 2
|
|
|
|
call airline#extensions#unicode#init(s:ext)
|
|
|
|
endif
|
|
|
|
|
2014-07-29 05:56:08 +08:00
|
|
|
if (get(g:, 'airline#extensions#capslock#enabled', 1) && exists('*CapsLockStatusline'))
|
|
|
|
call airline#extensions#capslock#init(s:ext)
|
|
|
|
endif
|
|
|
|
|
2014-09-05 11:02:19 +08:00
|
|
|
if (get(g:, 'airline#extensions#windowswap#enabled', 1) && get(g:, 'loaded_windowswap', 0))
|
|
|
|
call airline#extensions#windowswap#init(s:ext)
|
|
|
|
endif
|
|
|
|
|
2014-04-20 02:38:02 +08:00
|
|
|
if !get(g:, 'airline#extensions#disable_rtp_load', 0)
|
|
|
|
" load all other extensions, which are not part of the default distribution.
|
|
|
|
" (autoload/airline/extensions/*.vim outside of our s:script_path).
|
|
|
|
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
|
2013-08-22 10:49:19 +08:00
|
|
|
endif
|
2014-04-20 02:38:02 +08:00
|
|
|
endfor
|
|
|
|
endif
|
2013-07-09 21:48:57 +08:00
|
|
|
endfunction
|
|
|
|
|