Skip to content

Commit

Permalink
patch 8.2.5035: when splitting a window the changelist position moves
Browse files Browse the repository at this point in the history
Problem:    When splitting a window the changelist position moves.
Solution:   Set the changelist index a bit later. (closes #10493)
  • Loading branch information
zeertzjq authored and brammool committed May 28, 2022
1 parent 5a6ec10 commit e6f13b4
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 28 deletions.
35 changes: 35 additions & 0 deletions src/testdir/test_changelist.vim
@@ -1,5 +1,40 @@
" 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
func Test_changelist_index()
edit Xfile1.txt
Expand Down
25 changes: 0 additions & 25 deletions src/testdir/test_normal.vim
Expand Up @@ -3228,31 +3228,6 @@ func Test_gr_command()
enew!
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()
%bwipeout!
let l:nr = bufnr('%') + 1
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -734,6 +734,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
5035,
/**/
5034,
/**/
Expand Down
7 changes: 4 additions & 3 deletions src/window.c
Expand Up @@ -1354,9 +1354,6 @@ win_split_ins(
p_wh = size;
}

// Keep same changelist position in new window.
wp->w_changelistidx = oldwin->w_changelistidx;

/*
* make the new window the current window
*/
Expand Down Expand Up @@ -1431,6 +1428,10 @@ win_init(win_T *newp, win_T *oldp, int flags UNUSED)
}
newp->w_tagstackidx = oldp->w_tagstackidx;
newp->w_tagstacklen = oldp->w_tagstacklen;

// Keep same changelist position in new window.
newp->w_changelistidx = oldp->w_changelistidx;

#ifdef FEAT_FOLDING
copyFoldingState(oldp, newp);
#endif
Expand Down

0 comments on commit e6f13b4

Please sign in to comment.