" #statusline format " isactive = 0 when inactive, 1 otherwise " get status line function! GetStatus(isactive) " let l:linter = ale#statusline#Count(bufnr('')) let l:divider = '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >' let l:separator = '%#StatusLineSeparator# ' let l:normal = '%#StatusLineNormal#' let l:active = '%#StatusLineActive#' let l:bracket_open = '%#CRNoiseDark#(' let l:bracket_close = '%#CRNoiseDark#) ' let l:statusline = '' " let l:statusline = '%#CRNoise#b%#CRNoiseDark#:%#CRNoiseBright#%n ' " let l:curbuf = bufnr('') " let l:statusline .= '%#CRNormal#' . l:curbuf . ': ' . &buftype . ' ' " file percentage let l:statusline.='%#FoldColumn#: %#InterfaceNormal# %P%* ' if a:isactive 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" " file info 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} ' else let l:statusline.=l:separator endif " current register if a:isactive let l:statusline.=l:separator . l:active let l:statusline.=' %#StatusLineActiveQuotes#"' . l:active . '%{v:register}%#StatusLineActiveQuotes#" ' endif " session status if a:isactive let l:statusline.=l:separator . l:active let l:statusline.=" %{ObsessionStatus(fnamemodify(v:this_session,':t'),'---')} %*" let l:statusline.=l:separator . l:active endif " right/left divider " modified version 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 let l:statusline.= l:separator . '%*%=' " modified flag " let l:statusline.='%#StatusLineMod#%M' . l:separator . '%*' " path/filename.extension if a:isactive let l:statusline.='%#StatusLineDirActive# ' let l:statusline.="%{expand('%:p:h:t')}/" let l:statusline.='%#StatusLineFileActive#' let l:statusline.="%{expand('%:t:r')}" let l:statusline.='%#StatusLineDotActive#' let l:statusline.="%{strlen(expand('%:e'))?'.':''}" let l:statusline.='%#StatusLineExtActive#' let l:statusline.="%{strlen(expand('%:e'))?expand('%:e'):expand('%:e')}" let l:statusline.=' %*' else let l:statusline.='%#StatusLineDir# ' let l:statusline.="%{expand('%:p:h')}/" let l:statusline.='%#StatusLineFile#' let l:statusline.="%{expand('%:t:r')}" let l:statusline.='%#StatusLineDot#' let l:statusline.="%{strlen(expand('%:e'))?'.':''}" let l:statusline.='%#StatusLineExt#' let l:statusline.="%{strlen(expand('%:e'))?expand('%:e'):expand('%:e')}" let l:statusline.=' %*' endif let l:statusline .= '%#CRNormal#%r' " TODO color " linter status " " let l:statusline.= "%{LinterStatus()} " if a:isactive " errors let l:statusline .= " %#CRNoiseDark#%{(GetLinterStatus('error') == 0?'-':'')}" let l:statusline .= "%#InterfaceSignError#%{(GetLinterStatus('error') == 0?'':GetLinterStatus('error'))}" " style errors let l:statusline .= '%#CRNoiseDarker#|' let l:statusline .= "%#CRNoiseDark#%{(GetLinterStatus('style_error') == 0?'-':'')}" let l:statusline .= "%#InterfaceSignErrorDark#%{(GetLinterStatus('style_error') == 0?'':GetLinterStatus('style_error'))} " " warnings let l:statusline .= "%#CRNoiseDark#%{(GetLinterStatus('warning') == 0?'-':'')}" let l:statusline .= "%#InterfaceSignWarning#%{(GetLinterStatus('warning') == 0?'':GetLinterStatus('warning'))}" " style warnings let l:statusline .= '%#CRNoiseDarker#|' let l:statusline .= "%#CRNoiseDark#%{(GetLinterStatus('style_warning') == 0?'-':'')}" let l:statusline .= "%#InterfaceSignWarningDark#%{(GetLinterStatus('style_warning') == 0?'':GetLinterStatus('style_warning'))} " " info let l:statusline .= "%#CRNoiseDark#%{(GetLinterStatus('info') == 0?'-':'')}" let l:statusline .= "%#CRNoiseRed#%{(GetLinterStatus('info') == 0?'':GetLinterStatus('info'))}" else " errors let l:statusline .= " %#CRNoiseDarker#%{(GetLinterStatus('error') == 0?'-':'')}" let l:statusline .= "%#CRNoiseBright#%{(GetLinterStatus('error') == 0?'':GetLinterStatus('error'))}" " style errors let l:statusline .= '%#CRNoiseDarker#|' let l:statusline .= "%{(GetLinterStatus('style_error') == 0?'-':'')}" let l:statusline .= "%#CRNoiseBright#%{(GetLinterStatus('style_error') == 0?'':GetLinterStatus('style_error'))} " " warnings let l:statusline .= "%#CRNoiseDarker#%{(GetLinterStatus('warning') == 0?'-':'')}" let l:statusline .= "%#CRNoise#%{(GetLinterStatus('warning') == 0?'':GetLinterStatus('warning'))}" " style warnings let l:statusline .= '%#CRNoiseDarker#|' let l:statusline .= "%{(GetLinterStatus('style_warning') == 0?'-':'')}" let l:statusline .= "%#CRNoise#%{(GetLinterStatus('style_warning') == 0?'':GetLinterStatus('style_warning'))} " " info let l:statusline .= "%#CRNoiseDarker#%{GetLinterStatus('info') == 0 ? '-' : GetLinterStatus('info')}" endif return l:statusline endfunction " status line autocommands augroup status autocmd! autocmd 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 function! LinterStatus() abort "{{{ let l:counts = ale#statusline#Count(bufnr('')) let l:all_errors = l:counts.error + l:counts.style_error let l:all_non_errors = l:counts.total - l:all_errors return l:counts.total == 0 ? 'OK' : printf('%dW %dE', l:all_non_errors, l:all_errors) endfunction "}}} " vim: foldmethod=marker