1
0
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:
Christian Brabandt 2024-10-15 20:31:14 +02:00
parent 6a1deaf5ad
commit 991657e87d
No known key found for this signature in database
GPG Key ID: F3F92DA383FDDE09
3 changed files with 30 additions and 0 deletions

View File

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

View File

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

View File

@ -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,
/**/ /**/