v0.0.1
This commit is contained in:
7
autoload/tui.vim
Normal file
7
autoload/tui.vim
Normal file
@ -0,0 +1,7 @@
|
||||
vim9script
|
||||
|
||||
export def Init(tui_home: string)
|
||||
tui#core#cached#Set("tui.home", tui_home)
|
||||
tui#core#layer#Init(expand(tui_home .. "/layers"))
|
||||
enddef
|
||||
|
83
autoload/tui/core/cached.vim
Normal file
83
autoload/tui/core/cached.vim
Normal file
@ -0,0 +1,83 @@
|
||||
vim9script
|
||||
|
||||
const CACHE_KEY_PATTERN = '\v^[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+)*$'
|
||||
|
||||
export def Has(key: string, advanced_key: bool = v:true): bool
|
||||
assert_true(!empty(key) && !empty(split(key)) && match(key, CACHE_KEY_PATTERN) != -1)
|
||||
|
||||
const tui_cached = get(g:, 'tui_cached', {})
|
||||
if !advanced_key
|
||||
return has_key(tui_cached, key)
|
||||
endif
|
||||
|
||||
var temp_keys = split(key, '\.')
|
||||
var real_key = temp_keys[-1]
|
||||
var real_dict = tui_cached
|
||||
var index = 0
|
||||
for sub_key in temp_keys
|
||||
if index < len(temp_keys) - 1
|
||||
if !has_key(real_dict, sub_key) || (type(real_dict[sub_key]) != type({}))
|
||||
return 0
|
||||
endif
|
||||
real_dict = real_dict[sub_key]
|
||||
endif
|
||||
index = index + 1
|
||||
endfor
|
||||
return has_key(real_dict, real_key)
|
||||
enddef
|
||||
|
||||
export def Get(key: string, default_value: any = v:none, advanced_key: bool = v:true): any
|
||||
assert_true(!empty(key) && !empty(split(key)) && match(key, CACHE_KEY_PATTERN) != -1)
|
||||
|
||||
const tui_cached = get(g:, 'tui_cached', {})
|
||||
if !advanced_key
|
||||
return has_key(tui_cached, key) ? tui_cached[key] : default_value
|
||||
endif
|
||||
|
||||
var temp_keys = split(key, '\.')
|
||||
var real_key = temp_keys[-1]
|
||||
var real_dict = tui_cached
|
||||
var index = 0
|
||||
for sub_key in temp_keys
|
||||
if index < len(temp_keys) - 1
|
||||
if !has_key(real_dict, sub_key) || (type(real_dict[sub_key]) != type({}))
|
||||
return default_value
|
||||
endif
|
||||
real_dict = real_dict[sub_key]
|
||||
endif
|
||||
index = index + 1
|
||||
endfor
|
||||
return has_key(real_dict, real_key) ? real_dict[real_key] : default_value
|
||||
enddef
|
||||
|
||||
export def Set(key: string, value: any, advanced_key: bool = v:true): any
|
||||
assert_true(!empty(key) && !empty(split(key)) && match(key, CACHE_KEY_PATTERN) != -1)
|
||||
|
||||
final tui_cached = get(g:, 'tui_cached', {})
|
||||
if !advanced_key
|
||||
tui_cached[key] = value
|
||||
return value
|
||||
endif
|
||||
|
||||
var temp_keys = split(key, '\.')
|
||||
var real_key = temp_keys[-1]
|
||||
var real_dict = tui_cached
|
||||
var index = 0
|
||||
for sub_key in temp_keys
|
||||
if index < len(temp_keys) - 1
|
||||
if !has_key(real_dict, sub_key)
|
||||
real_dict[sub_key] = {}
|
||||
endif
|
||||
real_dict = real_dict[sub_key]
|
||||
if type(real_dict) != type({})
|
||||
throw "tui-util-cached_Set: invalid key - [" .. key .. "]"
|
||||
endif
|
||||
endif
|
||||
index = index + 1
|
||||
endfor
|
||||
real_dict[real_key] = value
|
||||
final g:tui_cached = tui_cached
|
||||
|
||||
return value
|
||||
enddef
|
||||
|
39
autoload/tui/core/layer.vim
Normal file
39
autoload/tui/core/layer.vim
Normal file
@ -0,0 +1,39 @@
|
||||
vim9script
|
||||
|
||||
export def Init(layer_home: string = v:none)
|
||||
if !tui#core#cached#Has("tui.layer.home")
|
||||
var tui_layer_home = layer_home
|
||||
if empty(layer_home) || empty(split(layer_home))
|
||||
tui_layer_home = expand(tui#core#cached.Get("tui.home") .. "/layers")
|
||||
endif
|
||||
tui#core#cached#Set('tui.layer.home', tui_layer_home)
|
||||
|
||||
command! -nargs=1 -bar TuiLayer call tui#core#layer#Load(<q-args>)
|
||||
Load0(tui_layer_home)
|
||||
endif
|
||||
enddef
|
||||
|
||||
export def Load(layer_id: string)
|
||||
const tui_layer_home = tui#core#cached#Get("tui.layer.home")
|
||||
const layer_path = expand(tui_layer_home .. "/" .. substitute(layer_id, '\.', '/', 'g'))
|
||||
Load0(layer_path)
|
||||
enddef
|
||||
|
||||
def Load0(layer_path: string)
|
||||
if filereadable(layer_path)
|
||||
execute('source ' .. layer_path)
|
||||
elseif filereadable(layer_path .. '.vim')
|
||||
execute('source ' .. layer_path .. '.vim')
|
||||
elseif isdirectory(layer_path)
|
||||
if filereadable(expand(layer_path .. '/init.vim'))
|
||||
execute('source ' .. expand(layer_path .. '/init.vim'))
|
||||
else
|
||||
for sub_file in split(glob(layer_path .. "/*.vim"), '\n')
|
||||
if filereadable(sub_file)
|
||||
execute("source " .. sub_file)
|
||||
endif
|
||||
endfor
|
||||
endif
|
||||
endif
|
||||
enddef
|
||||
|
Reference in New Issue
Block a user