From 8a6baac8667cfd2bc2a7f0a2206b77ef5fba076c Mon Sep 17 00:00:00 2001 From: Wang Shidong Date: Tue, 8 Oct 2019 22:24:03 +0800 Subject: [PATCH] Add vim#window api (#3133) --- autoload/SpaceVim/api/vim/buffer.vim | 5 +++ autoload/SpaceVim/api/vim/window.vim | 54 +++++++++++++++++++++++++++ autoload/SpaceVim/layers/lang/lua.vim | 2 +- doc/SpaceVim.txt | 27 ++++++++++++-- docs/api/vim/buffer.md | 30 +++++++++++++++ docs/api/vim/window.md | 35 +++++++++++++++++ init.vim | 2 - lua/spacevim/api/vim/buffer.lua | 0 lua/spacevim/api/vim/window.lua | 27 ++++++++++++++ vimrc | 11 ++++++ 10 files changed, 187 insertions(+), 6 deletions(-) create mode 100644 autoload/SpaceVim/api/vim/window.vim create mode 100644 docs/api/vim/buffer.md create mode 100644 docs/api/vim/window.md create mode 100644 lua/spacevim/api/vim/buffer.lua create mode 100644 lua/spacevim/api/vim/window.lua diff --git a/autoload/SpaceVim/api/vim/buffer.vim b/autoload/SpaceVim/api/vim/buffer.vim index e0530bdb9..8d149b089 100644 --- a/autoload/SpaceVim/api/vim/buffer.vim +++ b/autoload/SpaceVim/api/vim/buffer.vim @@ -9,6 +9,11 @@ "" " @section vim#buffer, api-vim-buffer " @parentsection api +" @subsection Intro +" +" vim#buffer API provides some basic functions for setting and getting config +" of vim buffer. +" " @subsection Functions " " is_cmdwin() diff --git a/autoload/SpaceVim/api/vim/window.vim b/autoload/SpaceVim/api/vim/window.vim new file mode 100644 index 000000000..375854e6c --- /dev/null +++ b/autoload/SpaceVim/api/vim/window.vim @@ -0,0 +1,54 @@ +"============================================================================= +" window.vim --- window api for vim and neovim +" Copyright (c) 2016-2019 Wang Shidong & Contributors +" Author: Wang Shidong < wsdjeg@outlook.com > +" URL: https://spacevim.org +" License: GPLv3 +"============================================================================= + +"" +" @section vim#buffer, api-vim-window +" @parentsection api +" @subsection Intro +" +" vim#window API provides some basic functions for setting and getting config +" of vim window. +" +" @subsection Functions +" +" get_cursor({winid}) +" +" Gets the cursor position in the window {winid}, to get the ID of a window, +" checkout |window-ID|. + +let s:self = {} + +if exists('*nvim_win_get_cursor') + function! s:self.get_cursor(winid) abort + return nvim_win_get_cursor(a:winid) + endfunction +elseif g:_spacevim_if_lua + function! s:self.get_cursor(winid) abort + lua require("spacevim.api.vim.window").get_cursor(vim.eval("a:winid")) + endfunction +else + function! s:self.get_cursor(winid) abort + + endfunction +endif + +if exists('*nvim_win_set_cursor') + function! s:self.set_cursor(winid, pos) abort + return nvim_win_set_cursor(a:winid, a:pos) + endfunction +elseif g:_spacevim_if_lua + function! s:self.set_cursor(winid, pos) abort + lua require("spacevim.api.vim.window").set_cursor(vim.eval("a:winid"), vim.eval("a:pos")) + endfunction +else +endif + + +function! SpaceVim#api#vim#window#get() abort + return deepcopy(s:self) +endfunction diff --git a/autoload/SpaceVim/layers/lang/lua.vim b/autoload/SpaceVim/layers/lang/lua.vim index d24002fff..f5dc62471 100644 --- a/autoload/SpaceVim/layers/lang/lua.vim +++ b/autoload/SpaceVim/layers/lang/lua.vim @@ -73,7 +73,7 @@ function! SpaceVim#layers#lang#lua#config() abort elseif executable('luap') let lua_repl = 'luap' elseif !empty(luaexe) - let lua_repl = luaexe[0] + ['-i'] + let lua_repl = luaexe + ['-i'] else let lua_repl = ['lua', '-i'] endif diff --git a/doc/SpaceVim.txt b/doc/SpaceVim.txt index 78b47e213..5cbe3d0de 100644 --- a/doc/SpaceVim.txt +++ b/doc/SpaceVim.txt @@ -133,9 +133,10 @@ CONTENTS *SpaceVim-contents* 9. sid............................................|SpaceVim-api-vim-sid| 10. system.........................................|SpaceVim-api-system| 11. vim#buffer.................................|SpaceVim-api-vim-buffer| - 12. vim#command...............................|SpaceVim-api-vim-command| - 13. vim#compatible.........................|SpaceVim-api-vim-compatible| - 14. vim#message...............................|SpaceVim-api-vim-message| + 12. vim#buffer.................................|SpaceVim-api-vim-window| + 13. vim#command...............................|SpaceVim-api-vim-command| + 14. vim#compatible.........................|SpaceVim-api-vim-compatible| + 15. vim#message...............................|SpaceVim-api-vim-message| 8. FAQ........................................................|SpaceVim-faq| 9. Changelog............................................|SpaceVim-changelog| @@ -2467,6 +2468,11 @@ mac. ============================================================================== VIM#BUFFER *SpaceVim-api-vim-buffer* +INTRO + +vim#buffer API provides some basic functions for setting and getting config of +vim buffer. + FUNCTIONS is_cmdwin() @@ -2486,6 +2492,21 @@ is a dict with following keys: cmd: the ex command which will be run after the new buffer is created +============================================================================== +VIM#BUFFER *SpaceVim-api-vim-window* + +INTRO + +vim#window API provides some basic functions for setting and getting config of +vim window. + +FUNCTIONS + +get_cursor({winid}) + +Gets the cursor position in the window {winid}, to get the ID of a window, +checkout |window-ID|. + ============================================================================== VIM#COMMAND *SpaceVim-api-vim-command* diff --git a/docs/api/vim/buffer.md b/docs/api/vim/buffer.md new file mode 100644 index 000000000..c95a7f912 --- /dev/null +++ b/docs/api/vim/buffer.md @@ -0,0 +1,30 @@ +--- +title: "vim#buffer api" +description: "vim#buffer API provides some basic functions for setting and getting config of vim buffer." +--- + +# [Available APIs](../../) >> vim#buffer + + + +- [Intro](#intro) +- [Functions](#functions) + + + +## Intro + +vim#buffer API provides some basic functions for setting and getting config of vim buffer. + +```vim +let s:BUFFER = SpaceVim#api#import('vim#buffer') +``` + +## Functions + +here is a list of functions implement in this api. When Vim has python or lua support, +some of these functions are better experienced + +| function name | description | +| ---------------- | -------------------------- | +| `filter_do(cmd)` | filter buffers and run cmd | diff --git a/docs/api/vim/window.md b/docs/api/vim/window.md new file mode 100644 index 000000000..617ea26d2 --- /dev/null +++ b/docs/api/vim/window.md @@ -0,0 +1,35 @@ +--- +title: "vim#window api" +description: "vim#window API provides some basic functions for setting and getting config of vim window." +--- + +# [Available APIs](../../) >> vim#window + + + +- [Intro](#intro) +- [Functions](#functions) + + + +## Intro + +vim#window API provides some basic functions for setting and getting config of vim window. + +```vim +let s:WINDOW = SpaceVim#api#import('vim#window') +" if you want to change the cursor to [10, 3] in window winid +call s:WINDOW.set_cursor(s:winid, [10, 3]) +" of cause, you can get the cursor for a window +let cursorpos = s:WINDOW.get_cursor(s:winid) +``` + +## Functions + +here is a list of functions implement in this api. When Vim has python or lua support, +some of these functions are better experienced + +| function name | description | +| ------------------------ | --------------------------------------- | +| `get_cursor(winid)` | Gets the cursor position in the window. | +| `set_cursor(winid, pos)` | Sets the cursor position in the window. | diff --git a/init.vim b/init.vim index 82389b416..479b3a499 100644 --- a/init.vim +++ b/init.vim @@ -7,5 +7,3 @@ "============================================================================= execute 'source' fnamemodify(expand(''), ':h').'/config/main.vim' - -" lua require('spacevim').bootstrap() diff --git a/lua/spacevim/api/vim/buffer.lua b/lua/spacevim/api/vim/buffer.lua new file mode 100644 index 000000000..e69de29bb diff --git a/lua/spacevim/api/vim/window.lua b/lua/spacevim/api/vim/window.lua new file mode 100644 index 000000000..4bc71889f --- /dev/null +++ b/lua/spacevim/api/vim/window.lua @@ -0,0 +1,27 @@ +local window = {} + +function window.get_cursor(window_id) + local winindex = vim.eval("win_id2win(" .. window_id .. ")") + local w = vim.window(winindex) + if w == nil then + vim.command("return [" .. table.concat({0, 0}, ", ") .. "]") + else + vim.command("return [" .. table.concat({w.line, w.col}, ", ") .. "]") + end +end + +function window.set_cursor(window_id, pos) + local winindex = vim.eval("win_id2win(" .. window_id .. ")") + local w = vim.window(winindex) + w.line = pos[1] + w.col = pos[2] +end + +function window.close(window_id) + +end + + +return window + + diff --git a/vimrc b/vimrc index b723ff172..bbd0bb628 100644 --- a/vimrc +++ b/vimrc @@ -8,6 +8,17 @@ " Note: Skip initialization for vim-tiny or vim-small. if 1 + let g:_spacevim_if_lua = 0 + if has('lua') + try + let s:plugin_dir = fnamemodify(expand(''), ':h').'\lua' + let s:str = s:plugin_dir . '\?.lua;' . s:plugin_dir . '\?\init.lua;' + lua package.path=vim.eval("s:str") .. package.path + let g:_spacevim_if_lua = 1 + catch + let g:_spacevim_if_lua = 0 + endtry + endif execute 'source' fnamemodify(expand(''), ':h').'/config/main.vim' endif " vim:set et sw=2