0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 9.0.0077: wrong restored cursor position when switching window in autocmd

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)
This commit is contained in:
Bram Moolenaar
2022-07-26 13:47:13 +01:00
parent 92a1678d48
commit b03950fafa
4 changed files with 39 additions and 4 deletions

View File

@@ -0,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

View File

@@ -2317,9 +2317,30 @@ func Test_autocmd_nested_cursor_invalid()
au! au!
augroup END augroup END
set laststatus& set laststatus&
cclose
bwipe! bwipe!
endfunc 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() func Test_autocmd_once()
" Without ++once WinNew triggers twice " Without ++once WinNew triggers twice
let g:did_split = 0 let g:did_split = 0
@@ -2631,7 +2652,6 @@ endfunc
func Test_autocmd_SafeState() func Test_autocmd_SafeState()
CheckRunVimInTerminal CheckRunVimInTerminal
let g:test_is_flaky = 1
let lines =<< trim END let lines =<< trim END
let g:safe = 0 let g:safe = 0

View File

@@ -735,6 +735,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
77,
/**/ /**/
76, 76,
/**/ /**/

View File

@@ -6832,10 +6832,13 @@ reset_lnums()
FOR_ALL_TAB_WINDOWS(tp, wp) FOR_ALL_TAB_WINDOWS(tp, wp)
if (wp->w_buffer == curbuf) if (wp->w_buffer == curbuf)
{ {
// Restore the value if the autocommand didn't change it. // Restore the value if the autocommand didn't change it and it was
if (EQUAL_POS(wp->w_save_cursor.w_cursor_corr, wp->w_cursor)) // 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; wp->w_cursor = wp->w_save_cursor.w_cursor_save;
if (wp->w_save_cursor.w_topline_corr == wp->w_topline) 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; wp->w_topline = wp->w_save_cursor.w_topline_save;
} }
} }