To: vim_dev@googlegroups.com Subject: Patch 9.0.0077 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ 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 -- Bram@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 ///