1
0
forked from aniani/vim

patch 9.0.0451: virtual text "above" does not work with 'nowrap'

Problem:    Virtual text "above" does not work with 'nowrap'.
Solution:   Do wrap the line after. (closes #11084)
This commit is contained in:
Bram Moolenaar
2022-09-12 17:51:07 +01:00
parent 7b2d87220c
commit c9dc03fff5
8 changed files with 50 additions and 13 deletions

View File

@@ -666,6 +666,7 @@ win_line(
// syntax_attr
int text_prop_id = 0; // active property ID
int text_prop_flags = 0;
int text_prop_above = FALSE; // first doing virtual text above
int text_prop_follows = FALSE; // another text prop to display
int saved_search_attr = 0; // search_attr to be used when n_extra
// goes to zero
@@ -1784,6 +1785,7 @@ win_line(
// Sort the properties on priority and/or starting last.
// Then combine the attributes, highest priority last.
text_prop_above = FALSE;
text_prop_follows = FALSE;
sort_text_props(wp->w_buffer, text_props,
text_prop_idxs, text_props_active);
@@ -1817,6 +1819,8 @@ win_line(
char_u *p = ((char_u **)wp->w_buffer
->b_textprop_text.ga_data)[
-text_prop_id - 1];
int above = (tp->tp_flags
& TP_FLAG_ALIGN_ABOVE);
// reset the ID in the copy to avoid it being used
// again
@@ -1826,8 +1830,6 @@ win_line(
{
int right = (tp->tp_flags
& TP_FLAG_ALIGN_RIGHT);
int above = (tp->tp_flags
& TP_FLAG_ALIGN_ABOVE);
int below = (tp->tp_flags
& TP_FLAG_ALIGN_BELOW);
int wrap = (tp->tp_flags & TP_FLAG_WRAP);
@@ -1902,6 +1904,9 @@ win_line(
// If another text prop follows the condition below at
// the last window column must know.
// If this is an "above" text prop and 'nowrap' the we
// must wrap anyway.
text_prop_above = above;
text_prop_follows = other_tpi != -1;
}
}
@@ -3581,7 +3586,7 @@ win_line(
|| filler_todo > 0
#endif
#ifdef FEAT_PROP_POPUP
|| text_prop_follows
|| text_prop_above || text_prop_follows
#endif
|| (wp->w_p_list && wp->w_lcs_chars.eol != NUL
&& wlv.p_extra != at_end_str)
@@ -3608,12 +3613,12 @@ win_line(
&& filler_todo <= 0
#endif
#ifdef FEAT_PROP_POPUP
&& !text_prop_follows
&& !text_prop_above && !text_prop_follows
#endif
) || lcs_eol_one == -1)
break;
#ifdef FEAT_PROP_POPUP
if (!wp->w_p_wrap && text_prop_follows)
if (!wp->w_p_wrap && text_prop_follows && !text_prop_above)
{
// do not output more of the line, only the "below" prop
ptr += STRLEN(ptr);
@@ -3647,7 +3652,7 @@ win_line(
&& filler_todo <= 0
#endif
#ifdef FEAT_PROP_POPUP
&& !text_prop_follows
&& !text_prop_above && !text_prop_follows
#endif
&& wp->w_width == Columns)
{