From 1e6bbfb5607c82d872070219c26e2aae20db68ed Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 3 Apr 2021 13:19:26 +0200 Subject: [PATCH] patch 8.2.2695: cursor position reset with nested autocommands Problem: Cursor position reset with nested autocommands. Solution: Only check and reset line numbers for not nested autocommands. (closes #5820) --- src/autocmd.c | 10 ++++++---- src/testdir/test_terminal.vim | 27 +++++++++++++++++++++++++++ src/version.c | 2 ++ 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/autocmd.c b/src/autocmd.c index ede8e7dbe..4c12e729e 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 a82ad8c52..e3a4b6e6a 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 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 661a93cd8..1eeaaa6f5 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2695, /**/ 2694, /**/ -- 2.50.1