Fix "precedes" listchar behavior in wrap mode

Previously, the "precedes" character would be rendered on every row
when w_skipcol > 0 (i.e., when viewing a single line longer than the
entire screen), instead of just on the first row. Make sure to only
render it on the first row in this case.

Add a test for this behavior.

Fix documentation for the "precedes" character, which erroneously
stated that it was only active when wrap mode was off.
This commit is contained in:
Zach Wegner
2019-09-15 14:16:44 -05:00
committed by Justin M. Keyes
parent 45447e3b64
commit 18e5869f56
3 changed files with 27 additions and 4 deletions

View File

@@ -3698,9 +3698,8 @@ 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 column, when there is
is off and there is text preceding the character text preceding the character visible in the first column.
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. A space when omitted. 'conceallevel' is set to 1. A space when omitted.

View File

@@ -3763,7 +3763,7 @@ win_line (
*/ */
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)
&& filler_todo <= 0 && filler_todo <= 0
&& draw_state > WL_NR && draw_state > WL_NR
&& c != NUL) { && c != NUL) {

View File

@@ -657,6 +657,30 @@ describe("'listchars' highlight", function()
]]) ]])
end) 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() it("'listchar' in visual mode", function()
screen:set_default_attr_ids({ screen:set_default_attr_ids({
[1] = {background=Screen.colors.Grey90}, [1] = {background=Screen.colors.Grey90},