[nvim] crank up visual customizations of coc.nvim

This commit is contained in:
Dmytro Meleshko 2021-07-02 22:39:21 +03:00
parent 19ff535b2b
commit 71a04af8d7
5 changed files with 146 additions and 6 deletions

View file

@ -0,0 +1,126 @@
if !exists('g:did_coc_loaded')
finish
endif
function! airline#extensions#dotfiles_coclist#init(ext) abort
let g:coc_user_config['list.statusLineSegments'] = v:null
call a:ext.add_statusline_func('airline#extensions#dotfiles_coclist#apply')
call a:ext.add_inactive_statusline_func('airline#extensions#dotfiles_coclist#apply')
call airline#parts#define('dotfiles_coclist_mode', {
\ 'function': 'airline#extensions#dotfiles_coclist#part_mode',
\ 'accent': 'bold',
\ })
call airline#parts#define('dotfiles_coclist_args', {
\ 'function': 'airline#extensions#dotfiles_coclist#part_args',
\ })
call airline#parts#define('dotfiles_coclist_name', {
\ 'function': 'airline#extensions#dotfiles_coclist#part_name',
\ })
call airline#parts#define('dotfiles_coclist_cwd', {
\ 'function': 'airline#extensions#dotfiles_coclist#part_cwd',
\ })
call airline#parts#define('dotfiles_coclist_loading', {
\ 'function': 'airline#extensions#dotfiles_coclist#part_loading',
\ })
call airline#parts#define('dotfiles_coclist_total', {
\ 'function': 'airline#extensions#dotfiles_coclist#part_total',
\ })
" Default airline section setup:
" <https://github.com/vim-airline/vim-airline/blob/49cdcb7b3ea76ee19c737885c0ab19e64e564169/autoload/airline/init.vim#L209-L250>
" Beware that whitespaces in function expansions can cause some weirdness:
" <https://github.com/vim/vim/issues/3898>
let s:section_a = airline#section#create_left(['dotfiles_coclist_mode'])
let s:section_b = airline#section#create(['dotfiles_coclist_name'])
let s:section_c = airline#section#create(['%<', 'dotfiles_coclist_args', ' ', 'dotfiles_coclist_loading'])
let s:section_x = airline#section#create(['dotfiles_coclist_cwd'])
let s:section_y = airline#section#create(['#%L/', 'dotfiles_coclist_total'])
let s:section_z = airline#section#create(['%p%%', 'linenr', 'maxlinenr'])
endfunction
function! airline#extensions#dotfiles_coclist#statusline() abort
let context = { 'winnr': winnr(), 'active': 1, 'bufnr': bufnr() }
let builder = airline#builder#new(context)
call airline#extensions#dotfiles_coclist#apply(builder, context)
return builder.build()
endfunction
function! airline#extensions#dotfiles_coclist#apply(builder, context) abort
if getbufvar(a:context.bufnr, '&filetype', '') !=# 'list' | return 0 | endif
let list_status = getbufvar(a:context.bufnr, 'list_status', 0)
if type(list_status) !=# v:t_dict | return 0 | endif
" How b:list_status is populated:
" <https://github.com/neoclide/coc.nvim/blob/0aa97ad1bbdcc2bb95cf7aabd7818643db1e269d/src/list/session.ts#L417-L433>
" How the list buffer is created:
" <https://github.com/neoclide/coc.nvim/blob/0aa97ad1bbdcc2bb95cf7aabd7818643db1e269d/autoload/coc/list.vim#L82-L100>
" The default statusline:
" <https://github.com/neoclide/coc.nvim/blob/0aa97ad1bbdcc2bb95cf7aabd7818643db1e269d/data/schema.json#L870-L884>
" How airline generates its actual statuslines:
" <https://github.com/vim-airline/vim-airline/blob/49cdcb7b3ea76ee19c737885c0ab19e64e564169/autoload/airline/extensions/default.vim>
" <https://github.com/vim-airline/vim-airline/blob/49cdcb7b3ea76ee19c737885c0ab19e64e564169/autoload/airline/builder.vim>
" <https://github.com/vim-airline/vim-airline/blob/49cdcb7b3ea76ee19c737885c0ab19e64e564169/autoload/airline/section.vim>
let spc = g:airline_symbols.space
if a:context.active || (!a:context.active && !g:airline_inactive_collapse)
call a:builder.add_section('airline_a', s:get_section('a'))
call a:builder.add_section('airline_b', s:get_section('b'))
endif
call a:builder.add_section('airline_c', s:get_section('c'))
call a:builder.split()
call a:builder.add_section('airline_x', s:get_section('x'))
call a:builder.add_section('airline_y', s:get_section('y'))
call a:builder.add_section('airline_z', s:get_section('z'))
return 1
endfunction
" Copied from <https://github.com/vim-airline/vim-airline/blob/49cdcb7b3ea76ee19c737885c0ab19e64e564169/autoload/airline/extensions/default.vim#L7-L14>
let s:section_truncate_width = get(g:, 'airline#extensions#default#section_truncate_width', {
\ 'b': 79,
\ 'x': 60,
\ 'y': 88,
\ 'z': 45,
\ })
function! s:get_section(key) abort
if has_key(s:section_truncate_width, a:key) && airline#util#winwidth() < s:section_truncate_width[a:key]
return ''
endif
let spc = g:airline_symbols.space
let text = s:section_{a:key}
if empty(text) | return '' | endif
return '%(' . spc . text . spc . '%)'
endfunction
" TODO: Is recoloring of the section A based on `b:list_status.mode` possible?
function! airline#extensions#dotfiles_coclist#part_mode() abort
if get(w:, 'airline_active', 1)
" <https://github.com/vim-airline/vim-airline/blob/49cdcb7b3ea76ee19c737885c0ab19e64e564169/autoload/airline/parts.vim#L55-L57>
return airline#util#shorten(get(b:list_status, 'mode', ''), 79, 1)
else
return get(g:airline_mode_map, '__')
else
endfunction
function! airline#extensions#dotfiles_coclist#part_args() abort
return get(b:list_status, 'args', '')
endfunction
function! airline#extensions#dotfiles_coclist#part_name() abort
return get(b:list_status, 'name', '')
endfunction
function! airline#extensions#dotfiles_coclist#part_loading() abort
return get(b:list_status, 'loading', '')
endfunction
function! airline#extensions#dotfiles_coclist#part_total() abort
return get(b:list_status, 'total', '')
endfunction
function! airline#extensions#dotfiles_coclist#part_cwd() abort
return pathshorten(fnamemodify(get(b:list_status, 'cwd', ''), ':~:.'))
endfunction

