mirror of
https://github.com/vim/vim.git
synced 2026-05-28 00:21:37 +02:00
patch 9.1.2118: 'cursorline' missing after :diffput to empty buf
Problem: 'cursorline' and part of 'statusline' are missing after
:diffput to an empty buffer.
Solution: Make sure the cursor doesn't go beyond the last line after
:diffput (zeertzjq)
related: neovim/neovim#37621
closes: #19281
Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
cfe9d83a85
commit
ce1e562fda
@@ -4224,7 +4224,13 @@ ex_diffgetput(exarg_T *eap)
|
||||
// Adjust the cursor position if it's in/after the changed
|
||||
// lines.
|
||||
if (curwin->w_cursor.lnum >= lnum + count)
|
||||
{
|
||||
curwin->w_cursor.lnum += added;
|
||||
// When the buffer was previously empty, the cursor may
|
||||
// now be beyond the last line, so clamp cursor lnum.
|
||||
curwin->w_cursor.lnum = MIN(curwin->w_cursor.lnum,
|
||||
curbuf->b_ml.ml_line_count);
|
||||
}
|
||||
else if (added < 0)
|
||||
curwin->w_cursor.lnum = lnum;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
| +0#0000e05#a8a8a8255@1>f+8#0000000#5fd7ff255|o@1| @31||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
|
||||
| +0#0000e05#a8a8a8255@1|b+0#0000000#5fd7ff255|a|r| @31||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
|
||||
| +0#0000e05#a8a8a8255@1|b+0#0000000#5fd7ff255|a|z| @31||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
|
||||
|~+0&#ffffff0| @35||+1#0000000&| +0#0000e05#a8a8a8255@1| +8#0000000#ffffff0@34
|
||||
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|[+3#0000000&|N|o| |N|a|m|e|]| |[|+|]| @5|1|,|1| @11|A|l@1| |[+1&&|N|o| |N|a|m|e|]| @9|0|,|0|-|1| @9|A|l@1
|
||||
| +0&&@74
|
||||
@@ -0,0 +1,20 @@
|
||||
| +0#0000e05#a8a8a8255@1>f+8#0000000#ffffff0|o@1| @31||+1&&| +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @31
|
||||
| +0#0000e05#a8a8a8255@1|b+0#0000000#ffffff0|a|r| @31||+1&&| +0#0000e05#a8a8a8255@1|b+0#0000000#ffffff0|a|r| @31
|
||||
| +0#0000e05#a8a8a8255@1|b+0#0000000#ffffff0|a|z| @31||+1&&| +0#0000e05#a8a8a8255@1|b+8#0000000#ffffff0|a|z| @31
|
||||
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|[+3#0000000&|N|o| |N|a|m|e|]| |[|+|]| @5|1|,|1| @11|A|l@1| |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @5|3|,|1| @11|A|l@1
|
||||
| +0&&@74
|
||||
@@ -0,0 +1,20 @@
|
||||
| +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @31||+1&&| +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @31
|
||||
| +0#0000e05#a8a8a8255@1>b+8#0000000#ffffff0|a|r| @31||+1&&| +0#0000e05#a8a8a8255@1|b+8#0000000#ffffff0|a|r| @31
|
||||
| +0#0000e05#a8a8a8255@1|b+0#0000000#ffffff0|a|z| @31||+1&&| +0#0000e05#a8a8a8255@1|b+0#0000000#ffffff0|a|z| @31
|
||||
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|[+3#0000000&|N|o| |N|a|m|e|]| |[|+|]| @5|2|,|1| @11|A|l@1| |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @5|2|,|1| @11|A|l@1
|
||||
| +0&&@74
|
||||
@@ -3598,4 +3598,30 @@ func Test_diffexpr_wipe_buffers()
|
||||
call StopVimInTerminal(buf)
|
||||
endfunc
|
||||
|
||||
func Test_diffput_to_empty_buf()
|
||||
CheckScreendump
|
||||
|
||||
let lines =<< trim END
|
||||
call setline(1, ['foo', 'bar', 'baz'])
|
||||
rightbelow vnew
|
||||
windo diffthis
|
||||
windo set cursorline nofoldenable
|
||||
wincmd t
|
||||
END
|
||||
call writefile(lines, 'Xtest_diffput_to_empty_buf', 'D')
|
||||
|
||||
let buf = RunVimInTerminal('-S Xtest_diffput_to_empty_buf', {})
|
||||
call VerifyScreenDump(buf, 'Test_diffput_to_empty_buf_01', {})
|
||||
call term_sendkeys(buf, '0') " Trigger an initial 'cursorbind' check.
|
||||
call VerifyScreenDump(buf, 'Test_diffput_to_empty_buf_01', {})
|
||||
call term_sendkeys(buf, ":diffput | echo\<CR>")
|
||||
call VerifyScreenDump(buf, 'Test_diffput_to_empty_buf_02', {})
|
||||
call term_sendkeys(buf, ":redraw!\<CR>")
|
||||
call VerifyScreenDump(buf, 'Test_diffput_to_empty_buf_02', {})
|
||||
call term_sendkeys(buf, 'j')
|
||||
call VerifyScreenDump(buf, 'Test_diffput_to_empty_buf_03', {})
|
||||
|
||||
call StopVimInTerminal(buf)
|
||||
endfunc
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
|
||||
@@ -734,6 +734,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
2118,
|
||||
/**/
|
||||
2117,
|
||||
/**/
|
||||
|
||||
Reference in New Issue
Block a user