summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-04-03 13:19:26 +0200
committerBram Moolenaar <Bram@vim.org>2021-04-03 13:19:26 +0200
commit1e6bbfb5607c82d872070219c26e2aae20db68ed (patch)
tree4ce3964ede62bb6e8960e76b294211b62c11f54e
parent5b8cabfef7c3707f3e53e13844d90e5a217e1e84 (diff)
patch 8.2.2695: cursor position reset with nested autocommandsv8.2.2695
Problem: Cursor position reset with nested autocommands. Solution: Only check and reset line numbers for not nested autocommands. (closes #5820)
-rw-r--r--src/autocmd.c10
-rw-r--r--src/testdir/test_terminal.vim27
-rw-r--r--src/version.c2
3 files changed, 35 insertions, 4 deletions
diff --git a/src/autocmd.c b/src/autocmd.c
index ede8e7dbe0..4c12e729e0 100644
--- a/src/autocmd.c
+++ b/src/autocmd.c
@@ -2116,14 +2116,16 @@ apply_autocmds_group(
ap->last = FALSE;
ap->last = TRUE;
- // make sure cursor and topline are valid
- check_lnums(TRUE);
+ if (nesting == 1)
+ // make sure cursor and topline are valid
+ check_lnums(TRUE);
do_cmdline(NULL, getnextac, (void *)&patcmd,
DOCMD_NOWAIT|DOCMD_VERBOSE|DOCMD_REPEAT);
- // restore cursor and topline, unless they were changed
- reset_lnums();
+ if (nesting == 1)
+ // restore cursor and topline, unless they were changed
+ reset_lnums();
#ifdef FEAT_EVAL
if (eap != NULL)
diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim
index a82ad8c52b..e3a4b6e6a9 100644
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -2002,5 +2002,32 @@ func Test_terminal_all_ansi_colors()
call delete('Xcolorscript')
endfunc
+function On_BufFilePost()
+ doautocmd <nomodeline> User UserEvent
+endfunction
+
+func Test_terminal_nested_autocmd()
+ new
+ call setline(1, range(500))
+ $
+ let lastline = line('.')
+
+ augroup TermTest
+ autocmd BufFilePost * call On_BufFilePost()
+ autocmd User UserEvent silent
+ augroup END
+
+ let cmd = Get_cat_123_cmd()
+ let buf = term_start(cmd, #{term_finish: 'close', hidden: 1})
+ call assert_equal(lastline, line('.'))
+
+ call TermWait(buf)
+ exe buf . 'bwipe'
+ call delete('Xtext')
+ augroup TermTest
+ au!
+ augroup END
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 661a93cd8d..1eeaaa6f54 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2695,
+/**/
2694,
/**/
2693,