mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	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)
			
			
This commit is contained in:
		| @@ -612,6 +612,8 @@ win_line( | |||||||
|     proptype_T  *text_prop_type = NULL; |     proptype_T  *text_prop_type = NULL; | ||||||
|     int		extra_for_textprop = FALSE; // wlv.n_extra set for textprop |     int		extra_for_textprop = FALSE; // wlv.n_extra set for textprop | ||||||
|     int		text_prop_attr = 0; |     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_id = 0;	// active property ID | ||||||
|     int		text_prop_flags = 0; |     int		text_prop_flags = 0; | ||||||
|     int		text_prop_follows = FALSE;  // another text prop to display |     int		text_prop_follows = FALSE;  // another text prop to display | ||||||
| @@ -1676,7 +1678,7 @@ win_line( | |||||||
| 			--pi; | 			--pi; | ||||||
| # ifdef FEAT_LINEBREAK | # ifdef FEAT_LINEBREAK | ||||||
| 			// not exactly right but should work in most cases | 			// 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; | 			    syntax_attr = 0; | ||||||
| # endif | # endif | ||||||
| 		    } | 		    } | ||||||
| @@ -1716,6 +1718,7 @@ win_line( | |||||||
| 		if (wlv.n_extra == 0 || !extra_for_textprop) | 		if (wlv.n_extra == 0 || !extra_for_textprop) | ||||||
| 		{ | 		{ | ||||||
| 		    text_prop_attr = 0; | 		    text_prop_attr = 0; | ||||||
|  | 		    text_prop_attr_comb = 0; | ||||||
| 		    text_prop_flags = 0; | 		    text_prop_flags = 0; | ||||||
| 		    text_prop_type = NULL; | 		    text_prop_type = NULL; | ||||||
| 		    text_prop_id = 0; | 		    text_prop_id = 0; | ||||||
| @@ -1789,6 +1792,7 @@ win_line( | |||||||
| 			    saved_search_attr = search_attr; | 			    saved_search_attr = search_attr; | ||||||
| 			    search_attr = 0;	// restore when n_extra is zero | 			    search_attr = 0;	// restore when n_extra is zero | ||||||
| 			    text_prop_attr = 0; | 			    text_prop_attr = 0; | ||||||
|  | 			    text_prop_attr_comb = 0; | ||||||
| 			    if (*ptr == NUL) | 			    if (*ptr == NUL) | ||||||
| 				// don't combine char attr after EOL | 				// don't combine char attr after EOL | ||||||
| 				text_prop_flags &= ~PT_FLAG_COMBINE; | 				text_prop_flags &= ~PT_FLAG_COMBINE; | ||||||
| @@ -1974,6 +1978,7 @@ win_line( | |||||||
| 		    syntax_attr = hl_combine_attr(syntax_attr, text_prop_attr); | 		    syntax_attr = hl_combine_attr(syntax_attr, text_prop_attr); | ||||||
| 		else | 		else | ||||||
| 		    syntax_attr = text_prop_attr; | 		    syntax_attr = text_prop_attr; | ||||||
|  | 		text_prop_attr_comb = syntax_attr; | ||||||
| 	    } | 	    } | ||||||
| # endif | # endif | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| >x+0&#ffffff0@49|]+0#ffffff16#e000002| +0#0000000#ffffff0@23 | >x+0&#ffffff0@49|]+0(ffff15| +0&#ffffff0@23 | ||||||
| |x@69| @4 | |x@69| @4 | ||||||
| |~+0#4040ff13&| @73 | |~+0#4040ff13&| @73 | ||||||
| |~| @73 | |~| @73 | ||||||
							
								
								
									
										10
									
								
								src/testdir/dumps/Test_prop_linebreak_2.dump
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/testdir/dumps/Test_prop_linebreak_2.dump
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | | +0#0000e05#a8a8a8255@1>x+0&#ffffff0@49|]+0(ffff15| +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|  | ||||||
| @@ -1925,12 +1925,21 @@ func Test_prop_in_linebreak() | |||||||
|   let lines =<< trim END |   let lines =<< trim END | ||||||
|     set breakindent linebreak breakat+=] |     set breakindent linebreak breakat+=] | ||||||
|     call printf('%s]%s', repeat('x', 50), repeat('x', 70))->setline(1) |     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'}) |     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 |   END | ||||||
|   call writefile(lines, 'XscriptPropLinebreak') |   call writefile(lines, 'XscriptPropLinebreak') | ||||||
|   let buf = RunVimInTerminal('-S XscriptPropLinebreak', #{rows: 10}) |   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 StopVimInTerminal(buf) | ||||||
|   call delete('XscriptPropLinebreak') |   call delete('XscriptPropLinebreak') | ||||||
|   | |||||||
| @@ -707,6 +707,8 @@ static char *(features[]) = | |||||||
|  |  | ||||||
| static int included_patches[] = | static int included_patches[] = | ||||||
| {   /* Add new patch number below this line */ | {   /* Add new patch number below this line */ | ||||||
|  | /**/ | ||||||
|  |     357, | ||||||
| /**/ | /**/ | ||||||
|     356, |     356, | ||||||
| /**/ | /**/ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user