Mercurial > vim
changeset 29026:5baf5e50049b v8.2.5035
patch 8.2.5035: when splitting a window the changelist position moves
Commit: https://github.com/vim/vim/commit/e6f13b473cf2c270e4eab214e09be9825320c11b
Author: zeertzjq <zeertzjq@outlook.com>
Date: Sat May 28 10:49:44 2022 +0100
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 https://github.com/vim/vim/issues/10493)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 28 May 2022 12:00:03 +0200 |
parents | 81a69e9445c8 |
children | 81053eb29ea7 |
files | src/testdir/test_changelist.vim src/testdir/test_normal.vim src/version.c src/window.c |
diffstat | 4 files changed, 41 insertions(+), 28 deletions(-) [+] |
line wrap: on
line diff
--- a/src/testdir/test_changelist.vim +++ b/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
--- a/src/testdir/test_normal.vim +++ b/src/testdir/test_normal.vim @@ -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
--- a/src/version.c +++ b/src/version.c @@ -735,6 +735,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 5035, +/**/ 5034, /**/ 5033,
--- a/src/window.c +++ b/src/window.c @@ -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 */ @@ -1431,6 +1428,10 @@ win_init(win_T *newp, win_T *oldp, int f } 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