mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge #11034 from zwegner/precedes
Fix "precedes" listchar behavior in wrap mode
This commit is contained in:
commit
c534ab8447
@ -3698,9 +3698,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. A space when omitted.
|
||||
|
@ -3756,14 +3756,12 @@ win_line (
|
||||
char_attr = hl_combine_attr(char_attr, extra_attr);
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle the case where we are in column 0 but not on the first
|
||||
* character of the line and the user wants us to show us a
|
||||
* special character (via 'listchars' option "precedes:<char>".
|
||||
*/
|
||||
// Handle the case where we are in column 0 but not on the first
|
||||
// character of the line and the user wants us to show us a
|
||||
// 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)
|
||||
&& filler_todo <= 0
|
||||
&& draw_state > WL_NR
|
||||
&& c != NUL) {
|
||||
|
@ -69,3 +69,58 @@ func! Test_display_foldtext_mbyte()
|
||||
set foldtext& fillchars& foldmethod& fdc&
|
||||
bw!
|
||||
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
|
||||
|
@ -42,6 +42,7 @@ endfunction
|
||||
function! NewWindow(height, width) abort
|
||||
exe a:height . 'new'
|
||||
exe a:width . 'vsp'
|
||||
set winfixwidth winfixheight
|
||||
redraw!
|
||||
endfunction
|
||||
|
||||
|
@ -657,6 +657,30 @@ describe("'listchars' highlight", function()
|
||||
]])
|
||||
end)
|
||||
|
||||
it("'listchar' with wrap", function()
|
||||
screen:set_default_attr_ids({
|
||||
[0] = {bold=true, foreground=Screen.colors.Blue},
|
||||
})
|
||||
feed_command('set wrap')
|
||||
feed_command('set listchars=eol:¬,precedes:< list')
|
||||
feed('90ia<esc>')
|
||||
screen:expect([[
|
||||
{0:<}aaaaaaaaaaaaaaaaaaa|
|
||||
aaaaaaaaaaaaaaaaaaaa|
|
||||
aaaaaaaaaaaaaaaaaaaa|
|
||||
aaaaaaaaa^a{0:¬} |
|
||||
|
|
||||
]])
|
||||
feed('0')
|
||||
screen:expect([[
|
||||
^aaaaaaaaaaaaaaaaaaaa|
|
||||
aaaaaaaaaaaaaaaaaaaa|
|
||||
aaaaaaaaaaaaaaaaaaaa|
|
||||
aaaaaaaaaaaaaaaaaaaa|
|
||||
|
|
||||
]])
|
||||
end)
|
||||
|
||||
it("'listchar' in visual mode", function()
|
||||
screen:set_default_attr_ids({
|
||||
[1] = {background=Screen.colors.Grey90},
|
||||
|
Loading…
Reference in New Issue
Block a user