mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-03 22:50:05 +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
|