Mercurial > vim
changeset 36324:6aad4a5b6c90 draft v9.1.0787
patch 9.1.0787: cursor position changed when using hidden terminal
Commit: https://github.com/vim/vim/commit/991657e87db9a6212e14b10594ca0a008d1ccd1c
Author: Christian Brabandt <cb@256bit.org>
Date: Tue Oct 15 20:31:14 2024 +0200
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>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 15 Oct 2024 20:45:02 +0200 |
parents | fa517c857591 |
children | 8ce1695e1950 |
files | src/terminal.c src/testdir/test_terminal3.vim src/version.c |
diffstat | 3 files changed, 30 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/terminal.c +++ b/src/terminal.c @@ -446,6 +446,7 @@ term_start( buf_T *newbuf; int vertical = opt->jo_vertical || (cmdmod.cmod_split & WSP_VERT); jobopt_T orig_opt; // only partly filled + pos_T save_cursor; if (check_restricted() || check_secure()) return NULL; @@ -518,6 +519,7 @@ term_start( old_curbuf = curbuf; --curbuf->b_nwindows; curbuf = buf; + save_cursor = curwin->w_cursor; curwin->w_buffer = buf; ++curbuf->b_nwindows; } @@ -763,6 +765,7 @@ term_start( --curbuf->b_nwindows; curbuf = old_curbuf; curwin->w_buffer = curbuf; + curwin->w_cursor = save_cursor; ++curbuf->b_nwindows; } else if (vgetc_busy
--- a/src/testdir/test_terminal3.vim +++ b/src/testdir/test_terminal3.vim @@ -975,4 +975,29 @@ func Test_terminal_vertical() call v9.CheckLegacyAndVim9Success(lines) 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