vim-patch:9.0.0758: "precedes" from 'listchars' overwritten by <<<

Problem:    "precedes" from 'listchars' overwritten by <<< for 'smoothscroll'.
Solution:   Keep the "precedes" character.

13cdde3952

Co-authored-by: Bram Moolenaar <Bram@vim.org>
This commit is contained in:
Luuk van Baal 2023-04-27 02:54:51 +02:00
parent 6146400605
commit 72c525d567
3 changed files with 63 additions and 3 deletions

View File

@ -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) {

View File

@ -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)

View File

@ -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