From 4c37a26095e00f3dce34e7ca41e3578f3dc2c429 Mon Sep 17 00:00:00 2001 From: Wang Shidong Date: Sat, 12 Oct 2019 00:10:29 +0800 Subject: [PATCH] Fix repl cursor position (#3139) --- autoload/SpaceVim/api/vim/window.vim | 11 +++++++++++ autoload/SpaceVim/plugins/repl.vim | 11 +++++------ lua/spacevim/api/vim/window.lua | 4 ++-- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/autoload/SpaceVim/api/vim/window.vim b/autoload/SpaceVim/api/vim/window.vim index 375854e6c..e857c0aad 100644 --- a/autoload/SpaceVim/api/vim/window.vim +++ b/autoload/SpaceVim/api/vim/window.vim @@ -41,11 +41,22 @@ 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 exists('*win_execute') + function! s:self.set_cursor(win, pos) abort + " @fixme use g` to move to cursor line + " this seem to be a bug of vim + " https://github.com/vim/vim/issues/5022 + call win_execute(a:win, ':call cursor(' . a:pos[0] . ', ' . a:pos[1] . ')') + " call win_execute(a:win, ':' . a:pos[0]) + call win_execute(a:win, ':normal! g"') + 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 + function! s:self.set_cursor(winid, pos) abort + endfunction endif diff --git a/autoload/SpaceVim/plugins/repl.vim b/autoload/SpaceVim/plugins/repl.vim index da3adecbe..1902121b3 100644 --- a/autoload/SpaceVim/plugins/repl.vim +++ b/autoload/SpaceVim/plugins/repl.vim @@ -10,7 +10,6 @@ let s:JOB = SpaceVim#api#import('job') let s:BUFFER = SpaceVim#api#import('vim#buffer') let s:WINDOW = SpaceVim#api#import('vim#window') let s:STRING = SpaceVim#api#import('data#string') -let s:VIM = SpaceVim#api#import('vim') augroup spacevim_repl autocmd! @@ -74,7 +73,7 @@ function! s:start(exe) abort let s:start_time = reltime() call s:open_windows() call s:BUFFER.buf_set_lines(s:bufnr, s:lines , s:lines + 3, 0, ['[REPL executable] ' . string(a:exe), '', repeat('-', 20)]) - call s:VIM.win_set_cursor(s:winid, [s:VIM.buf_line_count(s:bufnr), 1]) + call s:WINDOW.set_cursor(s:winid, [s:BUFFER.line_count(s:bufnr), 0]) let s:lines += 3 let s:_out_data = [''] let s:_current_line = '' @@ -100,7 +99,7 @@ if has('nvim') && exists('*chanclose') call s:BUFFER.buf_set_lines(s:bufnr, s:lines , s:lines + 1, 0, map(s:_out_data[:-2], "substitute(v:val, ' $', '', 'g')")) let s:lines += len(s:_out_data) - 1 if s:WINDOW.get_cursor(s:winid)[0] == s:BUFFER.line_count(s:bufnr) - len(s:_out_data) + 1 - call s:VIM.win_set_cursor(s:winid, [s:VIM.buf_line_count(s:bufnr), 1]) + call s:WINDOW.set_cursor(s:winid, [s:BUFFER.line_count(s:bufnr), 0]) endi call s:update_statusline() endif @@ -110,7 +109,7 @@ if has('nvim') && exists('*chanclose') call s:BUFFER.buf_set_lines(s:bufnr, s:lines , s:lines + 1, 0, map(s:_out_data[:-2], "substitute(v:val, ' $', '', 'g')")) let s:lines += len(s:_out_data) - 1 if s:WINDOW.get_cursor(s:winid)[0] == s:BUFFER.line_count(s:bufnr) - len(s:_out_data) + 1 - call s:VIM.win_set_cursor(s:winid, [s:VIM.buf_line_count(s:bufnr), 1]) + call s:WINDOW.set_cursor(s:winid, [s:BUFFER.line_count(s:bufnr), 0]) endi call s:update_statusline() endif @@ -122,8 +121,8 @@ else if bufexists(s:bufnr) call s:BUFFER.buf_set_lines(s:bufnr, s:lines , s:lines + 1, 0, a:data) let s:lines += len(a:data) - if s:WINDOW.get_cursor(s:winid)[0] == s:BUFFER.line_count(s:bufnr) - len(a:data) + 1 - call s:VIM.win_set_cursor(s:winid, [s:VIM.buf_line_count(s:bufnr), 1]) + if s:WINDOW.get_cursor(s:winid)[0] == s:BUFFER.line_count(s:bufnr) - len(a:data) + call s:WINDOW.set_cursor(s:winid, [s:BUFFER.line_count(s:bufnr), 0]) endi call s:update_statusline() endif diff --git a/lua/spacevim/api/vim/window.lua b/lua/spacevim/api/vim/window.lua index 4bc71889f..5b11c3bbb 100644 --- a/lua/spacevim/api/vim/window.lua +++ b/lua/spacevim/api/vim/window.lua @@ -13,8 +13,8 @@ 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] + w.line = pos[0] + w.col = pos[1] end function window.close(window_id)