forked from aniani/vim
patch 9.0.0158: with 'nowrap' "below" property not displayed correctly
Problem: With 'nowrap' "below" property not displayed correctly. Solution: Adjust virtual text with 'nowrap', do not truncate.
This commit is contained in:
@@ -1642,9 +1642,15 @@ win_line(
|
|||||||
--bcol;
|
--bcol;
|
||||||
# endif
|
# endif
|
||||||
// Add any text property that starts in this column.
|
// Add any text property that starts in this column.
|
||||||
|
// With 'nowrap' and not in the first screen line only "below"
|
||||||
|
// text prop can show.
|
||||||
while (text_prop_next < text_prop_count
|
while (text_prop_next < text_prop_count
|
||||||
&& (text_props[text_prop_next].tp_col == MAXCOL
|
&& (text_props[text_prop_next].tp_col == MAXCOL
|
||||||
? *ptr == NUL
|
? (*ptr == NUL
|
||||||
|
&& (wp->w_p_wrap
|
||||||
|
|| wlv.row == startrow
|
||||||
|
|| (text_props[text_prop_next].tp_flags
|
||||||
|
& TP_FLAG_ALIGN_BELOW)))
|
||||||
: bcol >= text_props[text_prop_next].tp_col - 1))
|
: bcol >= text_props[text_prop_next].tp_col - 1))
|
||||||
{
|
{
|
||||||
if (bcol <= text_props[text_prop_next].tp_col - 1
|
if (bcol <= text_props[text_prop_next].tp_col - 1
|
||||||
@@ -1761,7 +1767,8 @@ win_line(
|
|||||||
vim_memset(l, ' ', added);
|
vim_memset(l, ' ', added);
|
||||||
vim_strncpy(l + added, wlv.p_extra,
|
vim_strncpy(l + added, wlv.p_extra,
|
||||||
n_used);
|
n_used);
|
||||||
if (n_used < wlv.n_extra)
|
if (n_used < wlv.n_extra
|
||||||
|
&& wp->w_p_wrap)
|
||||||
{
|
{
|
||||||
char_u *lp = l + added + n_used - 1;
|
char_u *lp = l + added + n_used - 1;
|
||||||
|
|
||||||
@@ -1810,11 +1817,15 @@ win_line(
|
|||||||
}
|
}
|
||||||
else if (text_prop_next < text_prop_count
|
else if (text_prop_next < text_prop_count
|
||||||
&& text_props[text_prop_next].tp_col == MAXCOL
|
&& text_props[text_prop_next].tp_col == MAXCOL
|
||||||
&& *ptr != NUL
|
&& ((*ptr != NUL && ptr[mb_ptr2len(ptr)] == NUL)
|
||||||
&& ptr[mb_ptr2len(ptr)] == NUL)
|
|| (!wp->w_p_wrap
|
||||||
|
&& wlv.col == wp->w_width - 1
|
||||||
|
&& (text_props[text_prop_next].tp_flags
|
||||||
|
& TP_FLAG_ALIGN_BELOW))))
|
||||||
// When at last-but-one character and a text property
|
// When at last-but-one character and a text property
|
||||||
// follows after it, we may need to flush the line after
|
// follows after it, we may need to flush the line after
|
||||||
// displaying that character.
|
// displaying that character.
|
||||||
|
// Or when not wrapping and at the rightmost column.
|
||||||
text_prop_follows = TRUE;
|
text_prop_follows = TRUE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -3461,6 +3472,16 @@ win_line(
|
|||||||
#endif
|
#endif
|
||||||
) || lcs_eol_one == -1)
|
) || lcs_eol_one == -1)
|
||||||
break;
|
break;
|
||||||
|
#ifdef FEAT_PROP_POPUP
|
||||||
|
if (!wp->w_p_wrap)
|
||||||
|
{
|
||||||
|
// do not output more of the line, only the "below" prop
|
||||||
|
ptr += STRLEN(ptr);
|
||||||
|
# ifdef FEAT_LINEBREAK
|
||||||
|
dont_use_showbreak = TRUE;
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// When the window is too narrow draw all "@" lines.
|
// When the window is too narrow draw all "@" lines.
|
||||||
if (wlv.draw_state != WL_LINE
|
if (wlv.draw_state != WL_LINE
|
||||||
|
@@ -0,0 +1,8 @@
|
|||||||
|
|o+0&#ffffff0|n|a|s|d|f| |a|s|d|f| |a|s|d|f| |s|d|f| |d|f| |a|s|d|f| |a|s|d|f| |e| |a|s|d|f| |a|s|d|f| |a|s|d|f| |a|s|d|f| |a|s|d|
|
||||||
|
|t+0#e000e06&|h|e| |q|u|i|c|k| |b|r|o|w|n| |f|o|x| |j|u|m|p|s| |o|v|e|r| |t|h|e| |l|a|z|y| |d|o|g| +0#0000000&@16
|
||||||
|
|t|w>o| @56
|
||||||
|
|~+0#4040ff13&| @58
|
||||||
|
|~| @58
|
||||||
|
|~| @58
|
||||||
|
|~| @58
|
||||||
|
|"+0#0000000&|f|o@1|b|a|r|"| |[|N|e|w|]| @27|2|,|3| @10|A|l@1|
|
@@ -0,0 +1,8 @@
|
|||||||
|
| +0&#ffffff0|a|s|d|f| |a|s|d|f| |a|s|d|f| |a|s|d|f| |a|s|d| |f|a|s| |d>f|t+0#e000e06&|h|e| |q|u|i|c|k| |b|r|o|w|n| |f|o|x| |j|u|m|p|s| |o|v|e
|
||||||
|
|t|h|e| |q|u|i|c|k| |b|r|o|w|n| |f|o|x| |j|u|m|p|s| |o|v|e|r| |t|h|e| |l|a|z|y| |d|o|g| +0#0000000&@16
|
||||||
|
@60
|
||||||
|
|~+0#4040ff13&| @58
|
||||||
|
|~| @58
|
||||||
|
|~| @58
|
||||||
|
|~| @58
|
||||||
|
|"+0#0000000&|f|o@1|b|a|r|"| |[|N|e|w|]| @27|1|,|6@1| @9|A|l@1|
|
@@ -2482,6 +2482,39 @@ func Test_props_with_text_after_nowrap()
|
|||||||
call delete('XscriptPropsAfterNowrap')
|
call delete('XscriptPropsAfterNowrap')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_props_with_text_below_nowrap()
|
||||||
|
CheckRunVimInTerminal
|
||||||
|
|
||||||
|
let lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
edit foobar
|
||||||
|
set nowrap
|
||||||
|
set showbreak=+++\
|
||||||
|
setline(1, ['onasdf asdf asdf sdf df asdf asdf e asdf asdf asdf asdf asd fas df', 'two'])
|
||||||
|
prop_type_add('test', {highlight: 'Special'})
|
||||||
|
prop_add(1, 0, {
|
||||||
|
type: 'test',
|
||||||
|
text: 'the quick brown fox jumps over the lazy dog',
|
||||||
|
text_align: 'after'
|
||||||
|
})
|
||||||
|
prop_add(1, 0, {
|
||||||
|
type: 'test',
|
||||||
|
text: 'the quick brown fox jumps over the lazy dog',
|
||||||
|
text_align: 'below'
|
||||||
|
})
|
||||||
|
normal G$
|
||||||
|
END
|
||||||
|
call writefile(lines, 'XscriptPropsBelowNowrap')
|
||||||
|
let buf = RunVimInTerminal('-S XscriptPropsBelowNowrap', #{rows: 8, cols: 60})
|
||||||
|
call VerifyScreenDump(buf, 'Test_prop_with_text_below_nowrap_1', {})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, "gg$")
|
||||||
|
call VerifyScreenDump(buf, 'Test_prop_with_text_below_nowrap_2', {})
|
||||||
|
|
||||||
|
call StopVimInTerminal(buf)
|
||||||
|
call delete('XscriptPropsBelowNowrap')
|
||||||
|
endfunc
|
||||||
|
|
||||||
func Test_props_with_text_after_split_join()
|
func Test_props_with_text_after_split_join()
|
||||||
CheckRunVimInTerminal
|
CheckRunVimInTerminal
|
||||||
|
|
||||||
|
@@ -735,6 +735,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 */
|
||||||
|
/**/
|
||||||
|
158,
|
||||||
/**/
|
/**/
|
||||||
157,
|
157,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user