0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.1.2060: "precedes" in 'listchars' not used properly

Problem:    "precedes" in 'listchars' not used properly.
Solution:   Correctly handle the "precedes" char in list mode for long lines.
            (Christian Brabandt, closes #4953)
This commit is contained in:
Bram Moolenaar 2019-09-20 17:00:17 +02:00
parent 589edb3404
commit bffba7f704
5 changed files with 64 additions and 4 deletions

View File

@ -4842,9 +4842,9 @@ A jump table for the options with a short description can be found at |Q_op|.
off and the line continues beyond the right of the off and the line continues beyond the right of the
screen. screen.
*lcs-precedes* *lcs-precedes*
precedes:c Character to show in the first column, when 'wrap' precedes:c Character to show in the first visible column of the
is off and there is text preceding the character physical line, when there is text preceding the
visible in the first column. character visible in the first column.
*lcs-conceal* *lcs-conceal*
conceal:c Character to show in place of concealed text, when conceal:c Character to show in place of concealed text, when
'conceallevel' is set to 1. 'conceallevel' is set to 1.

View File

@ -2482,7 +2482,9 @@ win_line(
// special character (via 'listchars' option "precedes:<char>". // special character (via 'listchars' option "precedes:<char>".
if (lcs_prec_todo != NUL if (lcs_prec_todo != NUL
&& wp->w_p_list && wp->w_p_list
&& (wp->w_p_wrap ? wp->w_skipcol > 0 : wp->w_leftcol > 0) && (wp->w_p_wrap ?
(wp->w_skipcol > 0 && row == 0) :
wp->w_leftcol > 0)
#ifdef FEAT_DIFF #ifdef FEAT_DIFF
&& filler_todo <= 0 && filler_todo <= 0
#endif #endif

View File

@ -103,3 +103,58 @@ func Test_scroll_without_region()
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
call delete('Xtestscroll') call delete('Xtestscroll')
endfunc endfunc
func Test_display_listchars_precedes()
call NewWindow(10, 10)
" Need a physical line that wraps over the complete
" window size
call append(0, repeat('aaa aaa aa ', 10))
call append(1, repeat(['bbb bbb bbb bbb'], 2))
" remove blank trailing line
$d
set list nowrap
call cursor(1, 1)
" move to end of line and scroll 2 characters back
norm! $2zh
let lines=ScreenLines([1,4], winwidth(0)+1)
let expect = [
\ " aaa aa $ |",
\ "$ |",
\ "$ |",
\ "~ |",
\ ]
call assert_equal(expect, lines)
set list listchars+=precedes:< nowrap
call cursor(1, 1)
" move to end of line and scroll 2 characters back
norm! $2zh
let lines = ScreenLines([1,4], winwidth(0)+1)
let expect = [
\ "<aaa aa $ |",
\ "< |",
\ "< |",
\ "~ |",
\ ]
call assert_equal(expect, lines)
set wrap
call cursor(1, 1)
" the complete line should be displayed in the window
norm! $
let lines = ScreenLines([1,10], winwidth(0)+1)
let expect = [
\ "<aaa aaa a|",
\ "a aaa aaa |",
\ "aa aaa aaa|",
\ " aa aaa aa|",
\ "a aa aaa a|",
\ "aa aa aaa |",
\ "aaa aa aaa|",
\ " aaa aa aa|",
\ "a aaa aa a|",
\ "aa aaa aa |",
\ ]
call assert_equal(expect, lines)
set list& listchars& wrap&
bw!
endfunc

View File

@ -54,6 +54,7 @@ endfunction
function! NewWindow(height, width) abort function! NewWindow(height, width) abort
exe a:height . 'new' exe a:height . 'new'
exe a:width . 'vsp' exe a:width . 'vsp'
set winfixwidth winfixheight
redraw! redraw!
endfunction endfunction

View File

@ -757,6 +757,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
2060,
/**/ /**/
2059, 2059,
/**/ /**/