diff src/charset.c @ 29718:538204fce2a4 v9.0.0199

patch 9.0.0199: cursor position wrong with two right-aligned virtual texts Commit: https://github.com/vim/vim/commit/f0ccfa474a5c4940d03bfc6084e896dc8ac2d791 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Aug 13 16:41:19 2022 +0100 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 https://github.com/vim/vim/issues/10906)
author Bram Moolenaar <Bram@vim.org>
date Sat, 13 Aug 2022 17:45:03 +0200
parents fc0f93590fd4
children 0eeab24d3faf
line wrap: on
line diff
--- a/src/charset.c
+++ b/src/charset.c
@@ -1181,6 +1181,7 @@ win_lbr_chartabsize(
 		    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 @@ win_lbr_chartabsize(
 			    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