From 588f20decebebedba3ad733f4f443a597e9747c3 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Tue, 5 Dec 2023 15:47:09 +0100 Subject: [PATCH] patch 9.0.2151: 'breakindent' is not drawn after diff filler lines Problem: 'breakindent' is not drawn after diff filler lines. Solution: Correct check for whether 'breakindent' should be drawn. closes: #13624 Signed-off-by: zeertzjq Signed-off-by: Christian Brabandt --- src/drawline.c | 5 ++- .../Test_diff_breakindent_after_filler.dump | 8 ++++ src/testdir/test_diffmode.vim | 44 ++++++++++++++----- src/version.c | 2 + 4 files changed, 45 insertions(+), 14 deletions(-) create mode 100644 src/testdir/dumps/Test_diff_breakindent_after_filler.dump diff --git a/src/drawline.c b/src/drawline.c index 6909e0f1fd..9f385f033a 100644 --- a/src/drawline.c +++ b/src/drawline.c @@ -498,10 +498,11 @@ handle_breakindent(win_T *wp, winlinevars_T *wlv) { wlv->draw_state = WL_BRI; // if wlv->need_showbreak is set, breakindent also applies - if (wp->w_p_bri && (wlv->row != wlv->startrow || wlv->need_showbreak) + if (wp->w_p_bri && (wlv->row > wlv->startrow # ifdef FEAT_DIFF - && wlv->filler_lines == 0 + + wlv->filler_lines # endif + || wlv->need_showbreak) # ifdef FEAT_PROP_POPUP && !wlv->dont_use_showbreak # endif diff --git a/src/testdir/dumps/Test_diff_breakindent_after_filler.dump b/src/testdir/dumps/Test_diff_breakindent_after_filler.dump new file mode 100644 index 0000000000..d9c48733e9 --- /dev/null +++ b/src/testdir/dumps/Test_diff_breakindent_after_filler.dump @@ -0,0 +1,8 @@ +| +0#0000e05#a8a8a8255@1|a+0#0000000#ffffff0| @18||+1&&| +0#0000e05#a8a8a8255@1|a+0#0000000#ffffff0| @18 +| +0#0000e05#a8a8a8255@1|b+0#0000000#5fd7ff255| @18||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@19 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|c@17||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|c@17 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|c@17||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|c@17 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|c@13| @3||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|c@12>c| @3 +|~+0#4040ff13&| @20||+1#0000000&|~+0#4040ff13&| @20 +|~| @20||+1#0000000&|~+0#4040ff13&| @20 +| +0#0000000&@26|2|,|5|2|-|5|6| @6|A|l@1| diff --git a/src/testdir/test_diffmode.vim b/src/testdir/test_diffmode.vim index e05d916013..930fd7b837 100644 --- a/src/testdir/test_diffmode.vim +++ b/src/testdir/test_diffmode.vim @@ -1097,18 +1097,19 @@ endfunc func Test_diff_with_cursorline_breakindent() CheckScreendump - call writefile([ - \ 'hi CursorLine ctermbg=red ctermfg=white', - \ 'set noequalalways wrap diffopt=followwrap cursorline breakindent', - \ '50vnew', - \ 'call setline(1, [" "," "," "," "])', - \ 'exe "norm 20Afoo\j20Afoo\j20Afoo\j20Abar\"', - \ 'vnew', - \ 'call setline(1, [" "," "," "," "])', - \ 'exe "norm 20Abee\j20Afoo\j20Afoo\j20Abaz\"', - \ 'windo diffthis', - \ '2wincmd w', - \ ], 'Xtest_diff_cursorline_breakindent', 'D') + let lines =<< trim END + hi CursorLine ctermbg=red ctermfg=white + set noequalalways wrap diffopt=followwrap cursorline breakindent + 50vnew + call setline(1, [' ', ' ', ' ', ' ']) + exe "norm! 20Afoo\j20Afoo\j20Afoo\j20Abar\" + vnew + call setline(1, [' ', ' ', ' ', ' ']) + exe "norm! 20Abee\j20Afoo\j20Afoo\j20Abaz\" + windo diffthis + 2wincmd w + END + call writefile(lines, 'Xtest_diff_cursorline_breakindent', 'D') let buf = RunVimInTerminal('-S Xtest_diff_cursorline_breakindent', {}) call term_sendkeys(buf, "gg0") @@ -1124,6 +1125,25 @@ func Test_diff_with_cursorline_breakindent() call StopVimInTerminal(buf) endfunc +func Test_diff_breakindent_after_filler() + CheckScreendump + + let lines =<< trim END + set laststatus=0 diffopt+=followwrap breakindent + call setline(1, ['a', ' ' .. repeat('c', 50)]) + vnew + call setline(1, ['a', 'b', ' ' .. repeat('c', 50)]) + windo diffthis + norm! G$ + END + call writefile(lines, 'Xtest_diff_breakindent_after_filler', 'D') + let buf = RunVimInTerminal('-S Xtest_diff_breakindent_after_filler', #{rows: 8, cols: 45}) + call VerifyScreenDump(buf, 'Test_diff_breakindent_after_filler', {}) + + " clean up + call StopVimInTerminal(buf) +endfunc + func Test_diff_with_syntax() CheckScreendump diff --git a/src/version.c b/src/version.c index 16d13b9fe0..20245cd5a1 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2151, /**/ 2150, /**/