aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuuk van Baal <luukvbaal@gmail.com>2023-04-27 02:54:51 +0200
committerLuuk van Baal <luukvbaal@gmail.com>2023-05-02 13:11:47 +0200
commit72c525d5675bc017fa52bcc74a394db7d01e6359 (patch)
tree94c69643a2bccc47af5ab6034482019d952b98a1
parent6146400605af93ac48dae4393569c44e8a2e39d2 (diff)
downloadrneovim-72c525d5675bc017fa52bcc74a394db7d01e6359.tar.gz
rneovim-72c525d5675bc017fa52bcc74a394db7d01e6359.tar.bz2
rneovim-72c525d5675bc017fa52bcc74a394db7d01e6359.zip
vim-patch:9.0.0758: "precedes" from 'listchars' overwritten by <<<
Problem: "precedes" from 'listchars' overwritten by <<< for 'smoothscroll'. Solution: Keep the "precedes" character. https://github.com/vim/vim/commit/13cdde39520220bb856cba16626327c706752b51 Co-authored-by: Bram Moolenaar <Bram@vim.org>
-rw-r--r--src/nvim/grid.c9
-rw-r--r--test/functional/legacy/scroll_opt_spec.lua32
-rw-r--r--test/old/testdir/test_scroll_opt.vim25
3 files changed, 63 insertions, 3 deletions
diff --git a/src/nvim/grid.c b/src/nvim/grid.c
index 8431c078b9..9e830413bd 100644
--- a/src/nvim/grid.c
+++ b/src/nvim/grid.c
@@ -530,9 +530,12 @@ void grid_put_linebuf(ScreenGrid *grid, int row, int coloff, int endcol, int cle
max_off_from = linebuf_size;
max_off_to = grid->line_offset[row] + (size_t)grid->cols;
- if (topline && wp->w_skipcol > 0 && *get_showbreak_value(wp) == NUL) {
- // Take care of putting "<<<" on the first line for 'smoothscroll'
- // when 'showbreak' is not set.
+ // Take care of putting "<<<" on the first line for 'smoothscroll'.
+ if (topline && wp->w_skipcol > 0
+ // do not overwrite the 'showbreak' text with "<<<"
+ && *get_showbreak_value(wp) == NUL
+ // do not overwrite the 'listchars' "precedes" text with "<<<"
+ && !(wp->w_p_list && wp->w_p_lcs_chars.prec != 0)) {
int off = 0;
int skip = 0;
if (wp->w_p_nu && wp->w_p_rnu) {
diff --git a/test/functional/legacy/scroll_opt_spec.lua b/test/functional/legacy/scroll_opt_spec.lua
index 5e54470bd4..b5a571d8b5 100644
--- a/test/functional/legacy/scroll_opt_spec.lua
+++ b/test/functional/legacy/scroll_opt_spec.lua
@@ -294,6 +294,38 @@ describe('smoothscroll', function()
]])
end)
+ -- oldtest: Test_smoothscroll_list()
+ it("works with list mode", function()
+ screen:try_resize(40, 8)
+ exec([[
+ set smoothscroll scrolloff=0
+ set list
+ call setline(1, [ 'one', 'very long text '->repeat(12), 'three', ])
+ exe "normal 2Gzt\<C-E>"
+ ]])
+ screen:expect([[
+ <<<t very long text very long text very |
+ ^long text very long text very long text |
+ very long text very long text very long |
+ text very long text- |
+ three |
+ ~ |
+ ~ |
+ |
+ ]])
+ exec('set listchars+=precedes:#')
+ screen:expect([[
+ #ext very long text very long text very |
+ ^long text very long text very long text |
+ very long text very long text very long |
+ text very long text- |
+ three |
+ ~ |
+ ~ |
+ |
+ ]])
+ end)
+
-- oldtest: Test_smoothscroll_diff_mode()
it("works with diff mode", function()
screen:try_resize(40, 8)
diff --git a/test/old/testdir/test_scroll_opt.vim b/test/old/testdir/test_scroll_opt.vim
index c394c6adf8..423cba76bf 100644
--- a/test/old/testdir/test_scroll_opt.vim
+++ b/test/old/testdir/test_scroll_opt.vim
@@ -172,6 +172,31 @@ func Test_smoothscroll_number()
call StopVimInTerminal(buf)
endfunc
+func Test_smoothscroll_list()
+ CheckScreendump
+
+ let lines =<< trim END
+ vim9script
+ set smoothscroll scrolloff=0
+ set list
+ setline(1, [
+ 'one',
+ 'very long text '->repeat(12),
+ 'three',
+ ])
+ exe "normal 2Gzt\<C-E>"
+ END
+ call writefile(lines, 'XSmoothList', 'D')
+ let buf = RunVimInTerminal('-S XSmoothList', #{rows: 8, cols: 40})
+
+ call VerifyScreenDump(buf, 'Test_smooth_list_1', {})
+
+ call term_sendkeys(buf, ":set listchars+=precedes:#\<CR>")
+ call VerifyScreenDump(buf, 'Test_smooth_list_2', {})
+
+ call StopVimInTerminal(buf)
+endfunc
+
func Test_smoothscroll_diff_mode()
CheckScreendump