View file

@ -62,6 +62,7 @@
call s:hi('Title', 0xD, '', '', '') call s:hi('Title', 0xD, '', '', '')
hi! link Directory Title hi! link Directory Title
call s:hi('Conceal', 0xC, '', '', '') call s:hi('Conceal', 0xC, '', '', '')
call s:hi('IndentLine', 0x2, '', '', '')
call s:hi('NonText', 0x3, '', '', '') call s:hi('NonText', 0x3, '', '', '')
hi! link SpecialKey Special hi! link SpecialKey Special
call s:hi('MatchParen', 'fg', 0x3, '', '') call s:hi('MatchParen', 'fg', 0x3, '', '')
@ -107,12 +108,22 @@
call s:hi('WarningMsg', 0x9, '', '', '') call s:hi('WarningMsg', 0x9, '', '', '')
call s:hi('TooLong', 0x8, '', '', '') call s:hi('TooLong', 0x8, '', '', '')
call s:hi('Debug', 0x8, '', '', '') call s:hi('Debug', 0x8, '', '', '')
hi! link CocErrorSign Error
call s:hi('CocErrorSign', 'bg', 0x8, '', '')
call s:hi('CocWarningSign', 'bg', 0xA, '', '') call s:hi('CocWarningSign', 'bg', 0xA, '', '')
call s:hi('CocInfoSign', 'bg', 0xD, '', '') call s:hi('CocInfoSign', 'bg', 0xD, '', '')
hi! link CocHintSign CocInfoSign hi! link CocHintSign CocInfoSign
call s:hi('CocSelectedText', 0xE, 0x1, 'bold', '')
call s:hi('CocCodeLens', 0x4, '', '', '')
call s:hi('CocFadeOut', 0x3, '', '', '') call s:hi('CocFadeOut', 0x3, '', '', '')
call s:hi('CocStrikeThrough', '', '', 'strikethrough', '')
hi! link CocMarkdownLink Underlined hi! link CocMarkdownLink Underlined
hi! link CocDiagnosticsFile Directory
hi! link CocOutlineName NONE
hi! link CocExtensionsLoaded NONE
hi! link CocSymbolsName NONE
hi! link CocOutlineIndentLine IndentLine
hi! link CocSymbolsFile Directory
call s:hi('FoldColumn', 0xC, 0x1, '', '') call s:hi('FoldColumn', 0xC, 0x1, '', '')
call s:hi('Folded', 0x3, 0x1, '', '') call s:hi('Folded', 0x3, 0x1, '', '')

View file

@ -90,6 +90,7 @@ endif
\ } \ }
let g:coc_user_config['suggest.floatEnable'] = v:false let g:coc_user_config['suggest.floatEnable'] = v:false
let g:coc_user_config['workspace.progressTarget'] = "statusline" let g:coc_user_config['workspace.progressTarget'] = "statusline"
let g:coc_user_config['list.selectedSignText'] = '> '
runtime! coc-languages/*.vim runtime! coc-languages/*.vim

View file

@ -30,6 +30,7 @@ set commentstring=//%s
let g:indentLine_first_char = g:indentLine_char let g:indentLine_first_char = g:indentLine_char
let g:indentLine_showFirstIndentLevel = 1 let g:indentLine_showFirstIndentLevel = 1
let g:indentLine_fileTypeExclude = ['text', 'help', 'tutor', 'man'] let g:indentLine_fileTypeExclude = ['text', 'help', 'tutor', 'man']
let g:indentLine_defaultGroup = 'IndentLine'
augroup vimrc-indentlines-disable augroup vimrc-indentlines-disable
autocmd! autocmd!

View file

@ -113,6 +113,7 @@ endif
\ 'obsession', \ 'obsession',
\ 'dotfiles_tweaks', \ 'dotfiles_tweaks',
\ 'dotfiles_filesize', \ 'dotfiles_filesize',
\ 'dotfiles_coclist',
\ ] \ ]
let g:airline_detect_iminsert = 1 let g:airline_detect_iminsert = 1
let g:airline#extensions#tabline#left_sep = ' ' let g:airline#extensions#tabline#left_sep = ' '