changeset 30039:4b9b237d1211 v9.0.0357

patch 9.0.0357: 'linebreak' interferes with text property highlight Commit: https://github.com/vim/vim/commit/cf2bb633978a3d2d5bba06611c95e15170662c15 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Sep 2 13:26:29 2022 +0100 patch 9.0.0357: 'linebreak' interferes with text property highlight Problem: 'linebreak' interferes with text property highlight if there is syntax highlighting. Solution: Check the text prop attributes after combining with syntax attributes. (closes #11035)
author Bram Moolenaar <Bram@vim.org>
date Fri, 02 Sep 2022 14:30:04 +0200
parents c399dc368745
children d5a6eb942188
files src/drawline.c src/testdir/dumps/Test_prop_linebreak.dump src/testdir/dumps/Test_prop_linebreak_1.dump src/testdir/dumps/Test_prop_linebreak_2.dump src/testdir/test_textprop.vim src/version.c
diffstat 6 files changed, 39 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/src/drawline.c
+++ b/src/drawline.c
@@ -612,6 +612,8 @@ win_line(
     proptype_T  *text_prop_type = NULL;
     int		extra_for_textprop = FALSE; // wlv.n_extra set for textprop
     int		text_prop_attr = 0;
+    int		text_prop_attr_comb = 0;  // text_prop_attr combined with
+					  // syntax_attr
     int		text_prop_id = 0;	// active property ID
     int		text_prop_flags = 0;
     int		text_prop_follows = FALSE;  // another text prop to display
@@ -1676,7 +1678,7 @@ win_line(
 			--pi;
 # ifdef FEAT_LINEBREAK
 			// not exactly right but should work in most cases
-			if (in_linebreak && syntax_attr == text_prop_attr)
+			if (in_linebreak && syntax_attr == text_prop_attr_comb)
 			    syntax_attr = 0;
 # endif
 		    }
@@ -1716,6 +1718,7 @@ win_line(
 		if (wlv.n_extra == 0 || !extra_for_textprop)
 		{
 		    text_prop_attr = 0;
+		    text_prop_attr_comb = 0;
 		    text_prop_flags = 0;
 		    text_prop_type = NULL;
 		    text_prop_id = 0;
@@ -1789,6 +1792,7 @@ win_line(
 			    saved_search_attr = search_attr;
 			    search_attr = 0;	// restore when n_extra is zero
 			    text_prop_attr = 0;
+			    text_prop_attr_comb = 0;
 			    if (*ptr == NUL)
 				// don't combine char attr after EOL
 				text_prop_flags &= ~PT_FLAG_COMBINE;
@@ -1974,6 +1978,7 @@ win_line(
 		    syntax_attr = hl_combine_attr(syntax_attr, text_prop_attr);
 		else
 		    syntax_attr = text_prop_attr;
+		text_prop_attr_comb = syntax_attr;
 	    }
 # endif
 #endif
rename from src/testdir/dumps/Test_prop_linebreak.dump
rename to src/testdir/dumps/Test_prop_linebreak_1.dump
--- a/src/testdir/dumps/Test_prop_linebreak.dump
+++ b/src/testdir/dumps/Test_prop_linebreak_1.dump
@@ -1,4 +1,4 @@
->x+0&#ffffff0@49|]+0#ffffff16#e000002| +0#0000000#ffffff0@23
+>x+0&#ffffff0@49|]+0&#40ffff15| +0&#ffffff0@23
 |x@69| @4
 |~+0#4040ff13&| @73
 |~| @73
new file mode 100644
--- /dev/null
+++ b/src/testdir/dumps/Test_prop_linebreak_2.dump
@@ -0,0 +1,10 @@
+| +0#0000e05#a8a8a8255@1>x+0&#ffffff0@49|]+0&#40ffff15| +0#0000000#ffffff0@21
+| +0#0000e05#a8a8a8255@1|x+0&#ffffff0@69| +0#0000000&@2
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|,|1| @10|A|l@1| 
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -1925,12 +1925,21 @@ func Test_prop_in_linebreak()
   let lines =<< trim END
     set breakindent linebreak breakat+=]
     call printf('%s]%s', repeat('x', 50), repeat('x', 70))->setline(1)
-    call prop_type_add('test', #{highlight: 'ErrorMsg'})
+    call prop_type_add('test', #{highlight: 'MatchParen'})
     call prop_add(1, 51, #{length: 1, type: 'test'})
+    func AddMatch()
+      syntax on
+      syntax match xTest /.*/
+      hi link xTest Comment
+      set signcolumn=yes
+    endfunc
   END
   call writefile(lines, 'XscriptPropLinebreak')
   let buf = RunVimInTerminal('-S XscriptPropLinebreak', #{rows: 10})
-  call VerifyScreenDump(buf, 'Test_prop_linebreak', {})
+  call VerifyScreenDump(buf, 'Test_prop_linebreak_1', {})
+
+  call term_sendkeys(buf, ":call AddMatch()\<CR>")
+  call VerifyScreenDump(buf, 'Test_prop_linebreak_2', {})
 
   call StopVimInTerminal(buf)
   call delete('XscriptPropLinebreak')
--- a/src/version.c
+++ b/src/version.c
@@ -708,6 +708,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    357,
+/**/
     356,
 /**/
     355,