mirror of
https://github.com/vim/vim
synced 2025-07-16 01:01:58 +00:00
patch 9.1.0822: topline might be changed in diff mode unexpectedly
Problem: topline might be changed in diff mode unexpectedly (Jaehwang Jung) Solution: do not re-calculate topline, when using line() func in diff mode. fixes: #15812 closes: #15950 Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
@ -8359,9 +8359,15 @@ f_line(typval_T *argvars, typval_T *rettv)
|
||||
{
|
||||
if (switch_win_noblock(&switchwin, wp, tp, TRUE) == OK)
|
||||
{
|
||||
// in diff mode, prevent that the window scrolls
|
||||
// and keep the topline
|
||||
if (curwin->w_p_diff && switchwin.sw_curwin->w_p_diff)
|
||||
skip_update_topline = TRUE;
|
||||
check_cursor();
|
||||
fp = var2fpos(&argvars[0], TRUE, &fnum, FALSE);
|
||||
}
|
||||
if (curwin->w_p_diff && switchwin.sw_curwin->w_p_diff)
|
||||
skip_update_topline = FALSE;
|
||||
restore_win_noblock(&switchwin, TRUE);
|
||||
}
|
||||
}
|
||||
|
20
src/testdir/dumps/Test_diff_topline_1.dump
Normal file
20
src/testdir/dumps/Test_diff_topline_1.dump
Normal file
@ -0,0 +1,20 @@
|
||||
| +0#0000e05#a8a8a8255@1|9+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|9+0#0000000#ffffff0| @33
|
||||
| +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0|0| @32||+1&&| +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0|0| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255@1| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|2| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|3| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|4| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|5| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|6| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|7| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|8| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|9| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|2+0#0000000#5fd7ff255|0| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1>2+0#0000000#5fd7ff255|1| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|2+0#0000000#5fd7ff255@1| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|2+0#0000000#5fd7ff255|3| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|2+0#0000000#5fd7ff255|4| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|2+0#0000000#5fd7ff255|5| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|2+0#0000000#5fd7ff255|6| @32
|
||||
|[+1&#ffffff0|N|o| |N|a|m|e|]| |[|+|]| @5|1|0|,|1| @10|4|2|%| |[+3&&|N|o| |N|a|m|e|]| |[|+|]| @5|2|1|,|1| @10|1|9|%
|
||||
| +0&&@74
|
20
src/testdir/dumps/Test_diff_topline_2.dump
Normal file
20
src/testdir/dumps/Test_diff_topline_2.dump
Normal file
@ -0,0 +1,20 @@
|
||||
| +0#0000e05#a8a8a8255@1|9+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|9+0#0000000#ffffff0| @33
|
||||
| +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0|0| @32||+1&&| +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0|0| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255@1| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|2| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|3| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|4| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|5| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|6| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|7| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|8| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|9| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|2+0#0000000#5fd7ff255|0| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1>2+0#0000000#5fd7ff255|1| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|2+0#0000000#5fd7ff255@1| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|2+0#0000000#5fd7ff255|3| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|2+0#0000000#5fd7ff255|4| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|2+0#0000000#5fd7ff255|5| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|2+0#0000000#5fd7ff255|6| @32
|
||||
|[+1&#ffffff0|N|o| |N|a|m|e|]| |[|+|]| @5|1|0|,|1| @10|4|2|%| |[+3&&|N|o| |N|a|m|e|]| |[|+|]| @5|2|1|,|1| @10|1|9|%
|
||||
|9+0&&| @73
|
20
src/testdir/dumps/Test_diff_topline_3.dump
Normal file
20
src/testdir/dumps/Test_diff_topline_3.dump
Normal file
@ -0,0 +1,20 @@
|
||||
|++0#0000e05#a8a8a8255| |+|-@1| @1|4| |l|i|n|e|s|:| |1|-@19||+1#0000000#ffffff0|++0#0000e05#a8a8a8255| |+|-@1| @1|4| |l|i|n|e|s|:| |1|-@19
|
||||
| @1|5+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|5+0#0000000#ffffff0| @33
|
||||
| +0#0000e05#a8a8a8255@1|6+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|6+0#0000000#ffffff0| @33
|
||||
| +0#0000e05#a8a8a8255@1|7+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|7+0#0000000#ffffff0| @33
|
||||
| +0#0000e05#a8a8a8255@1|8+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|8+0#0000000#ffffff0| @33
|
||||
| +0#0000e05#a8a8a8255@1|9+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|9+0#0000000#ffffff0| @33
|
||||
| +0#0000e05#a8a8a8255@1>1+0#0000000#ffffff0|0| @32||+1&&| +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0|0| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255@1| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|2| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|3| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|4| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|5| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|6| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|7| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|8| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|9| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|2+0#0000000#5fd7ff255|0| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|2+0#0000000#5fd7ff255|1| @32
|
||||
|[+3&#ffffff0|N|o| |N|a|m|e|]| |[|+|]| @5|1|0|,|1| @10|T|o|p| |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @5|1|0|,|1| @10|T|o|p
|
||||
| +0&&@74
|
20
src/testdir/dumps/Test_diff_topline_4.dump
Normal file
20
src/testdir/dumps/Test_diff_topline_4.dump
Normal file
@ -0,0 +1,20 @@
|
||||
|++0#0000e05#a8a8a8255| |+|-@1| @1|4| |l|i|n|e|s|:| |1|-@19||+1#0000000#ffffff0|++0#0000e05#a8a8a8255| |+|-@1| @1|4| |l|i|n|e|s|:| |1|-@19
|
||||
| @1|5+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|5+0#0000000#ffffff0| @33
|
||||
| +0#0000e05#a8a8a8255@1|6+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|6+0#0000000#ffffff0| @33
|
||||
| +0#0000e05#a8a8a8255@1|7+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|7+0#0000000#ffffff0| @33
|
||||
| +0#0000e05#a8a8a8255@1|8+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|8+0#0000000#ffffff0| @33
|
||||
| +0#0000e05#a8a8a8255@1|9+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|9+0#0000000#ffffff0| @33
|
||||
| +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0|0| @32||+1&&| +0#0000e05#a8a8a8255@1>1+0#0000000#ffffff0|0| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255@1| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|2| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|3| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|4| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|5| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|6| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|7| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|8| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255|9| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|2+0#0000000#5fd7ff255|0| @32
|
||||
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|2+0#0000000#5fd7ff255|1| @32
|
||||
|[+1&#ffffff0|N|o| |N|a|m|e|]| |[|+|]| @5|1|0|,|1| @10|T|o|p| |[+3&&|N|o| |N|a|m|e|]| |[|+|]| @5|1|0|,|1| @10|T|o|p
|
||||
| +0&&@74
|
@ -2258,4 +2258,31 @@ func Test_diff_overlapped_diff_blocks_will_be_merged()
|
||||
call WriteDiffFiles3(buf, ["a", "b", "c"], ["a", "x", "c"], ["a", "b", "y", "c"])
|
||||
call VerifyBoth(buf, "Test_diff_overlapped_3.37", "")
|
||||
|
||||
call StopVimInTerminal(buf)
|
||||
endfunc
|
||||
|
||||
" switching windows in diff mode caused an unneccessary scroll
|
||||
func Test_diff_topline_noscroll()
|
||||
CheckScreendump
|
||||
|
||||
let content =<< trim END
|
||||
call setline(1, range(1,60))
|
||||
vnew
|
||||
call setline(1, range(1,10) + range(50,60))
|
||||
windo diffthis
|
||||
norm! G
|
||||
exe "norm! 30\<C-y>"
|
||||
END
|
||||
call writefile(content, 'Xcontent', 'D')
|
||||
let buf = RunVimInTerminal('-S Xcontent', {'rows': 20})
|
||||
call VerifyScreenDump(buf, 'Test_diff_topline_1', {})
|
||||
call term_sendkeys(buf, ":echo line('w0', 1001)\<cr>")
|
||||
call term_wait(buf)
|
||||
call VerifyScreenDump(buf, 'Test_diff_topline_2', {})
|
||||
call term_sendkeys(buf, "\<C-W>p")
|
||||
call term_wait(buf)
|
||||
call VerifyScreenDump(buf, 'Test_diff_topline_3', {})
|
||||
call term_sendkeys(buf, "\<C-W>p")
|
||||
call term_wait(buf)
|
||||
call VerifyScreenDump(buf, 'Test_diff_topline_4', {})
|
||||
call StopVimInTerminal(buf)
|
||||
|
@ -704,6 +704,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
822,
|
||||
/**/
|
||||
821,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user