forked from aniani/vim
patch 9.1.0787: cursor position changed when using hidden terminal
Problem: cursor position changed when using hidden terminal and BufFilePost autocommand (Mizuno Jan Yuta) Solution: Save and restore cursor position fixes: #15854 closes: #15876 Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
parent
6a1deaf5ad
commit
991657e87d
@ -446,6 +446,7 @@ term_start(
|
|||||||
buf_T *newbuf;
|
buf_T *newbuf;
|
||||||
int vertical = opt->jo_vertical || (cmdmod.cmod_split & WSP_VERT);
|
int vertical = opt->jo_vertical || (cmdmod.cmod_split & WSP_VERT);
|
||||||
jobopt_T orig_opt; // only partly filled
|
jobopt_T orig_opt; // only partly filled
|
||||||
|
pos_T save_cursor;
|
||||||
|
|
||||||
if (check_restricted() || check_secure())
|
if (check_restricted() || check_secure())
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -518,6 +519,7 @@ term_start(
|
|||||||
old_curbuf = curbuf;
|
old_curbuf = curbuf;
|
||||||
--curbuf->b_nwindows;
|
--curbuf->b_nwindows;
|
||||||
curbuf = buf;
|
curbuf = buf;
|
||||||
|
save_cursor = curwin->w_cursor;
|
||||||
curwin->w_buffer = buf;
|
curwin->w_buffer = buf;
|
||||||
++curbuf->b_nwindows;
|
++curbuf->b_nwindows;
|
||||||
}
|
}
|
||||||
@ -763,6 +765,7 @@ term_start(
|
|||||||
--curbuf->b_nwindows;
|
--curbuf->b_nwindows;
|
||||||
curbuf = old_curbuf;
|
curbuf = old_curbuf;
|
||||||
curwin->w_buffer = curbuf;
|
curwin->w_buffer = curbuf;
|
||||||
|
curwin->w_cursor = save_cursor;
|
||||||
++curbuf->b_nwindows;
|
++curbuf->b_nwindows;
|
||||||
}
|
}
|
||||||
else if (vgetc_busy
|
else if (vgetc_busy
|
||||||
|
@ -975,4 +975,29 @@ func Test_terminal_vertical()
|
|||||||
call v9.CheckLegacyAndVim9Success(lines)
|
call v9.CheckLegacyAndVim9Success(lines)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Needs to come before Test_hidden_terminal(), why?
|
||||||
|
func Test_autocmd_buffilepost_with_hidden_term()
|
||||||
|
CheckExecutable true
|
||||||
|
new XTestFile
|
||||||
|
defer delete('XTestFile')
|
||||||
|
call setline(1, ['one', 'two', 'three'])
|
||||||
|
call cursor(3, 10)
|
||||||
|
augroup TestCursor
|
||||||
|
au!
|
||||||
|
autocmd BufFilePost * call setbufvar(3, '&tabstop', 4)
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
let buf = term_start(['true'], #{hidden: 1, term_finish: 'close'})
|
||||||
|
call term_wait(buf)
|
||||||
|
redraw!
|
||||||
|
call assert_equal('XTestFile', bufname('%'))
|
||||||
|
call assert_equal([0, 3, 5, 0], getpos('.'))
|
||||||
|
|
||||||
|
augroup TestCursor
|
||||||
|
au!
|
||||||
|
augroup END
|
||||||
|
augroup! TestCursor
|
||||||
|
bw! XTestFile
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
787,
|
||||||
/**/
|
/**/
|
||||||
786,
|
786,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user