aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/screen.c7
-rw-r--r--src/nvim/testdir/test_display.vim18
2 files changed, 25 insertions, 0 deletions
diff --git a/src/nvim/screen.c b/src/nvim/screen.c
index 2fea20de55..a9d362538a 100644
--- a/src/nvim/screen.c
+++ b/src/nvim/screen.c
@@ -3554,6 +3554,13 @@ static int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool noc
char_u *p = ptr - (mb_off + 1);
// TODO: is passing p for start of the line OK?
n_extra = win_lbr_chartabsize(wp, line, p, (colnr_T)vcol, NULL) - 1;
+
+ // We have just drawn the showbreak value, no need to add
+ // space for it again
+ if (vcol == vcol_sbr) {
+ n_extra -= MB_CHARLEN(get_showbreak_value(wp));
+ }
+
if (c == TAB && n_extra + col > grid->Columns) {
n_extra = tabstop_padding(vcol, wp->w_buffer->b_p_ts,
wp->w_buffer->b_p_vts_array) - 1;
diff --git a/src/nvim/testdir/test_display.vim b/src/nvim/testdir/test_display.vim
index c702b44b88..12327f34d6 100644
--- a/src/nvim/testdir/test_display.vim
+++ b/src/nvim/testdir/test_display.vim
@@ -262,3 +262,21 @@ func Test_display_scroll_at_topline()
call StopVimInTerminal(buf)
endfunc
+
+func Test_display_linebreak_breakat()
+ new
+ vert resize 25
+ let _breakat = &breakat
+ 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 '
+ \ ]
+ call assert_equal(expected, lines)
+ %bw!
+ let &breakat=_breakat
+endfunc
+
+" vim: shiftwidth=2 sts=2 expandtab