patch 9.0.0199: cursor position wrong with two right-aligned virtual texts
Problem: Cursor position wrong with two right-aligned virtual texts.
Solution: Add the padding for right-alignment. (issue #10906)
diff --git a/src/charset.c b/src/charset.c
index 2975cdb..a795984 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -1181,6 +1181,7 @@
if (tp->tp_col == MAXCOL)
{
int below = (tp->tp_flags & TP_FLAG_ALIGN_BELOW);
+ int right = (tp->tp_flags & TP_FLAG_ALIGN_RIGHT);
int wrap = (tp->tp_flags & TP_FLAG_WRAP);
int len = (int)STRLEN(p);
int n_used = len;
@@ -1193,10 +1194,19 @@
cells = textprop_size_after_trunc(wp,
below, added, p, &n_used);
}
- // right-aligned does not really matter here, same as
- // "after"
if (below)
cells += wp->w_width - (vcol + size) % wp->w_width;
+ else if (right)
+ {
+ len = wp->w_width - vcol % wp->w_width;
+ if (len > cells + size)
+ // add the padding for right-alignment
+ cells = len - size;
+ else if (len == 0)
+ // padding to right-align in the next line
+ cells += cells > wp->w_width ? 0
+ :wp->w_width - cells;
+ }
#ifdef FEAT_LINEBREAK
no_sbr = TRUE; // don't use 'showbreak' now
#endif