96 lines
2.7 KiB
VimL
96 lines
2.7 KiB
VimL
function! dead#statusline#ModeColor() abort
|
||
return get(g:modes, mode(), '%*')[0]
|
||
endfunction
|
||
|
||
function! dead#statusline#CurrentMode() abort
|
||
return get(g:modes, mode(), '-')[1]
|
||
endfunction
|
||
|
||
function! dead#statusline#StatusLine() abort
|
||
let l:statusline=''
|
||
let l:statusline.=dead#statusline#ModeColor()
|
||
let l:statusline.=dead#statusline#CurrentMode()
|
||
let l:statusline.=' %#User9#%p%% = %l:%c'
|
||
let l:statusline.=' %#User8#%{fugitive#head()} '
|
||
let l:statusline.='%= '
|
||
let l:statusline.='%#User7#%{GitStatus()} '
|
||
let l:statusline.='%#User9#%m %f'
|
||
let l:statusline.='%{dead#statusline#LinePasteMode()}'
|
||
return l:statusline
|
||
endfunction
|
||
|
||
function! dead#statusline#StatusLineNC() abort
|
||
let l:statusline=''
|
||
let l:statusline.='%#User1#'
|
||
let l:statusline.='%m'
|
||
let l:statusline.='%='
|
||
let l:statusline.='%F'
|
||
return l:statusline
|
||
endfunction
|
||
|
||
function! dead#statusline#HelpStatusLine() abort
|
||
let l:statusline=''
|
||
let l:statusline.='%#User1#'
|
||
let l:statusline.='%f'
|
||
let l:statusline.='%='
|
||
let l:statusline.='%h'
|
||
return l:statusline
|
||
endfunction
|
||
|
||
function! dead#statusline#UpdateInactiveWindows()
|
||
for winnum in range(1, winnr('$'))
|
||
if winnum != winnr()
|
||
call setwinvar(winnum, '&statusline', '%!dead#statusline#StatusLineNC()')
|
||
endif
|
||
endfor
|
||
endfunction
|
||
|
||
function! dead#statusline#LinePasteMode() abort
|
||
let paste_status = &paste
|
||
if paste_status == 1
|
||
return '[paste]'
|
||
else
|
||
return ''
|
||
endif
|
||
endfunction
|
||
|
||
function! dead#statusline#RefreshStatusLine(mode)
|
||
if (a:mode ==? 'active' && &filetype !=? 'help')
|
||
setlocal statusline=%!dead#statusline#StatusLine()
|
||
else
|
||
setlocal statusline=%!dead#statusline#StatusLineNC()
|
||
endif
|
||
if &filetype ==? 'help'
|
||
setlocal statusline=%!dead#statusline#HelpStatusLine()
|
||
endif
|
||
endfunction
|
||
|
||
function! GitStatus() abort
|
||
if !get(g:, 'gitgutter_enabled', 0) || empty(FugitiveHead())
|
||
return ''
|
||
endif
|
||
return join(filter(map(['A','M','D'], {i,v -> v.': '.GitGutterGetHunkSummary()[i]}), 'v:val[-1:]'), ' ')
|
||
endfunction
|
||
|
||
let g:modes={
|
||
\ 'n' : ['%3*','NORMAL'],
|
||
\ 'no' : ['%3*','OPERATOR PENDING'],
|
||
\ 'v' : ['%5*','VISUAL'],
|
||
\ 'V' : ['%5*','V·LINE'],
|
||
\ '' : ['%5*','V·BLOCK'],
|
||
\ 's' : ['%7*','SELECT'],
|
||
\ 'S' : ['%7*','S·LINE'],
|
||
\ '' : ['%7*','S·BLOCK'],
|
||
\ 'i' : ['%4*','INSERT'],
|
||
\ 'R' : ['%2*','REPLACE'],
|
||
\ 'Rv' : ['%2*','V·REPLACE'],
|
||
\ 'c' : ['%6*','COMMAND'],
|
||
\ 'cv' : ['%6*','VIM EX'],
|
||
\ 'ce' : ['%6*','EX'],
|
||
\ 'r' : ['%1*','PROMPT'],
|
||
\ 'rm' : ['%1*','MORE'],
|
||
\ 'r?' : ['%1*','CONFIRM'],
|
||
\ '!' : ['%*1','SHELL'],
|
||
\ 't' : ['%*1','TERMINAL'],
|
||
\}
|