Patch 9.0.0077
Problem: When switching window in autocmd the restored cursor position may
be wrong.
Solution: Do not restore the cursor if it was not set. (closes #10775)
Files: src/window.c, src/testdir/test_autocmd.vim,
src/testdir/dumps/Test_autocmd_nested_switch.dump
*** ../vim-9.0.0076/src/window.c 2022-07-23 09:06:23.620970749 +0100
--- src/window.c 2022-07-26 13:42:51.188077625 +0100
***************
*** 6832,6841 ****
FOR_ALL_TAB_WINDOWS(tp, wp)
if (wp->w_buffer == curbuf)
{
! // Restore the value if the autocommand didn't change it.
! if (EQUAL_POS(wp->w_save_cursor.w_cursor_corr, wp->w_cursor))
wp->w_cursor = wp->w_save_cursor.w_cursor_save;
! if (wp->w_save_cursor.w_topline_corr == wp->w_topline)
wp->w_topline = wp->w_save_cursor.w_topline_save;
}
}
--- 6832,6844 ----
FOR_ALL_TAB_WINDOWS(tp, wp)
if (wp->w_buffer == curbuf)
{
! // Restore the value if the autocommand didn't change it and it was
! // set.
! if (EQUAL_POS(wp->w_save_cursor.w_cursor_corr, wp->w_cursor)
! && wp->w_save_cursor.w_cursor_save.lnum != 0)
wp->w_cursor = wp->w_save_cursor.w_cursor_save;
! if (wp->w_save_cursor.w_topline_corr == wp->w_topline
! && wp->w_save_cursor.w_topline_save != 0)
wp->w_topline = wp->w_save_cursor.w_topline_save;
}
}
*** ../vim-9.0.0076/src/testdir/test_autocmd.vim 2022-07-23 09:06:23.624970753 +0100
--- src/testdir/test_autocmd.vim 2022-07-26 13:38:09.004441383 +0100
***************
*** 2317,2325 ****
--- 2317,2346 ----
au!
augroup END
set laststatus&
+ cclose
bwipe!
endfunc
+ func Test_autocmd_nested_switch_window()
+ " run this in a separate Vim so that SafeState works
+ CheckRunVimInTerminal
+
+ let lines =<< trim END
+ vim9script
+ ['()']->writefile('Xautofile')
+ autocmd VimEnter * ++nested edit Xautofile | split
+ autocmd BufReadPost * autocmd SafeState * ++once foldclosed('.')
+ autocmd WinEnter * matchadd('ErrorMsg', 'pat')
+ END
+ call writefile(lines, 'Xautoscript')
+ let buf = RunVimInTerminal('-S Xautoscript', {'rows': 10})
+ call VerifyScreenDump(buf, 'Test_autocmd_nested_switch', {})
+
+ call StopVimInTerminal(buf)
+ call delete('Xautofile')
+ call delete('Xautoscript')
+ endfunc
+
func Test_autocmd_once()
" Without ++once WinNew triggers twice
let g:did_split = 0
***************
*** 2631,2637 ****
func Test_autocmd_SafeState()
CheckRunVimInTerminal
- let g:test_is_flaky = 1
let lines =<< trim END
let g:safe = 0
--- 2652,2657 ----
*** ../vim-9.0.0076/src/testdir/dumps/Test_autocmd_nested_switch.dump 2022-07-26 13:46:23.067773251 +0100
--- src/testdir/dumps/Test_autocmd_nested_switch.dump 2022-07-26 13:40:10.144292559 +0100
***************
*** 0 ****
--- 1,10 ----
+ >(+0&#ffffff0|)| @72
+ |~+0#4040ff13&| @73
+ |~| @73
+ |~| @73
+ |X+3#0000000&|a|u|t|o|f|i|l|e| @47|1|,|1| @11|A|l@1
+ |(+0&&|)| @72
+ |~+0#4040ff13&| @73
+ |~| @73
+ |X+1#0000000&|a|u|t|o|f|i|l|e| @47|1|,|1| @11|A|l@1
+ |"+0&&|X|a|u|t|o|f|i|l|e|"| |1|L|,| |3|B| @56
*** ../vim-9.0.0076/src/version.c 2022-07-26 12:24:38.242801624 +0100
--- src/version.c 2022-07-26 12:58:58.614932736 +0100
***************
*** 737,738 ****
--- 737,740 ----
{ /* Add new patch number below this line */
+ /**/
+ 77,
/**/
--
hundred-and-one symptoms of being an internet addict:
133. You communicate with people on other continents more than you
do with your own neighbors.
/// Bram Moolenaar -- Br...@Moolenaar.net --
http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features --
http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims --
http://ICCF-Holland.org ///