diff src/charset.c @ 34441:84a5cafeb34c v9.1.0140

patch 9.1.0140: cursor on wrong row after 1 char 'below' virtual text when EOL is shown Commit: https://github.com/vim/vim/commit/da0c9137d1ec96f4d79b818502d2f921a21f710e Author: Dylan Thacker-Smith <dylan.ah.smith@gmail.com> Date: Tue Feb 27 20:25:10 2024 +0100 patch 9.1.0140: cursor on wrong row after 1 char 'below' virtual text when EOL is shown Problem: The cursor screen row was incorrectly being calculated when the cursor follows a 1 character text_align 'below' virtual text line, resulting in the cursor being shown on the wrong line. This was caused by a cell size of 2 instead of 1 being used for the EOL character, which propagated to the calculation of space for putting the 'below' virtual text on its own line. (rickhowe) Solution: Fix the size used for the EOL character in calculating the cursor's screen position (Dylan Thacker-Smith) fixes: #11959 related: #12028 closes: #14096 Signed-off-by: Dylan Thacker-Smith <dylan.ah.smith@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Tue, 27 Feb 2024 20:30:03 +0100
parents f9b706e23b10
children 9e093c96dff6
line wrap: on
line diff
--- a/src/charset.c
+++ b/src/charset.c
@@ -1160,8 +1160,12 @@ win_lbr_chartabsize(
      * First get the normal size, without 'linebreak' or text properties
      */
     size = win_chartabsize(wp, s, vcol);
-    if (*s == NUL && !has_lcs_eol)
-	size = 0;  // NUL is not displayed
+    if (*s == NUL)
+    {
+	// 1 cell for EOL list char (if present), as opposed to the two cell ^@
+	// for a NUL character in the text.
+	size = has_lcs_eol ? 1 : 0;
+    }
 # ifdef FEAT_LINEBREAK
     int is_doublewidth = has_mbyte && size == 2 && MB_BYTE2LEN(*s) > 1;
 # endif