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:
parent
589edb3404
commit
bffba7f704
@ -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
|
||||
screen.
|
||||
*lcs-precedes*
|
||||
precedes:c Character to show in the first column, when 'wrap'
|
||||
is off and there is text preceding the character
|
||||
visible in the first column.
|
||||
precedes:c Character to show in the first visible column of the
|
||||
physical line, when there is text preceding the
|
||||
character visible in the first column.
|
||||
*lcs-conceal*
|
||||
conceal:c Character to show in place of concealed text, when
|
||||
'conceallevel' is set to 1.
|
||||
|
@ -2482,7 +2482,9 @@ win_line(
|
||||
// special character (via 'listchars' option "precedes:<char>".
|
||||
if (lcs_prec_todo != NUL
|
||||
&& 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
|
||||
&& filler_todo <= 0
|
||||
#endif
|
||||
|
@ -103,3 +103,58 @@ func Test_scroll_without_region()
|
||||
call StopVimInTerminal(buf)
|
||||
call delete('Xtestscroll')
|
||||
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
|
||||
|
@ -54,6 +54,7 @@ endfunction
|
||||
function! NewWindow(height, width) abort
|
||||
exe a:height . 'new'
|
||||
exe a:width . 'vsp'
|
||||
set winfixwidth winfixheight
|
||||
redraw!
|
||||
endfunction
|
||||
|
||||
|
@ -757,6 +757,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
2060,
|
||||
/**/
|
||||
2059,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user