2020-01-06 10:22:49 +08:00
|
|
|
" MIT License. Copyright (c) 2013-2020 Bailey Ling et al.
|
2013-08-27 10:55:11 +08:00
|
|
|
" vim: et ts=2 sts=2 sw=2
|
|
|
|
|
2016-09-24 08:16:30 +08:00
|
|
|
scriptencoding utf-8
|
|
|
|
|
2013-08-31 05:51:10 +08:00
|
|
|
let s:parts = {}
|
|
|
|
|
2013-09-01 00:07:56 +08:00
|
|
|
" PUBLIC API {{{
|
|
|
|
|
2013-08-31 05:51:10 +08:00
|
|
|
function! airline#parts#define(key, config)
|
|
|
|
let s:parts[a:key] = get(s:parts, a:key, {})
|
2013-09-26 10:13:57 +08:00
|
|
|
if exists('g:airline#init#bootstrapping')
|
2013-09-26 02:48:18 +08:00
|
|
|
call extend(s:parts[a:key], a:config, 'keep')
|
|
|
|
else
|
|
|
|
call extend(s:parts[a:key], a:config, 'force')
|
|
|
|
endif
|
2013-08-31 05:51:10 +08:00
|
|
|
endfunction
|
|
|
|
|
|
|
|
function! airline#parts#define_function(key, name)
|
|
|
|
call airline#parts#define(a:key, { 'function': a:name })
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
function! airline#parts#define_text(key, text)
|
|
|
|
call airline#parts#define(a:key, { 'text': a:text })
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
function! airline#parts#define_raw(key, raw)
|
|
|
|
call airline#parts#define(a:key, { 'raw': a:raw })
|
2013-08-29 07:29:35 +08:00
|
|
|
endfunction
|
|
|
|
|
2013-09-01 00:33:58 +08:00
|
|
|
function! airline#parts#define_minwidth(key, width)
|
|
|
|
call airline#parts#define(a:key, { 'minwidth': a:width })
|
|
|
|
endfunction
|
|
|
|
|
2013-09-09 07:06:57 +08:00
|
|
|
function! airline#parts#define_condition(key, predicate)
|
|
|
|
call airline#parts#define(a:key, { 'condition': a:predicate })
|
|
|
|
endfunction
|
|
|
|
|
2013-09-16 10:52:42 +08:00
|
|
|
function! airline#parts#define_accent(key, accent)
|
|
|
|
call airline#parts#define(a:key, { 'accent': a:accent })
|
|
|
|
endfunction
|
|
|
|
|
2013-08-31 11:35:23 +08:00
|
|
|
function! airline#parts#define_empty(keys)
|
|
|
|
for key in a:keys
|
|
|
|
call airline#parts#define_raw(key, '')
|
|
|
|
endfor
|
|
|
|
endfunction
|
|
|
|
|
2013-08-31 05:51:10 +08:00
|
|
|
function! airline#parts#get(key)
|
|
|
|
return get(s:parts, a:key, {})
|
2013-08-29 07:29:35 +08:00
|
|
|
endfunction
|
|
|
|
|
2013-09-01 00:07:56 +08:00
|
|
|
" }}}
|
2013-08-29 07:29:35 +08:00
|
|
|
|
2013-09-01 00:57:02 +08:00
|
|
|
function! airline#parts#mode()
|
2016-10-21 04:57:26 +08:00
|
|
|
return airline#util#shorten(get(w:, 'airline_current_mode', ''), 79, 1)
|
2013-09-01 00:57:02 +08:00
|
|
|
endfunction
|
|
|
|
|
2015-06-03 02:37:08 +08:00
|
|
|
function! airline#parts#crypt()
|
2015-06-10 00:19:16 +08:00
|
|
|
return g:airline_detect_crypt && exists("+key") && !empty(&key) ? g:airline_symbols.crypt : ''
|
2015-06-03 02:37:08 +08:00
|
|
|
endfunction
|
|
|
|
|
2013-08-28 02:08:50 +08:00
|
|
|
function! airline#parts#paste()
|
2013-08-29 07:29:35 +08:00
|
|
|
return g:airline_detect_paste && &paste ? g:airline_symbols.paste : ''
|
2013-08-27 11:07:14 +08:00
|
|
|
endfunction
|
|
|
|
|
2016-03-22 14:52:04 +08:00
|
|
|
function! airline#parts#spell()
|
2017-08-02 01:25:20 +08:00
|
|
|
let spelllang = g:airline_detect_spelllang ? printf(" [%s]", toupper(substitute(&spelllang, ',', '/', 'g'))) : ''
|
|
|
|
if g:airline_detect_spell && &spell
|
2019-02-04 00:30:55 +08:00
|
|
|
let winwidth = airline#util#winwidth()
|
|
|
|
if winwidth >= 90
|
2017-08-02 01:25:20 +08:00
|
|
|
return g:airline_symbols.spell . spelllang
|
2019-02-04 00:30:55 +08:00
|
|
|
elseif winwidth >= 70
|
2017-08-02 01:25:20 +08:00
|
|
|
return g:airline_symbols.spell
|
|
|
|
else
|
|
|
|
return split(g:airline_symbols.spell, '\zs')[0]
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
return ''
|
2016-03-22 14:52:04 +08:00
|
|
|
endfunction
|
|
|
|
|
2013-08-28 02:08:50 +08:00
|
|
|
function! airline#parts#iminsert()
|
2013-08-27 11:07:14 +08:00
|
|
|
if g:airline_detect_iminsert && &iminsert && exists('b:keymap_name')
|
2013-08-29 07:29:35 +08:00
|
|
|
return toupper(b:keymap_name)
|
2013-08-27 11:07:14 +08:00
|
|
|
endif
|
|
|
|
return ''
|
2013-08-27 10:55:11 +08:00
|
|
|
endfunction
|
|
|
|
|
2013-08-28 02:08:50 +08:00
|
|
|
function! airline#parts#readonly()
|
2018-10-15 20:35:28 +08:00
|
|
|
" only consider regular buffers (e.g. ones that represent actual files,
|
2018-05-11 15:50:13 +08:00
|
|
|
" but not special ones like e.g. NERDTree)
|
2018-05-12 04:22:46 +08:00
|
|
|
if !empty(&buftype) || airline#util#ignore_buf(bufname('%'))
|
2018-05-11 15:50:13 +08:00
|
|
|
return ''
|
|
|
|
endif
|
2017-09-01 15:19:39 +08:00
|
|
|
if &readonly && !filereadable(bufname('%'))
|
2016-02-25 03:40:29 +08:00
|
|
|
return '[noperm]'
|
|
|
|
else
|
|
|
|
return &readonly ? g:airline_symbols.readonly : ''
|
|
|
|
endif
|
2013-08-27 11:34:02 +08:00
|
|
|
endfunction
|
|
|
|
|
2013-09-02 00:07:46 +08:00
|
|
|
function! airline#parts#filetype()
|
2019-02-04 00:30:55 +08:00
|
|
|
return (airline#util#winwidth() < 90 && strlen(&filetype) > 3)
|
|
|
|
\ ? matchstr(&filetype, '...'). (&encoding is? 'utf-8' ? '…' : '>')
|
|
|
|
\ : &filetype
|
2013-09-02 00:07:46 +08:00
|
|
|
endfunction
|
|
|
|
|
2013-09-08 02:14:41 +08:00
|
|
|
function! airline#parts#ffenc()
|
2016-12-14 04:44:57 +08:00
|
|
|
let expected = get(g:, 'airline#parts#ffenc#skip_expected_string', '')
|
|
|
|
let bomb = &l:bomb ? '[BOM]' : ''
|
|
|
|
let ff = strlen(&ff) ? '['.&ff.']' : ''
|
|
|
|
if expected is# &fenc.bomb.ff
|
|
|
|
return ''
|
|
|
|
else
|
|
|
|
return &fenc.bomb.ff
|
|
|
|
endif
|
2013-09-08 02:14:41 +08:00
|
|
|
endfunction
|