let s:Dict = vital#gina#import('Data.Dict') let s:File = vital#gina#import('System.File') let s:String = vital#gina#import('Data.String') let s:DIRECTION_PATTERN = printf('\<\%%(%s\)\>', join([ \ 'lefta\%[bove]', \ 'abo\%[veleft]', \ 'rightb\%[elow]', \ 'bel\%[owright]', \ 'to\%[pleft]', \ 'bo\%[tright]', \], '\|') \) let s:t_list = type([]) let s:timer_syncbind = v:null let s:timer_diffupdate = v:null function! gina#util#contain_direction(mods) abort return a:mods =~# s:DIRECTION_PATTERN endfunction function! gina#util#get(obj, key, ...) abort let val = get(a:obj, a:key, v:null) return val is# v:null ? get(a:000, 0, '') : val endfunction function! gina#util#map(lhs, rhs, ...) abort let options = extend({ \ 'mode': '', \ 'noremap': 0, \ 'buffer': 1, \ 'nowait': 0, \ 'silent': 0, \ 'special': 0, \ 'script': 0, \ 'unique': 0, \ 'expr': 0, \}, get(a:000, 0, {}) \) let command = join([ \ options.mode . (options.noremap ? 'noremap' : 'map'), \ options.buffer ? '' : '', \ options.nowait ? '' : '', \ options.silent ? '' : '', \ options.special ? '' : '', \ options.script ? '