spacevim/autoload/SpaceVim/api/vim/signatures.vim

71 lines
2.2 KiB
VimL
Raw Normal View History

2024-08-21 14:17:26 +08:00
"=============================================================================
" signatures.vim --- SpaceVim signatures API
" Copyright (c) 2016-2023 Wang Shidong & Contributors
" Author: Wang Shidong < wsdjeg@outlook.com >
" URL: https://spacevim.org
" License: GPLv3
"=============================================================================
let s:self = {}
let s:self.id = []
let s:self._STRING = SpaceVim#api#import('data#string')
let s:self._cmp = SpaceVim#api#import('vim#compatible')
let s:self.hi_info_group = 'Comment'
let s:self.hi_warn_group = 'WarningMsg'
let s:self.hi_error_group = 'ErrorMsg'
if exists('*nvim_create_namespace')
let s:self._hi_namespace = nvim_create_namespace('spacevim-signatures')
endif
if exists('*nvim_create_namespace')
" @vimlint(EVL103, 1, a:col)
function! s:self.info(line, col, message) abort
call nvim_buf_set_virtual_text(0, self._hi_namespace, a:line - 2, [[a:message, self.hi_info_group],], {})
endfunction
function! s:self.warn(line, col, message) abort
call nvim_buf_set_virtual_text(0, self._hi_namespace, a:line - 2, [[a:message, self.hi_warn_group],], {})
endfunction
function! s:self.error(line, col, message) abort
call nvim_buf_set_virtual_text(0, self._hi_namespace, a:line - 2, [[a:message, self.hi_error_group],], {})
endfunction
" @vimlint(EVL103, 0, a:col)
else
function! s:self.info(line, col, message) abort
let chars = self._STRING.string2chars(self._STRING.strQ2B(a:message))
let chars = [' '] + chars
for index in range(len(chars))
call add(self.id, self._cmp.matchaddpos('Conceal', [[a:line, a:col - 1 + index, 1]], 10, -1, {'conceal' : chars[index]}))
endfor
endfunction
endif
function! s:self.set_group(group) abort
let self.group = a:group
exe 'highlight ' . self.group . ' ctermbg=green guibg=green'
endfunction
call s:self.set_group('SpaceVim_signatures')
if exists('*nvim_create_namespace')
function! s:self.clear() abort
call nvim_buf_clear_namespace(0, self._hi_namespace, 0, -1)
endfunction
else
function! s:self.clear() abort
for id in self.id
call matchdelete(id)
endfor
let self.id = []
endfunction
endif
function! SpaceVim#api#vim#signatures#get() abort
return deepcopy(s:self)
endfunction