Only display coc#status() in regular active buffer

The statusline is only dynamically updated for the active buffer, thus
when there are multiple splits the statusline for inactive buffers may
include non-updated output of `coc#status()`. This patch adds a boolean
flag to `statusline#generic()` which enables `statusline#active()` and
`statusline#inactive()` to control when `coc#status()` is included in
the statusline.
This commit is contained in:
Kenneth Benzie 2021-07-14 17:33:54 +01:00
parent 0961c13316
commit c9711deade

View File

@ -49,7 +49,7 @@ function! statusline#special(group, name, title)
endfunction endfunction
" Construct a statusline for generic buffer types. " Construct a statusline for generic buffer types.
function! statusline#generic(group, mode) function! statusline#generic(group, mode, coc)
" Display current mode with dynamic highlights. " Display current mode with dynamic highlights.
let l:mode = '%#'.a:group.'# '.a:mode.' ' let l:mode = '%#'.a:group.'# '.a:mode.' '
" Display spell or paste if set with dusk highlights in a group to swallow " Display spell or paste if set with dusk highlights in a group to swallow
@ -64,7 +64,7 @@ function! statusline#generic(group, mode)
let l:state = '%#StatusLineDark#' let l:state = '%#StatusLineDark#'
\.'%{&readonly ? " 🔒" : ""}' \.'%{&readonly ? " 🔒" : ""}'
\.'%{&modifiable ? "" : " ⛔"}' \.'%{&modifiable ? "" : " ⛔"}'
if exists('*coc#status') if a:coc && exists('*coc#status')
" Display coc.nvim status. " Display coc.nvim status.
let l:coc = '%#StatusLineDuskFade#%( %{coc#status()}%)' let l:coc = '%#StatusLineDuskFade#%( %{coc#status()}%)'
else else
@ -108,11 +108,11 @@ function! statusline#active()
if l:mode ==# 'Normal' if l:mode ==# 'Normal'
let l:mode = 'Preview' let l:mode = 'Preview'
endif endif
return statusline#generic('StatusLineLight', l:mode) return statusline#generic('StatusLineLight', l:mode, v:false)
elseif &filetype ==# 'man' elseif &filetype ==# 'man'
return statusline#special('StatusLineDusk', 'Manual', '%f') return statusline#special('StatusLineDusk', 'Manual', '%f')
endif endif
return statusline#generic('StatusLineLight', l:mode) return statusline#generic('StatusLineLight', l:mode, v:true)
endfunction endfunction
" Define inactive statusline, this remains static until the buffer gains " Define inactive statusline, this remains static until the buffer gains
@ -130,11 +130,11 @@ function! statusline#inactive()
elseif &buftype ==# 'terminal' elseif &buftype ==# 'terminal'
let l:statusline = statusline#special('StatusLineDusk', 'Terminal', '%f') let l:statusline = statusline#special('StatusLineDusk', 'Terminal', '%f')
elseif &previewwindow elseif &previewwindow
let l:statusline = statusline#generic('StatusLineDusk', 'Preview') let l:statusline = statusline#generic('StatusLineDusk', 'Preview', v:false)
elseif &filetype ==# 'man' elseif &filetype ==# 'man'
let l:statusline = statusline#special('StatusLineDusk', 'Manual', '%f') let l:statusline = statusline#special('StatusLineDusk', 'Manual', '%f')
else else
let l:statusline = statusline#generic('StatusLineDusk', 'Idle') let l:statusline = statusline#generic('StatusLineDusk', 'Idle', v:false)
endif endif
" Escape spaces and double quotes for use in setlocal. " Escape spaces and double quotes for use in setlocal.
let l:statusline = substitute(l:statusline, '\([ "]\)', '\\\0', 'g') let l:statusline = substitute(l:statusline, '\([ "]\)', '\\\0', 'g')