changeset 31788:7d0025a2940a v9.0.1226

patch 9.0.1226: spurious empty line when using text properties Commit: https://github.com/vim/vim/commit/51b2fc2ef5183487dc1acd9f526e904e5bda7814 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Jan 21 15:54:59 2023 +0000 patch 9.0.1226: spurious empty line when using text properties Problem: Spurious empty line when using text propertie and virtual text. Solution: Do not set "text_prop_follows" when the other text property is not virtual text. (closes #11846)
author Bram Moolenaar <Bram@vim.org>
date Sat, 21 Jan 2023 17:00:41 +0100
parents fb4192bcb42a
children a38f4bb86bc5
files src/drawline.c src/testdir/dumps/Test_textprop_nesting.dump src/testdir/test_textprop.vim src/version.c
diffstat 4 files changed, 39 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/drawline.c
+++ b/src/drawline.c
@@ -2016,7 +2016,8 @@ win_line(
 			    text_prop_type = pt;
 			    text_prop_attr =
 				   hl_combine_attr(text_prop_attr, used_attr);
-			    other_tpi = used_tpi;
+			    if (used_tpi >= 0 && text_props[used_tpi].tp_id < 0)
+				other_tpi = used_tpi;
 			    text_prop_flags = pt->pt_flags;
 			    text_prop_id = tp->tp_id;
 			    used_tpi = tpi;
new file mode 100644
--- /dev/null
+++ b/src/testdir/dumps/Test_textprop_nesting.dump
@@ -0,0 +1,8 @@
+> +0&#ffffff0@74
+|c|o|n|s|t| |f|u|n|c|:| |f|u|n|c|.|I|F|u|n|c|t|i|o|n| |=| |(|{+0#ffffff16#e000002|t|e|x|t| |l|o|n|g| |e|n|o|u|g|h| |t|o| |w|r|a|p| |l|i|n|e|,| |t|e|x|t| |l|o|n|g| |e|n|…
+| @3|s|e|t|L|o|a|d|i|n|g| +0#0000000#ffffff0@60
+| +0#ffffff16#e000002| +0#0000000#ffffff0|}|)| |=|>| |{| @65
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|,|0|-|1| @8|A|l@1| 
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -1342,14 +1342,39 @@ func Test_textprop_after_tab()
        call prop_add(1, 2, {'length': 3, 'type': 'search'})
        call prop_add(2, 3, {'length': 3, 'type': 'search'})
   END
-  call writefile(lines, 'XtestPropTab', 'D')
-  let buf = RunVimInTerminal('-S XtestPropTab', {'rows': 6})
+  call writefile(lines, 'XtextPropTab', 'D')
+  let buf = RunVimInTerminal('-S XtextPropTab', {'rows': 6})
   call VerifyScreenDump(buf, 'Test_textprop_tab', {})
 
   " clean up
   call StopVimInTerminal(buf)
 endfunc
 
+func Test_textprop_nesting()
+  CheckScreendump
+
+  let lines =<< trim END
+      vim9script
+      var lines =<< trim LINESEND
+
+          const func: func.IFunction = ({
+              setLoading
+            }) => {
+      LINESEND
+      setline(1, lines)
+      prop_type_add('prop_add_test', {highlight: "ErrorMsg"})
+      prop_add(2, 31, {type: 'prop_add_test', end_lnum: 4, end_col: 2})
+      var text = 'text long enough to wrap line, text long enough to wrap line, text long enough to wrap line...'
+      prop_add(2, 0, {type: 'prop_add_test', text_wrap: 'truncate', text_align: 'after', text: text})
+  END
+  call writefile(lines, 'XtextpropNesting', 'D')
+  let buf = RunVimInTerminal('-S XtextpropNesting', {'rows': 8})
+  call VerifyScreenDump(buf, 'Test_textprop_nesting', {})
+
+  " clean up
+  call StopVimInTerminal(buf)
+endfunc
+
 func Test_textprop_nowrap_scrolled()
   CheckScreendump
 
--- 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 */
 /**/
+    1226,
+/**/
     1225,
 /**/
     1224,