changeset 31257:6ebd92646276 v9.0.0962

patch 9.0.0962: virtual text below cannot be placed below empty lines Commit: https://github.com/vim/vim/commit/38854b565acba39eff36cf3c6396c911bf072bdc Author: porygonisaduck <alvaradx@umich.edu> Date: Sun Nov 27 20:55:05 2022 +0000 patch 9.0.0962: virtual text below cannot be placed below empty lines Problem: Virtual text below cannot be placed below empty lines. Solution: Add one character. (James Alvarado, closes https://github.com/vim/vim/issues/11606, closes https://github.com/vim/vim/issues/11520)
author Bram Moolenaar <Bram@vim.org>
date Sun, 27 Nov 2022 22:00:03 +0100
parents 4dd9809b5c9c
children 83cca39db17d
files src/drawline.c src/testdir/dumps/Test_prop_below_after_empty_1.dump src/testdir/test_textprop.vim src/version.c
diffstat 4 files changed, 53 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/drawline.c
+++ b/src/drawline.c
@@ -621,7 +621,7 @@ textprop_size_after_trunc(
 text_prop_position(
 	win_T	    *wp,
 	textprop_T  *tp,
-	int	    vcol UNUSED,    // current text column
+	int	    vcol,	    // current text column
 	int	    scr_col,	    // current screen column
 	int	    *n_extra,	    // nr of bytes for virtual text
 	char_u	    **p_extra,	    // virtual text
@@ -633,7 +633,7 @@ text_prop_position(
     int	    below = (tp->tp_flags & TP_FLAG_ALIGN_BELOW);
     int	    wrap = (tp->tp_flags & TP_FLAG_WRAP);
     int	    padding = tp->tp_col == MAXCOL && tp->tp_len > 1
-				  ? tp->tp_len - 1 : 0;
+							  ? tp->tp_len - 1 : 0;
     int	    col_with_padding = scr_col + (below ? 0 : padding);
     int	    room = wp->w_width - col_with_padding;
     int	    before = room;	// spaces before the text
@@ -661,11 +661,16 @@ text_prop_position(
 	    // Right-align: fill with before
 	    if (right)
 		before -= cells;
+
+	    // Below-align: empty line add one character
+	    if (below && vcol == 0 && col_with_padding == 0
+						      && wp->w_width == before)
+		col_with_padding = 1;
+
 	    if (before < 0
 		    || !(right || below)
-		    || (below
-			? (col_with_padding <= col_off || !wp->w_p_wrap)
-			: (n_used < *n_extra)))
+		    || (below ? (col_with_padding <= col_off || !wp->w_p_wrap)
+			      : (n_used < *n_extra)))
 	    {
 		if (right && (wrap
 			      || (room < PROP_TEXT_MIN_CELLS && wp->w_p_wrap)))
new file mode 100644
--- /dev/null
+++ b/src/testdir/dumps/Test_prop_below_after_empty_1.dump
@@ -0,0 +1,8 @@
+>v+0&#ffffff0|i|m|9|s|c|r|i|p|t| @49
+@60
+@1|T+0#ffffff16#e000002|h|e| |q|u|i|c|k| |b|r|o|w|n| |f|o|x| |j|u|m|p|s| |o|v|e|r| |t|h|e| |l|a|z|y| |d|o|g| +0#0000000#ffffff0@15
+|t|h|r|e@1| @54
+@60
+|T+0&#ffd7ff255|h|e| |s|l|o|w| |f|o|x| |b|u|m|p|s| |i|n|t|o| |t|h|e| |l|a|z|y| |d|o|g| +0&#ffffff0@23
+|~+0#4040ff13&| @58
+| +0#0000000&@41|1|,|1| @10|A|l@1| 
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -2714,6 +2714,39 @@ func Test_props_with_text_after_below_tr
   call StopVimInTerminal(buf)
 endfunc
 
+func Test_prop_with_text_below_after_empty()
+  CheckRunVimInTerminal
+
+  let lines =<< trim END
+      vim9script
+      
+      setline(1, ['vim9script', '', 'three', ''])
+
+      # Add text prop below empty line 2 with padding.
+      prop_type_add('test', {highlight: 'ErrorMsg'})
+      prop_add(2, 0, {
+           type: 'test',
+           text: 'The quick brown fox jumps over the lazy dog',
+           text_align: 'below',
+           text_padding_left: 1,
+      })
+
+      # Add text prop below empty line 4 without padding.
+      prop_type_add('other', {highlight: 'DiffChange'})
+      prop_add(4, 0, {
+           type: 'other',
+           text: 'The slow fox bumps into the lazy dog',
+           text_align: 'below',
+           text_padding_left: 0,
+      })
+  END
+  call writefile(lines, 'XscriptPropBelowAfterEmpty', 'D')
+  let buf = RunVimInTerminal('-S XscriptPropBelowAfterEmpty', #{rows: 8, cols: 60})
+  call VerifyScreenDump(buf, 'Test_prop_below_after_empty_1', {}) 
+
+  call StopVimInTerminal(buf)
+endfunc
+
 func Test_prop_with_text_below_after_match()
   CheckRunVimInTerminal
 
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    962,
+/**/
     961,
 /**/
     960,