1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-03-13 02:05:40 +08:00

Fix repl cursor position (#3139)

This commit is contained in:
Wang Shidong 2019-10-12 00:10:29 +08:00 committed by GitHub
parent bd73871f6c
commit 4c37a26095
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 8 deletions

View File

@ -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

View File

@ -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

View File

@ -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)