mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-04 02:20:04 +08:00
37 lines
1.2 KiB
VimL
37 lines
1.2 KiB
VimL
|
let s:t_number = type(0)
|
||
|
|
||
|
function! gina#custom#command#option(scheme, query, ...) abort
|
||
|
if a:query !~# '^--\?\S\+\%(|--\?\S\+\)*$'
|
||
|
throw gina#core#revelator#error(
|
||
|
\ 'Invalid query. See :h gina#custom#command#option'
|
||
|
\)
|
||
|
endif
|
||
|
let value = get(a:000, 0, 1)
|
||
|
let remover = type(value) == s:t_number ? s:build_remover(a:query) : ''
|
||
|
let preference = gina#custom#preference(a:scheme, 0)
|
||
|
call add(preference.command.options, [a:query, value, remover])
|
||
|
endfunction
|
||
|
|
||
|
function! gina#custom#command#alias(scheme, alias, ...) abort
|
||
|
if a:scheme =~# '^/'
|
||
|
throw gina#core#revelator#error(
|
||
|
\ '/{pattern} cannot be used to define a command alias'
|
||
|
\)
|
||
|
endif
|
||
|
let preference = gina#custom#preference(a:alias, 0)
|
||
|
let preference.command.origin = a:scheme
|
||
|
let preference.command.raw = get(a:000, 0, 0)
|
||
|
endfunction
|
||
|
|
||
|
|
||
|
" Private --------------------------------------------------------------------
|
||
|
function! s:build_remover(query) abort
|
||
|
let terms = split(a:query, '|')
|
||
|
let names = map(copy(terms), 'matchstr(v:val, ''^--\?\zs\S\+'')')
|
||
|
let remover = map(
|
||
|
\ range(len(terms)),
|
||
|
\ '(terms[v:val] =~# ''^--'' ? ''--no-'' : ''-!'') . names[v:val]'
|
||
|
\)
|
||
|
return join(remover, '|')
|
||
|
endfunction
|