mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 9.1.0222: missing 'below' virt text if truncation precedes after/right text
Problem: When a line is truncated just before 'after'/'right' virtual text and the line also has 'below' virtual text, then the 'below' virtual text would not be displayed, depending on the order these text properties were added. Solution: In the loop to make text properties active, skip instead of break for 'after'/'right' virtual text properties that are ignored due to truncation, so following 'below' text properties can still be made active. Similarly, a loop is needed to determine if a text property follows at the end of the screen. (Dylan Thacker-Smith) related: #14307 Signed-off-by: Dylan Thacker-Smith <dylan.ah.smith@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
b6fac4db36
commit
fe0a76b2bc
@@ -2073,24 +2073,29 @@ win_line(
|
||||
--bcol;
|
||||
# endif
|
||||
// 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
|
||||
&& (text_props[text_prop_next].tp_col == MAXCOL
|
||||
? ((*ptr == NUL
|
||||
&& (wp->w_p_wrap
|
||||
|| wlv.row == startrow
|
||||
|| (text_props[text_prop_next].tp_flags
|
||||
& TP_FLAG_ALIGN_BELOW)))
|
||||
? (*ptr == NUL
|
||||
|| (bcol == 0
|
||||
&& (text_props[text_prop_next].tp_flags
|
||||
& TP_FLAG_ALIGN_ABOVE)))
|
||||
: bcol >= text_props[text_prop_next].tp_col - 1))
|
||||
{
|
||||
// With 'nowrap' and not in the first screen line only "below"
|
||||
// text prop can show.
|
||||
if (text_props[text_prop_next].tp_col == MAXCOL
|
||||
|| bcol <= text_props[text_prop_next].tp_col - 1
|
||||
? (wp->w_p_wrap
|
||||
|| wlv.row == startrow
|
||||
|| (text_props[text_prop_next].tp_flags
|
||||
& TP_FLAG_ALIGN_BELOW)
|
||||
|| (bcol == 0
|
||||
&& (text_props[text_prop_next].tp_flags
|
||||
& TP_FLAG_ALIGN_ABOVE)))
|
||||
: bcol <= text_props[text_prop_next].tp_col - 1
|
||||
+ text_props[text_prop_next].tp_len)
|
||||
{
|
||||
text_prop_idxs[text_props_active++] = text_prop_next;
|
||||
}
|
||||
++text_prop_next;
|
||||
}
|
||||
|
||||
@@ -2321,7 +2326,6 @@ win_line(
|
||||
}
|
||||
}
|
||||
else if (text_prop_next < text_prop_count
|
||||
&& text_props[text_prop_next].tp_col == MAXCOL
|
||||
&& ((*ptr != NUL && ptr[mb_ptr2len(ptr)] == NUL)
|
||||
|| (!wp->w_p_wrap && wlv.col == wp->w_width - 1)))
|
||||
{
|
||||
@@ -2329,10 +2333,21 @@ win_line(
|
||||
// follows after it, we may need to flush the line after
|
||||
// displaying that character.
|
||||
// Or when not wrapping and at the rightmost column.
|
||||
|
||||
int only_below_follows = !wp->w_p_wrap && wlv.col == wp->w_width - 1;
|
||||
if (!only_below_follows
|
||||
|| (text_props[text_prop_next].tp_flags & TP_FLAG_ALIGN_BELOW))
|
||||
// TODO: Store "after"/"right"/"below" text properties in order
|
||||
// in the buffer so only `text_props[text_prop_count - 1]`
|
||||
// needs to be checked for following "below" virtual text
|
||||
for (int i = text_prop_next; i < text_prop_count; ++i)
|
||||
{
|
||||
if (text_props[i].tp_col == MAXCOL
|
||||
&& (!only_below_follows
|
||||
|| (text_props[i].tp_flags & TP_FLAG_ALIGN_BELOW)))
|
||||
{
|
||||
text_prop_follows = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -3099,6 +3099,9 @@ func Test_props_with_text_truncated_just_before_after()
|
||||
call term_sendkeys(buf, ":call AddPropBelow()\<CR>")
|
||||
call VerifyScreenDump(buf, 'Test_props_with_text_truncated_just_before_after_2', {})
|
||||
|
||||
call term_sendkeys(buf, ":call AddPropRight()\<CR>:\<Esc>")
|
||||
call VerifyScreenDump(buf, 'Test_props_with_text_truncated_just_before_after_2', {})
|
||||
|
||||
call StopVimInTerminal(buf)
|
||||
endfunc
|
||||
|
||||
|
@@ -704,6 +704,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
222,
|
||||
/**/
|
||||
221,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user