diff src/drawline.c @ 30759:b41ccaa6fd84 v9.0.0714

patch 9.0.0714: with 'nowrap' two virtual text below not displayed correctly Commit: https://github.com/vim/vim/commit/1206c163dbc8caace86e53f375f298af6cfab75a Author: Bram Moolenaar <Bram@vim.org> Date: Mon Oct 10 15:40:04 2022 +0100 patch 9.0.0714: with 'nowrap' two virtual text below not displayed correctly Problem: With 'nowrap' two virtual text below not displayed correctly. Solution: Set text_prop_follows before continuing. Correct for number column. (closes #11333)
author Bram Moolenaar <Bram@vim.org>
date Mon, 10 Oct 2022 16:45:05 +0200
parents 6fe513996997
children 8ea77a6ceff0
line wrap: on
line diff
--- a/src/drawline.c
+++ b/src/drawline.c
@@ -578,7 +578,7 @@ textprop_size_after_trunc(
 	int	*n_used_ptr)
 {
     int	space = (flags & (TP_FLAG_ALIGN_BELOW | TP_FLAG_ALIGN_ABOVE))
-							 ? wp->w_width : added;
+				       ? wp->w_width - win_col_off(wp) : added;
     int len = (int)STRLEN(text);
     int strsize = 0;
     int n_used;
@@ -634,6 +634,8 @@ text_prop_position(
     int	    strsize = vim_strsize(*p_extra);
     int	    cells = wrap ? strsize : textprop_size_after_trunc(wp,
 			     tp->tp_flags, before, padding, *p_extra, &n_used);
+    int	    cont_on_next_line = below && col_with_padding > win_col_off(wp)
+							      && !wp->w_p_wrap;
 
     if (wrap || right || above || below || padding > 0 || n_used < *n_extra)
     {
@@ -736,7 +738,11 @@ text_prop_position(
 		*n_attr = mb_charlen(*p_extra);
 		if (above)
 		    *n_attr -= padding + after;
-		*n_attr_skip = before + padding + skip_add;
+
+		// Add "skip_add" when starting a new line or wrapping,
+		// n_attr_skip will then be decremented in the number column.
+		*n_attr_skip = before + padding
+			    + (cont_on_next_line || before > 0 ? skip_add : 0);
 	    }
 	}
     }
@@ -1917,6 +1923,7 @@ win_line(
 							   -text_prop_id - 1];
 			int	    above = (tp->tp_flags
 							& TP_FLAG_ALIGN_ABOVE);
+			int	    bail_out = FALSE;
 
 			// reset the ID in the copy to avoid it being used
 			// again
@@ -2003,7 +2010,7 @@ win_line(
 					break;
 				    }
 				    win_line_start(wp, &wlv, TRUE);
-				    continue;
+				    bail_out = TRUE;
 				}
 			    }
 			}
@@ -2017,6 +2024,10 @@ win_line(
 			    && (wp->w_p_wrap
 				   || (text_props[other_tpi].tp_flags
 			       & (TP_FLAG_ALIGN_BELOW | TP_FLAG_ALIGN_RIGHT)));
+
+			if (bail_out)
+			    // starting a new line for "below"
+			    continue;
 		    }
 		}
 		else if (text_prop_next < text_prop_count