diff options
author | Sean Dewar <seandewar@users.noreply.github.com> | 2021-09-10 13:14:50 +0100 |
---|---|---|
committer | Sean Dewar <seandewar@users.noreply.github.com> | 2021-09-10 15:52:07 +0100 |
commit | b91609a70d6b7be2f067cefc178c9bb749c33b07 (patch) | |
tree | 74c345762cc6de9b8298d4aa024d5d0fe75f67ba /src | |
parent | fd1dbb103bb78f04dd15b50f529bb12d922e98eb (diff) | |
download | rneovim-b91609a70d6b7be2f067cefc178c9bb749c33b07.tar.gz rneovim-b91609a70d6b7be2f067cefc178c9bb749c33b07.tar.bz2 rneovim-b91609a70d6b7be2f067cefc178c9bb749c33b07.zip |
vim-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 vim/vim#8262)
https://github.com/vim/vim/commit/a06e345af5b8261c072c95b0446e67cfda439848
Add a modeline to test_display.vim.
This introduced a regression fixed by v8.2.3391.
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/screen.c | 7 | ||||
-rw-r--r-- | src/nvim/testdir/test_display.vim | 18 |
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 |