1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-03-22 00:35:42 +08:00

81 lines
2.3 KiB
VimL
Raw Normal View History

2019-06-09 14:11:17 +08:00
"=============================================================================
" api.vim --- SpaceVim api
2022-02-03 17:24:51 +08:00
" Copyright (c) 2016-2022 Wang Shidong & Contributors
2022-03-27 13:38:54 +08:00
" Author: Wang Shidong < wsdjeg@outlook.com >
2019-06-09 14:11:17 +08:00
" URL: https://spacevim.org
" License: GPLv3
"=============================================================================
2017-03-19 20:20:33 +08:00
2017-03-11 20:43:42 +08:00
""
" @section API, api
2018-10-28 20:52:12 +08:00
" SpaceVim contains a variety of public apis. To using the api, you need to
" make sure SpaceVim has been added to your &rtp. after that, you can use
" |SpaceVim#api#import| to import the API you need.
"
2017-03-11 20:43:42 +08:00
" @subsection usage
2018-10-28 20:52:12 +08:00
"
2017-03-11 20:43:42 +08:00
" This is just an example, and it works well in old version vim.
" >
" let s:json = SpaceVim#api#import('data#json')
" let rst = s:json.json_encode(onject)
" let rst = s:json.json_decode(string)
" <
2018-10-28 20:52:12 +08:00
"
" here is list of resources where SpaceVim comes from:
"
" - vital: https://github.com/vim-jp/vital.vim
2017-03-11 20:43:42 +08:00
2017-04-13 21:37:26 +08:00
let s:apis = {}
2019-01-07 09:41:15 +08:00
" the api itself is a dict, and it will be changed when user use the api. so
" every time when request a api, we should provide an clean api.
2018-10-28 20:52:12 +08:00
""
" Import API base the given {name}, and return the API object. for all
" available APIs please check |spacevim-api|
2017-02-15 20:15:14 +08:00
function! SpaceVim#api#import(name) abort
2017-04-13 21:37:26 +08:00
if has_key(s:apis, a:name)
return deepcopy(s:apis[a:name])
endif
2017-03-06 23:26:26 +08:00
let p = {}
try
let p = SpaceVim#api#{a:name}#get()
2019-01-07 09:41:15 +08:00
let s:apis[a:name] = deepcopy(p)
2017-03-06 23:26:26 +08:00
catch /^Vim\%((\a\+)\)\=:E117/
endtry
return p
2017-02-15 20:15:14 +08:00
endfunction
2017-03-06 23:26:26 +08:00
""
" Register new {api} named {name}, 1 will be returned if succeed. for all
" available APIs please check |spacevim-api|
"
" Example:
" >
" let s:hello = {}
" function! s:hello.say(who)
" echo 'hello! ' . a:who
" endfunction
" call SpaceVim#api#register('hello', s:hello)
"
" " after registering api, you can use this api
" " in other vim scripts like this:
" let s:H = SpaceVim#api#import('hello')
" call s:H.say('wsdjeg')
" <
2017-04-13 21:37:26 +08:00
function! SpaceVim#api#register(name, api) abort
" the name must be string
if type(a:name) ==# type('') && strlen(a:name) >= 1
if !empty(SpaceVim#api#import(a:name))
call SpaceVim#logger#warn('API:' . a:name . ' already existed!')
else
let s:apis[a:name] = deepcopy(a:api)
endif
2017-04-13 21:37:26 +08:00
else
call SpaceVim#logger#warn('failed to register api, the name must be a no empty string!')
2017-04-13 21:37:26 +08:00
endif
endfunction
2017-03-06 23:26:26 +08:00
" vim:set fdm=marker sw=2 nowrap: