mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-03-15 19:45:46 +08:00
Fix repl cursor position (#3139)
This commit is contained in:
parent
bd73871f6c
commit
4c37a26095
@ -41,11 +41,22 @@ if exists('*nvim_win_set_cursor')
|
|||||||
function! s:self.set_cursor(winid, pos) abort
|
function! s:self.set_cursor(winid, pos) abort
|
||||||
return nvim_win_set_cursor(a:winid, a:pos)
|
return nvim_win_set_cursor(a:winid, a:pos)
|
||||||
endfunction
|
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
|
elseif g:_spacevim_if_lua
|
||||||
function! s:self.set_cursor(winid, pos) abort
|
function! s:self.set_cursor(winid, pos) abort
|
||||||
lua require("spacevim.api.vim.window").set_cursor(vim.eval("a:winid"), vim.eval("a:pos"))
|
lua require("spacevim.api.vim.window").set_cursor(vim.eval("a:winid"), vim.eval("a:pos"))
|
||||||
endfunction
|
endfunction
|
||||||
else
|
else
|
||||||
|
function! s:self.set_cursor(winid, pos) abort
|
||||||
|
endfunction
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,6 @@ let s:JOB = SpaceVim#api#import('job')
|
|||||||
let s:BUFFER = SpaceVim#api#import('vim#buffer')
|
let s:BUFFER = SpaceVim#api#import('vim#buffer')
|
||||||
let s:WINDOW = SpaceVim#api#import('vim#window')
|
let s:WINDOW = SpaceVim#api#import('vim#window')
|
||||||
let s:STRING = SpaceVim#api#import('data#string')
|
let s:STRING = SpaceVim#api#import('data#string')
|
||||||
let s:VIM = SpaceVim#api#import('vim')
|
|
||||||
|
|
||||||
augroup spacevim_repl
|
augroup spacevim_repl
|
||||||
autocmd!
|
autocmd!
|
||||||
@ -74,7 +73,7 @@ function! s:start(exe) abort
|
|||||||
let s:start_time = reltime()
|
let s:start_time = reltime()
|
||||||
call s:open_windows()
|
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: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:lines += 3
|
||||||
let s:_out_data = ['']
|
let s:_out_data = ['']
|
||||||
let s:_current_line = ''
|
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')"))
|
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
|
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
|
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
|
endi
|
||||||
call s:update_statusline()
|
call s:update_statusline()
|
||||||
endif
|
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')"))
|
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
|
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
|
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
|
endi
|
||||||
call s:update_statusline()
|
call s:update_statusline()
|
||||||
endif
|
endif
|
||||||
@ -122,8 +121,8 @@ else
|
|||||||
if bufexists(s:bufnr)
|
if bufexists(s:bufnr)
|
||||||
call s:BUFFER.buf_set_lines(s:bufnr, s:lines , s:lines + 1, 0, a:data)
|
call s:BUFFER.buf_set_lines(s:bufnr, s:lines , s:lines + 1, 0, a:data)
|
||||||
let s:lines += len(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
|
if s:WINDOW.get_cursor(s:winid)[0] == s:BUFFER.line_count(s:bufnr) - len(a:data)
|
||||||
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
|
endi
|
||||||
call s:update_statusline()
|
call s:update_statusline()
|
||||||
endif
|
endif
|
||||||
|
@ -13,8 +13,8 @@ end
|
|||||||
function window.set_cursor(window_id, pos)
|
function window.set_cursor(window_id, pos)
|
||||||
local winindex = vim.eval("win_id2win(" .. window_id .. ")")
|
local winindex = vim.eval("win_id2win(" .. window_id .. ")")
|
||||||
local w = vim.window(winindex)
|
local w = vim.window(winindex)
|
||||||
w.line = pos[1]
|
w.line = pos[0]
|
||||||
w.col = pos[2]
|
w.col = pos[1]
|
||||||
end
|
end
|
||||||
|
|
||||||
function window.close(window_id)
|
function window.close(window_id)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user