0
0
mirror of https://github.com/vim/vim.git synced 2025-09-27 04:14:06 -04:00

patch 9.0.0438: cannot put virtual text above a line

Problem:    Cannot put virtual text above a line.
Solution:   Add the "above" value for "text_align".
This commit is contained in:
Bram Moolenaar
2022-09-10 20:00:56 +01:00
parent 55e9366e32
commit 04e0ed1ddf
11 changed files with 198 additions and 103 deletions

View File

@@ -1069,40 +1069,6 @@ lbr_chartabsize_adv(chartabsize_T *cts)
return retval;
}
#if defined(FEAT_PROP_POPUP) || defined(PROTO)
/*
* Return the cell size of virtual text after truncation.
*/
int
textprop_size_after_trunc(
win_T *wp,
int below,
int added,
char_u *text,
int *n_used_ptr)
{
int space = below ? wp->w_width : added;
int len = (int)STRLEN(text);
int strsize = 0;
int n_used;
// if the remaining size is to small wrap
// anyway and use the next line
if (space < PROP_TEXT_MIN_CELLS)
space += wp->w_width;
for (n_used = 0; n_used < len; n_used += (*mb_ptr2len)(text + n_used))
{
int clen = ptr2cells(text + n_used);
if (strsize + clen > space)
break;
strsize += clen;
}
*n_used_ptr = n_used;
return strsize;
}
#endif
/*
* Return the screen size of the character indicated by "cts".
* "cts->cts_cur_text_width" is set to the extra size for a text property that
@@ -1142,6 +1108,7 @@ win_lbr_chartabsize(
#if defined(FEAT_PROP_POPUP)
cts->cts_cur_text_width = 0;
cts->cts_first_char = 0;
#endif
#if defined(FEAT_LINEBREAK) || defined(FEAT_PROP_POPUP)
@@ -1194,9 +1161,12 @@ win_lbr_chartabsize(
if (tp->tp_id < 0
&& ((tp->tp_col - 1 >= col
&& tp->tp_col - 1 < col + charlen)
|| (tp->tp_col == MAXCOL && (s[0] == NUL || s[1] == NUL)
&& cts->cts_with_trailing))
&& -tp->tp_id - 1 < gap->ga_len)
|| (tp->tp_col == MAXCOL
&& ((tp->tp_flags & TP_FLAG_ALIGN_ABOVE)
? col == 0
: (s[0] == NUL || s[1] == NUL)
&& cts->cts_with_trailing)))
&& tp->tp_id - 1 < gap->ga_len)
{
char_u *p = ((char_u **)gap->ga_data)[-tp->tp_id - 1];
@@ -1218,6 +1188,8 @@ win_lbr_chartabsize(
else
cells = vim_strsize(p);
cts->cts_cur_text_width += cells;
if (tp->tp_flags & TP_FLAG_ALIGN_ABOVE)
cts->cts_first_char += cells;
cts->cts_start_incl = tp->tp_flags & TP_FLAG_START_INCL;
size += cells;
if (*s == TAB)
@@ -1564,6 +1536,11 @@ getvcol(
#endif
break;
}
#ifdef FEAT_PROP_POPUP
if (cursor == &wp->w_virtcol && cts.cts_ptr == cts.cts_line)
// do not count the virtual text above for w_curswant
wp->w_virtcol_first_char = cts.cts_first_char;
#endif
if (posptr != NULL && cts.cts_ptr >= posptr)
// character at pos->col