diff --git a/autoload/SpaceVim/api/vim/buffer.vim b/autoload/SpaceVim/api/vim/buffer.vim new file mode 100644 index 000000000..6975ba7b9 --- /dev/null +++ b/autoload/SpaceVim/api/vim/buffer.vim @@ -0,0 +1,34 @@ +let s:self = {} + + +if exists('*getcmdwintype') + function! s:self.is_cmdwin() abort + return getcmdwintype() !=# '' + endfunction +else + function! s:self.is_cmdwin() abort + return bufname('%') ==# '[Command Line]' + endfunction +endif + +function! s:self.open(opts) abort + let buf = get(a:opts, 'bufname', '') + let mode = get(a:opts, 'mode', 'vertical topleft split') + let cmd = get(a:opts, 'cmd', '') + if empty(buf) + exe mode bufopt + else + exe mode buf + endif + exe cmd +endfunction + + +func! s:self.resize(size, ...) abort + let cmd = get(a:000, 0, 'vertical') + exe cmd 'resize' a:size +endf + +fu! SpaceVim#api#vim#buffer#get() + return deepcopy(s:self) +endf diff --git a/autoload/SpaceVim/api/vim/message.vim b/autoload/SpaceVim/api/vim/message.vim new file mode 100644 index 000000000..b707be869 --- /dev/null +++ b/autoload/SpaceVim/api/vim/message.vim @@ -0,0 +1,50 @@ +" ============================================================================ +" File: message.vim +" Description: vim#message api of SpaceVim +" Author: L-stt +" Website: https://spacevim.org +" License: MIT +" ============================================================================ + +"" +" @section vim#message, api-vim-message +" @parentsection api + +function! SpaceVim#api#vim#compatible#get() abort + return map({ + \ 'echo' : '', + \ 'echomsg': '', + \ 'error': '', + \ 'warn': '', + \ }, + \ "function('s:' . v:key)" + \ ) +endfunction + +function! s:echo(hl, msg) abort + execute 'echohl' a:hl + try + echo a:msg + finally + echohl None + endtry +endfunction + +function! s:echomsg(hl, msg) abort + execute 'echohl' a:hl + try + for m in split(a:msg, "\n") + echomsg m + endfor + finally + echohl None + endtry +endfunction + +function! s:error(msg) abort + call s:echomsg('ErrorMsg', a:msg) +endfunction + +function! s:warn(msg) abort + call s:echomsg('WarningMsg', a:msg) +endfunction diff --git a/autoload/SpaceVim/api/vim/sid.vim b/autoload/SpaceVim/api/vim/sid.vim new file mode 100644 index 000000000..d9b98fe10 --- /dev/null +++ b/autoload/SpaceVim/api/vim/sid.vim @@ -0,0 +1,49 @@ +" ============================================================================ +" File: sid.vim +" Description: vim#sid api of SpaceVim +" Author: L-stt +" Website: https://spacevim.org +" License: MIT +" ============================================================================ + +"" +" @section sid, api-vim-sid +" @parentsection api +"" Capture command + +let s:self = {} + +let s:self._cache = {} + +function! s:self._capture(command) abort + try + let save_verbose = &verbose + let &verbose = 0 + redir => out + silent execute a:command + finally + redir END + let &verbose = save_verbose + endtry + return out +endfunction +function! s:self._unify_path(path) abort + return resolve(fnamemodify(a:path, ':p:gs?[\\/]?/?')) +endfunction +"" Capture command and return lines +function! s:self._capture_lines(command) abort + return split(self._capture(a:command), "\n") +endfunction + + +function! s:self.scriptnames() abort + let sdict = {} " { sid: path } + for line in self._capture_lines(':scriptnames') + let [sid, path] = split(line, '\m^\s*\d\+\zs:\s\ze') + let sdict[str2nr(sid)] = self._unify_path(path) " str2nr(): ' 1' -> 1 + endfor + return sdict +endfunction +function! SpaceVim#api#vim#sid#get() abort + return deepcopy(s:self) +endfunction diff --git a/autoload/SpaceVim/api/vim/tab.vim b/autoload/SpaceVim/api/vim/tab.vim new file mode 100644 index 000000000..a5e4e4fb1 --- /dev/null +++ b/autoload/SpaceVim/api/vim/tab.vim @@ -0,0 +1,17 @@ +let s:self = {} + +let s:self._tree = {} + +function! s:self._update() abort + let tabnr = tabpagenr('$') + if tabnr > 1 + for i in range(1, tabnr) + let buffers = tabpagebuflist(i) + let self._tree[i] = buffers + endfor + endif +endfunction + +function! s:self._jump(tabnr, bufid) abort + +endfunction diff --git a/doc/SpaceVim.txt b/doc/SpaceVim.txt index f69cbd1ef..5f137c6ab 100644 --- a/doc/SpaceVim.txt +++ b/doc/SpaceVim.txt @@ -47,6 +47,8 @@ CONTENTS *SpaceVim-contents* 24. tmux...........................................|SpaceVim-layer-tmux| 6. API........................................................|SpaceVim-api| 1. cmdlinemenu................................|SpaceVim-api-cmdlinemenu| + 2. sid............................................|SpaceVim-api-vim-sid| + 3. vim#message................................|SpaceVim-api-vim-message| 7. FAQ........................................................|SpaceVim-faq| ============================================================================== @@ -909,6 +911,14 @@ Create a cmdline selection menu from a list of {items}, each item should be a list of two value in it, first one is the description, and the next one should be a funcrc. +============================================================================== +SID *SpaceVim-api-vim-sid* + +" Capture command + +============================================================================== +VIM#MESSAGE *SpaceVim-api-vim-message* + ============================================================================== FAQ *SpaceVim-faq* diff --git a/test/api/vim/buffer.vader b/test/api/vim/buffer.vader new file mode 100644 index 000000000..c60f19aa2 --- /dev/null +++ b/test/api/vim/buffer.vader @@ -0,0 +1,6 @@ +Execute ( SpaceVim api: vim#buffer ): + new + let buffer = SpaceVim#api#import('vim#buffer') + call buffer.open({'bufname':'foo', 'cmd' : 'setl buftype=nofile bufhidden=wipe'}) + AssertEqual bufname('%'), 'foo' + AssertEqual &buftype, 'nofile'