vim-patch:8.2.5035: when splitting a window the changelist position moves

Problem:    When splitting a window the changelist position moves.
Solution:   Set the changelist index a bit later. (closes vim/vim#10493)
e6f13b473c

Cherry-pick Test_nv_hat_count() change from patch 8.2.1593.
This commit is contained in:
zeertzjq 2022-07-23 09:27:31 +08:00
parent 91c99eed54
commit 9d556fc81f
3 changed files with 40 additions and 29 deletions

View File

@ -1,5 +1,40 @@
" Tests for the changelist functionality " Tests for the changelist functionality
" When splitting a window the changelist position is wrong.
" Test the changelist position after splitting a window.
" Test for the bug fixed by 7.4.386
func Test_changelist()
let save_ul = &ul
enew!
call append('$', ['1', '2'])
exe "normal i\<C-G>u"
exe "normal Gkylpa\<C-G>u"
set ul=100
exe "normal Gylpa\<C-G>u"
set ul=100
normal gg
vsplit
normal g;
call assert_equal([3, 2], [line('.'), col('.')])
normal g;
call assert_equal([2, 2], [line('.'), col('.')])
call assert_fails('normal g;', 'E662:')
new
call assert_fails('normal g;', 'E664:')
%bwipe!
let &ul = save_ul
endfunc
" Moving a split should not change its changelist index.
func Test_changelist_index_move_split()
exe "norm! iabc\<C-G>u\ndef\<C-G>u\nghi"
vsplit
normal 99g;
call assert_equal(0, getchangelist('%')[1])
wincmd L
call assert_equal(0, getchangelist('%')[1])
endfunc
" Tests for the getchangelist() function " Tests for the getchangelist() function
func Test_changelist_index() func Test_changelist_index()
edit Xfile1.txt edit Xfile1.txt

View File

@ -2849,35 +2849,10 @@ func Test_gr_command()
enew! enew!
endfunc endfunc
" When splitting a window the changelist position is wrong.
" Test the changelist position after splitting a window.
" Test for the bug fixed by 7.4.386
func Test_changelist()
let save_ul = &ul
enew!
call append('$', ['1', '2'])
exe "normal i\<C-G>u"
exe "normal Gkylpa\<C-G>u"
set ul=100
exe "normal Gylpa\<C-G>u"
set ul=100
normal gg
vsplit
normal g;
call assert_equal([3, 2], [line('.'), col('.')])
normal g;
call assert_equal([2, 2], [line('.'), col('.')])
call assert_fails('normal g;', 'E662:')
new
call assert_fails('normal g;', 'E664:')
%bwipe!
let &ul = save_ul
endfunc
func Test_nv_hat_count() func Test_nv_hat_count()
%bwipeout! %bwipeout!
let l:nr = bufnr('%') + 1 let l:nr = bufnr('%') + 1
call assert_fails(':execute "normal! ' . l:nr . '\<C-^>"', 'E92') call assert_fails(':execute "normal! ' . l:nr . '\<C-^>"', 'E92:')
edit Xfoo edit Xfoo
let l:foo_nr = bufnr('Xfoo') let l:foo_nr = bufnr('Xfoo')

View File

@ -1501,9 +1501,6 @@ int win_split_ins(int size, int flags, win_T *new_wp, int dir)
} }
} }
// Keep same changelist position in new window.
wp->w_changelistidx = oldwin->w_changelistidx;
// make the new window the current window // make the new window the current window
win_enter_ext(wp, WEE_TRIGGER_NEW_AUTOCMDS | WEE_TRIGGER_ENTER_AUTOCMDS win_enter_ext(wp, WEE_TRIGGER_NEW_AUTOCMDS | WEE_TRIGGER_ENTER_AUTOCMDS
| WEE_TRIGGER_LEAVE_AUTOCMDS); | WEE_TRIGGER_LEAVE_AUTOCMDS);
@ -1574,6 +1571,10 @@ static void win_init(win_T *newp, win_T *oldp, int flags)
} }
newp->w_tagstackidx = oldp->w_tagstackidx; newp->w_tagstackidx = oldp->w_tagstackidx;
newp->w_tagstacklen = oldp->w_tagstacklen; newp->w_tagstacklen = oldp->w_tagstacklen;
// Keep same changelist position in new window.
newp->w_changelistidx = oldp->w_changelistidx;
copyFoldingState(oldp, newp); copyFoldingState(oldp, newp);
win_init_some(newp, oldp); win_init_some(newp, oldp);