# HG changeset patch # User Bram Moolenaar # Date 1622304003 -7200 # Node ID 03492b62d79a7d802a8c438efc03677e8120e592 # Parent 8cd32b8e1b3c9beb71eca5ea796d458a1a19d784 patch 8.2.2903: cursor position wrong on wrapped line with 'signcolumn' Commit: https://github.com/vim/vim/commit/a06e345af5b8261c072c95b0446e67cfda439848 Author: Bram Moolenaar Date: Sat May 29 17:56:37 2021 +0200 patch 8.2.2903: cursor position wrong on wrapped line with 'signcolumn' Problem: Cursor position wrong on wrapped line with 'signcolumn'. Solution: Don't add space for showbreak twice. (Christian Brabandt, closes #8262) diff --git a/src/drawline.c b/src/drawline.c --- a/src/drawline.c +++ b/src/drawline.c @@ -1981,6 +1981,12 @@ win_line( // 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 > wp->w_width) # ifdef FEAT_VARTABS n_extra = tabstop_padding(vcol, wp->w_buffer->b_p_ts, diff --git a/src/testdir/test_display.vim b/src/testdir/test_display.vim --- a/src/testdir/test_display.vim +++ b/src/testdir/test_display.vim @@ -334,4 +334,21 @@ func Test_fold_fillchars() set fillchars& fdc& foldmethod& foldenable& 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 diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2903, +/**/ 2902, /**/ 2901,