diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-08-28 21:20:16 +0200 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2023-08-28 21:21:46 +0200 |
commit | 1d3e0e8f3110a7807431eae056914ccea57b057b (patch) | |
tree | 9645ae44d0b927957ea7b0dcf9804bb497fb3e03 | |
parent | 93ebb5e75e564403624314c84c97293427d001d6 (diff) |
patch 9.0.1813: linebreak incorrect drawn with breakindentv9.0.1813
Problem: 'linebreak' is incorrectly drawn after 'breakindent'.
Solution: Don't include 'breakindent' size when already after it.
closes: #12937
closes: #12940
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: zeertzjq <zeertzjq@outlook.com>
-rw-r--r-- | src/charset.c | 24 | ||||
-rw-r--r-- | src/drawline.c | 8 | ||||
-rw-r--r-- | src/testdir/test_display.vim | 11 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 22 insertions, 23 deletions
diff --git a/src/charset.c b/src/charset.c index 1c7f7d7913..03ef3fd1c6 100644 --- a/src/charset.c +++ b/src/charset.c @@ -1319,6 +1319,9 @@ win_lbr_chartabsize( vcol -= wp->w_virtcol_first_char; #endif colnr_T wcol = vcol + col_off_prev; + colnr_T max_head_vcol = cts->cts_max_head_vcol; + int added = 0; + // cells taken by 'showbreak'/'breakindent' before current char int head_prev = 0; if (wcol >= wp->w_width) @@ -1332,23 +1335,18 @@ win_lbr_chartabsize( if (wp->w_p_bri) head_prev += get_breakindent_win(wp, line); if (wcol < head_prev) - wcol = head_prev; - wcol += col_off_prev; - } - - if ((vcol > 0 && wcol == col_off_prev + head_prev) - || wcol + size > wp->w_width) - { - int added = 0; - colnr_T max_head_vcol = cts->cts_max_head_vcol; - - if (vcol > 0 && wcol == col_off_prev + head_prev) { + head_prev -= wcol; + wcol += head_prev; added += head_prev; if (max_head_vcol <= 0 || vcol < max_head_vcol) head += head_prev; } + wcol += col_off_prev; + } + if (wcol + size > wp->w_width) + { // cells taken by 'showbreak'/'breakindent' halfway current char int head_mid = 0; if (*sbr != NUL) @@ -1384,9 +1382,9 @@ win_lbr_chartabsize( } #endif } - - size += added; } + + size += added; } if (headp != NULL) *headp = head; diff --git a/src/drawline.c b/src/drawline.c index 5b5fbf2383..63bc96c4da 100644 --- a/src/drawline.c +++ b/src/drawline.c @@ -2887,14 +2887,6 @@ win_line( wlv.n_extra = win_lbr_chartabsize(&cts, NULL) - 1; clear_chartabsize_arg(&cts); - // We have just drawn the showbreak value, no need to add - // space for it again. - if (wlv.vcol == wlv.vcol_sbr) - { - wlv.n_extra -= MB_CHARLEN(get_showbreak_value(wp)); - if (wlv.n_extra < 0) - wlv.n_extra = 0; - } if (on_last_col && c != TAB) // Do not continue search/match highlighting over the // line break, but for TABs the highlighting should diff --git a/src/testdir/test_display.vim b/src/testdir/test_display.vim index f817a8502d..55764ba160 100644 --- a/src/testdir/test_display.vim +++ b/src/testdir/test_display.vim @@ -410,12 +410,19 @@ func Test_display_linebreak_breakat() new vert resize 25 let _breakat = &breakat - setl signcolumn=yes linebreak breakat=) showbreak=+\ + setl signcolumn=yes linebreak breakat=) showbreak=++ call setline(1, repeat('x', winwidth(0) - 2) .. ')abc') let lines = ScreenLines([1, 2], 25) let expected = [ \ ' xxxxxxxxxxxxxxxxxxxxxxx', - \ ' + )abc ' + \ ' ++)abc ', + \ ] + call assert_equal(expected, lines) + setl breakindent breakindentopt=shift:2 + let lines = ScreenLines([1, 2], 25) + let expected = [ + \ ' xxxxxxxxxxxxxxxxxxxxxxx', + \ ' ++)abc ', \ ] call assert_equal(expected, lines) %bw! diff --git a/src/version.c b/src/version.c index 46f2676a10..7b8683e7cb 100644 --- a/src/version.c +++ b/src/version.c @@ -700,6 +700,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1813, +/**/ 1812, /**/ 1811, |