mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	patch 9.0.0183: extra space after virtual text when 'linebreak' is set
Problem:    Extra space after virtual text when 'linebreak' is set.
Solution:   Do not count virtual text when getting linebreak value.
            (closes #10884)
			
			
This commit is contained in:
		| @@ -2370,7 +2370,12 @@ win_line( | |||||||
| 		    chartabsize_T cts; | 		    chartabsize_T cts; | ||||||
|  |  | ||||||
| 		    init_chartabsize_arg(&cts, wp, lnum, wlv.vcol, line, p); | 		    init_chartabsize_arg(&cts, wp, lnum, wlv.vcol, line, p); | ||||||
|  | # ifdef FEAT_PROP_POPUP | ||||||
|  | 		    // do not want virtual text counted here | ||||||
|  | 		    cts.cts_has_prop_with_text = FALSE; | ||||||
|  | # endif | ||||||
| 		    wlv.n_extra = win_lbr_chartabsize(&cts, NULL) - 1; | 		    wlv.n_extra = win_lbr_chartabsize(&cts, NULL) - 1; | ||||||
|  | 		    clear_chartabsize_arg(&cts); | ||||||
|  |  | ||||||
| 		    // We have just drawn the showbreak value, no need to add | 		    // We have just drawn the showbreak value, no need to add | ||||||
| 		    // space for it again. | 		    // space for it again. | ||||||
| @@ -2398,7 +2403,7 @@ win_line( | |||||||
|  |  | ||||||
| 		    wlv.c_extra = mb_off > 0 ? MB_FILLER_CHAR : ' '; | 		    wlv.c_extra = mb_off > 0 ? MB_FILLER_CHAR : ' '; | ||||||
| 		    wlv.c_final = NUL; | 		    wlv.c_final = NUL; | ||||||
| # if defined(FEAT_PROP_POPUP) | # ifdef FEAT_PROP_POPUP | ||||||
| 		    if (wlv.n_extra > 0 && c != TAB) | 		    if (wlv.n_extra > 0 && c != TAB) | ||||||
| 			in_linebreak = TRUE; | 			in_linebreak = TRUE; | ||||||
| # endif | # endif | ||||||
| @@ -2412,10 +2417,8 @@ win_line( | |||||||
| 			if (!wp->w_p_list) | 			if (!wp->w_p_list) | ||||||
| 			    c = ' '; | 			    c = ' '; | ||||||
| 		    } | 		    } | ||||||
| 		    clear_chartabsize_arg(&cts); |  | ||||||
| 		} | 		} | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| 		in_multispace = c == ' ' | 		in_multispace = c == ' ' | ||||||
| 		    && ((ptr > line + 1 && ptr[-2] == ' ') || *ptr == ' '); | 		    && ((ptr > line + 1 && ptr[-2] == ' ') || *ptr == ' '); | ||||||
| 		if (!in_multispace) | 		if (!in_multispace) | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								src/testdir/dumps/Test_prop_with_linebreak_1.dump
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/testdir/dumps/Test_prop_with_linebreak_1.dump
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | >o+0&#ffffff0|n|e|:+0#e000e06&| |v|i|r|t|u|a|l| |t|e|x|t| +0#0000000&|t|w|o|w|o|r|d| @24 | ||||||
|  | |~+0#4040ff13&| @48 | ||||||
|  | |~| @48 | ||||||
|  | |~| @48 | ||||||
|  | |~| @48 | ||||||
|  | | +0#0000000&@31|1|,|1| @10|A|l@1|  | ||||||
							
								
								
									
										6
									
								
								src/testdir/dumps/Test_prop_with_linebreak_2.dump
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/testdir/dumps/Test_prop_with_linebreak_2.dump
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | |a+0&#ffffff0|s|d|f| |a|s|d|f| |a|s|d|f| |a|s|d|f| |a|s|d|f| |a>s|o|n|e|:+0#e000e06&| |v|i|r|t|u|a|l| |t|e|x|t| +0#0000000&@5 | ||||||
|  | |t|w|o|w|o|r|d| @42 | ||||||
|  | |~+0#4040ff13&| @48 | ||||||
|  | |~| @48 | ||||||
|  | |~| @48 | ||||||
|  | | +0#0000000&@31|1|,|2|7| @9|A|l@1|  | ||||||
| @@ -1878,6 +1878,26 @@ func Test_prop_in_linebreak() | |||||||
|   call delete('XscriptPropLinebreak') |   call delete('XscriptPropLinebreak') | ||||||
| endfunc | endfunc | ||||||
|  |  | ||||||
|  | func Test_prop_with_linebreak() | ||||||
|  |   CheckRunVimInTerminal | ||||||
|  |  | ||||||
|  |   let lines =<< trim END | ||||||
|  |       vim9script | ||||||
|  |       set linebreak | ||||||
|  |       setline(1, 'one twoword') | ||||||
|  |       prop_type_add('test', {highlight: 'Special'}) | ||||||
|  |       prop_add(1, 4, {text: ': virtual text', type: 'test', text_wrap: 'wrap'}) | ||||||
|  |   END | ||||||
|  |   call writefile(lines, 'XscriptPropWithLinebreak') | ||||||
|  |   let buf = RunVimInTerminal('-S XscriptPropWithLinebreak', #{rows: 6, cols: 50}) | ||||||
|  |   call VerifyScreenDump(buf, 'Test_prop_with_linebreak_1', {}) | ||||||
|  |   call term_sendkeys(buf, "iasdf asdf asdf asdf asdf as\<Esc>") | ||||||
|  |   call VerifyScreenDump(buf, 'Test_prop_with_linebreak_2', {}) | ||||||
|  |  | ||||||
|  |   call StopVimInTerminal(buf) | ||||||
|  |   call delete('XscriptPropWithLinebreak') | ||||||
|  | endfunc | ||||||
|  |  | ||||||
| func Test_prop_after_tab() | func Test_prop_after_tab() | ||||||
|   CheckRunVimInTerminal |   CheckRunVimInTerminal | ||||||
|  |  | ||||||
|   | |||||||
| @@ -735,6 +735,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 */ | ||||||
|  | /**/ | ||||||
|  |     183, | ||||||
| /**/ | /**/ | ||||||
|     182, |     182, | ||||||
| /**/ | /**/ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user