1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-01-24 09:30:04 +08:00
SpaceVim/bundle/gina.vim/autoload/gina/custom.vim

77 lines
1.9 KiB
VimL
Vendored

let s:preferences = {}
let s:pattern_preferences = {}
function! gina#custom#preference(scheme, ...) abort
let readonly = a:0 ? a:1 : 1
let preferences = a:scheme =~# '^/'
\ ? s:pattern_preferences
\ : s:preferences
let preferences[a:scheme] = get(preferences, a:scheme, {})
let preference = extend(preferences[a:scheme], {
\ 'action': {
\ 'aliases': [],
\ 'shortens': [],
\ },
\ 'mapping': {
\ 'mappings': [],
\ },
\ 'command': {
\ 'options': [],
\ 'origin': a:scheme,
\ 'raw': 0,
\ },
\ 'executes': [],
\}, 'keep'
\)
return readonly ? deepcopy(preference) : preference
endfunction
function! gina#custom#preferences(scheme) abort
let preferences = []
for [pattern, preference] in items(s:pattern_preferences)
if a:scheme =~# pattern[1:]
call add(preferences, preference)
endif
endfor
return extend(
\ deepcopy(preferences),
\ [gina#custom#preference(a:scheme)]
\)
endfunction
function! gina#custom#clear() abort
let s:preferences = {}
let s:pattern_preferences = {}
endfunction
function! gina#custom#execute(scheme, expr) abort
let value = get(a:000, 0, 1)
let preference = gina#custom#preference(a:scheme, 0)
call add(preference.executes, [a:expr])
endfunction
" Private --------------------------------------------------------------------
function! s:apply_preference(preference) abort
for [expr] in a:preference.executes
execute expr
endfor
endfunction
function! s:FileType() abort
let scheme = gina#core#buffer#param('%', 'scheme')
if empty(scheme)
return
endif
for preference in gina#custom#preferences(scheme)
call s:apply_preference(preference)
endfor
endfunction
" Autocmd --------------------------------------------------------------------
augroup gina_custom_internal
autocmd! *
autocmd FileType * call s:FileType()
augroup END