vim/vimrc.d/statusline.vim

190 lines
6.7 KiB
VimL
Raw Normal View History

set statusline=%!GetStatus(1)
2018-04-01 15:07:11 +00:00
" augroups
augroup status "{{{
autocmd!
autocmd WinNew,WinEnter * setlocal statusline=%!GetStatus(1)
autocmd WinLeave * setlocal statusline=%!GetStatus(0)
" autocmd WinNew * setlocal statusline=%!GetStatus(1)
" autocmd InsertChange * setlocal statusline=%!GetStatus(1)
augroup END
"}}}
" functions
2018-03-17 23:42:49 +00:00
2018-03-18 00:24:20 +00:00
function! GetStatus(isactive) "{{{
2018-03-17 23:42:49 +00:00
" let l:linter = ale#statusline#Count(bufnr(''))
let l:divider = '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >'
let l:separator = '%#StatusLineSeparator# '
let l:normal = '%#StatusLineNormal#'
let l:active = '%#StatusLineActive#'
let l:statusline = ''
2018-05-14 09:58:47 +00:00
"buffer number
if a:isactive
let l:statusline .= '%#StatusLineBufferNrActive#'
else
let l:statusline .= '%#StatusLineBufferNr#'
endif
let l:statusline .= ' %n %* '
"}}}
2018-03-17 23:42:49 +00:00
" file percentage
2018-05-14 09:58:47 +00:00
let l:statusline .= '%#FoldColumn# ' "{{{
2018-03-18 00:24:20 +00:00
if a:isactive
2018-03-18 12:00:37 +00:00
let l:statusline .= '%#StatusLinePercentActive#'
2018-03-18 00:24:20 +00:00
else
2018-03-18 12:00:37 +00:00
let l:statusline .= '%#StatusLinePercent#'
2018-03-18 00:24:20 +00:00
endif
2018-03-28 20:02:37 +00:00
let l:statusline .= '%P %* '
"}}}
2018-03-17 23:42:49 +00:00
2018-03-18 00:24:20 +00:00
" non-empty buftype (help, quickfix, etc)
if a:isactive "{{{
2018-03-17 23:42:49 +00:00
let l:statusline .= l:active . "%{&buftype == '' ? '' : ' '}%q%h%w%#StatusLineActiveNoText#"
else
let l:statusline .= l:normal . "%{&buftype == '' ? '' : ' '}%q%h%w%#StatusLineNormalNoText#"
endif
let l:statusline .= "%{&buftype == '' ? '' : ' '}%s"
2018-03-18 00:24:20 +00:00
"}}}
2018-03-17 23:42:49 +00:00
2018-04-17 18:06:55 +00:00
" file info
2018-05-07 22:07:58 +00:00
" if a:isactive == 1 "{{{
" let l:statusline.=l:active
" let l:statusline.=" %{strlen(&ft)?&ft:'none'} "
" " let l:statusline.=l:separator . l:active
" " let l:statusline.=' %{strlen(&fenc)?&fenc:&enc} '
" " let l:statusline.=l:separator . l:active
" " let l:statusline.=' %{&fileformat} '
" " let l:statusline.=l:separator . l:active
" " let l:statusline.=' %{&spelllang} '
" let l:statusline.=l:separator
" endif
2018-04-17 18:06:55 +00:00
"}}}
2018-03-17 23:42:49 +00:00
" right/left divider
2018-03-28 20:02:37 +00:00
let l:statusline.=l:separator "{{{
" modified version
2018-03-17 23:42:49 +00:00
let l:color = 'StatusLineDivMod' . (a:isactive?'Active':'')
let l:statusline .= GetStatusFrag("&modified && mode() != 'i'", l:color, '%<', l:divider)
" unmodified version
let l:color = 'StatusLineDiv' . (a:isactive?'Active':'')
let l:statusline .= GetStatusFrag("!&modified && mode() != 'i'", l:color, '%<', l:divider)
" input mode version
if a:isactive
let l:statusline .= GetStatusFrag("mode() == 'i'", 'StatusLineDivInput', '%<', l:divider)
endif
2018-03-18 00:55:19 +00:00
2018-03-17 23:42:49 +00:00
let l:statusline.= l:separator . '%*%='
2018-03-18 00:55:19 +00:00
if !a:isactive
let l:statusline .= ' '
endif
2018-03-28 20:02:37 +00:00
"}}}
2018-03-18 00:24:20 +00:00
" path/filename.extension
if a:isactive "{{{
let l:statusline.='%#StatusLineDirActive# '
let l:statusline.="%{expand('%:p:h:t')}/"
let l:statusline.='%#StatusLineFileActive#'
2018-03-17 23:42:49 +00:00
2018-03-18 00:24:20 +00:00
let l:statusline.="%{expand('%:t:r')}"
2018-03-17 23:42:49 +00:00
2018-03-18 00:24:20 +00:00
let l:statusline.='%#StatusLineDotActive#'
let l:statusline.="%{strlen(expand('%:e'))?'.':''}"
let l:statusline.='%#StatusLineExtActive#'
2018-03-18 00:55:19 +00:00
let l:statusline.="%{strlen(expand('%:e'))?expand('%:e'):expand('%:e')} "
2018-03-28 20:30:44 +00:00
let l:statusline .= '%#InterfaceSignWarning# %R '
2018-03-18 00:24:20 +00:00
else
let l:statusline.='%#StatusLineDir# '
let l:statusline.="%{fnamemodify(expand('%:p:h'),':~')}/"
2018-03-18 00:24:20 +00:00
let l:statusline.='%#StatusLineFile#'
2018-03-17 23:42:49 +00:00
2018-03-18 00:24:20 +00:00
let l:statusline.="%{expand('%:t:r')}"
2018-03-17 23:42:49 +00:00
2018-03-18 00:24:20 +00:00
let l:statusline.='%#StatusLineDot#'
let l:statusline.="%{strlen(expand('%:e'))?'.':''}"
let l:statusline.='%#StatusLineExt#'
2018-03-18 00:55:19 +00:00
let l:statusline.="%{strlen(expand('%:e'))?expand('%:e'):expand('%:e')} "
2018-03-28 20:30:44 +00:00
let l:statusline .= '%#LinterWarningInactive# %R '
2018-03-18 00:24:20 +00:00
endif
2018-03-28 20:02:37 +00:00
let l:statusline.='%*'
2018-03-18 00:24:20 +00:00
"}}}
2018-03-17 23:42:49 +00:00
" linter status "
2018-03-18 00:24:20 +00:00
if a:isactive "{{{
2018-03-17 23:42:49 +00:00
" errors
2018-03-21 22:32:36 +00:00
let l:statusline .= "%#LinterDashActive#%{(GetLinterStatus('error') == 0?'-':'')}"
let l:statusline .= "%#LinterError#%{(GetLinterStatus('error') == 0?'':GetLinterStatus('error'))}"
2018-03-17 23:42:49 +00:00
" style errors
let l:statusline .= '%#LinterDash#|'
let l:statusline .= "%#LinterDashActive#%{(GetLinterStatus('style_error') == 0?'-':'')}"
let l:statusline .= "%#LinterErrorStyle#%{(GetLinterStatus('style_error') == 0?'':GetLinterStatus('style_error'))} "
2018-03-17 23:42:49 +00:00
" warnings
let l:statusline .= "%#LinterDashActive#%{(GetLinterStatus('warning') == 0?'-':'')}"
let l:statusline .= "%#LinterWarning#%{(GetLinterStatus('warning') == 0?'':GetLinterStatus('warning'))}"
2018-03-17 23:42:49 +00:00
" style warnings
let l:statusline .= '%#LinterDash#|'
let l:statusline .= "%#LinterDashActive#%{(GetLinterStatus('style_warning') == 0?'-':'')}"
let l:statusline .= "%#LinterWarningStyle#%{(GetLinterStatus('style_warning') == 0?'':GetLinterStatus('style_warning'))} "
2018-03-17 23:42:49 +00:00
" info
let l:statusline .= "%#LinterDashActive#%{(GetLinterStatus('info') == 0?'-':'')}"
let l:statusline .= "%#LinterInfo#%{(GetLinterStatus('info') == 0?'':GetLinterStatus('info'))}"
2018-03-17 23:42:49 +00:00
else
" errors
2018-03-21 22:32:36 +00:00
let l:statusline .= "%#LinterDash#%{(GetLinterStatus('error') == 0?'-':'')}"
let l:statusline .= "%#LinterErrorInactive#%{(GetLinterStatus('error') == 0?'':GetLinterStatus('error'))}"
2018-03-17 23:42:49 +00:00
" style errors
let l:statusline .= '%#LinterDash#|'
2018-03-17 23:42:49 +00:00
let l:statusline .= "%{(GetLinterStatus('style_error') == 0?'-':'')}"
let l:statusline .= "%#LinterErrorStyleInactive#%{(GetLinterStatus('style_error') == 0?'':GetLinterStatus('style_error'))} "
2018-03-17 23:42:49 +00:00
" warnings
let l:statusline .= "%#LinterDash#%{(GetLinterStatus('warning') == 0?'-':'')}"
let l:statusline .= "%#LinterWarningInactive#%{(GetLinterStatus('warning') == 0?'':GetLinterStatus('warning'))}"
2018-03-17 23:42:49 +00:00
" style warnings
let l:statusline .= '%#LinterDash#|'
2018-03-17 23:42:49 +00:00
let l:statusline .= "%{(GetLinterStatus('style_warning') == 0?'-':'')}"
let l:statusline .= "%#LinterWarningStyleInactive#%{(GetLinterStatus('style_warning') == 0?'':GetLinterStatus('style_warning'))} "
2018-03-17 23:42:49 +00:00
" info
2018-03-18 17:13:21 +00:00
let l:statusline .= "%#LinterDash#%{GetLinterStatus('info') == 0 ? '-' : GetLinterStatus('info')}"
2018-03-17 23:42:49 +00:00
endif
2018-03-18 00:24:20 +00:00
"}}}
2018-03-17 23:42:49 +00:00
return l:statusline
2018-04-01 15:07:11 +00:00
endfunction
"}}}
2018-04-01 15:07:11 +00:00
function! DoInsertEnter()
set cursorline"{{{
2018-05-10 15:16:49 +00:00
call SetColor('LineNr', '#262626', '', '#cccccc', '', '')
call SetColor('CursorLineNr', '#bcbcbc', '', '#999999', '', 'bold')
2018-04-01 15:07:11 +00:00
endfunction
"}}}
function! DoInsertLeave()
set nocursorline"{{{
2018-05-10 15:16:49 +00:00
call SetColor('LineNr', '#3a3a3a', '', '#999999', '', '')
call SetColor('CursorLineNr', '#767676', '', '#777777', '', 'bold')
2018-04-01 15:07:11 +00:00
endfunction
"}}}
2018-03-17 23:42:49 +00:00
2018-04-01 15:07:11 +00:00
" augroups
2018-03-17 23:42:49 +00:00
2018-04-01 15:07:11 +00:00
augroup statuscursorlines
au!
au InsertEnter * call DoInsertEnter()
au InsertLeave * call DoInsertLeave()
augroup END
2018-03-17 23:42:49 +00:00
" vim: foldmethod=marker