mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	patch 9.0.0200: cursor wrong if 'nowrap' and two right aligned text props
Problem:    cursor in a wrong positoin if 'wrap' is off and using two right
            aligned text props in one line.
Solution:   Count an extra line for a right aligned text property after a
            below or right aligned text property. (issue #10909)
			
			
This commit is contained in:
		| @@ -3,7 +3,9 @@ | ||||
| |t|w|o| @56 | ||||
| |a+0&#ffff4012|n|o|t|h|e|r| +0&#ffffff0@52 | ||||
| |O+0#ffffff16#e000002|n|e| |M|o|r|e| |H|e|r|e| +0#0000000#ffffff0@46 | ||||
| |t|h|r|e>e| @54 | ||||
| |t|h|r|e>e| @41|r+0&#ffff4012|i|g|h|t| |a|l|i|g|n|e|d | ||||
| | +0&#ffffff0@41|a+0&#ffff4012|l|s|o| |r|i|g|h|t| |a|l|i|g|n|e|d | ||||
| |f+0&#ffffff0|o|u|r| @55 | ||||
| |~+0#4040ff13&| @58 | ||||
| |~| @58 | ||||
| |~| @58 | ||||
|   | ||||
| @@ -3,7 +3,9 @@ | ||||
| | +0#0000e05#a8a8a8255@4|t+0#0000000#ffffff0|w|o| @51 | ||||
| | +0#0000e05#a8a8a8255@4|a+0#0000000#ffff4012|n|o|t|h|e|r| +0&#ffffff0@47 | ||||
| | +0#0000e05#a8a8a8255@4|O+0#ffffff16#e000002|n|e| |M|o|r|e| |H|e|r|e| +0#0000000#ffffff0@41 | ||||
| | +0#0000e05#a8a8a8255@4|t+0#0000000#ffffff0|h|r|e>e| @49 | ||||
| | +0#0000e05#a8a8a8255@4|t+0#0000000#ffffff0|h|r|e>e| @36|r+0&#ffff4012|i|g|h|t| |a|l|i|g|n|e|d | ||||
| | +0#0000e05#a8a8a8255@4| +0#0000000#ffffff0@36|a+0&#ffff4012|l|s|o| |r|i|g|h|t| |a|l|i|g|n|e|d | ||||
| | +0#0000e05#a8a8a8255@4|f+0#0000000#ffffff0|o|u|r| @50 | ||||
| |~+0#4040ff13&| @58 | ||||
| |~| @58 | ||||
| |~| @58 | ||||
|   | ||||
							
								
								
									
										12
									
								
								src/testdir/dumps/Test_prop_with_text_after_nowrap_3.dump
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/testdir/dumps/Test_prop_with_text_after_nowrap_3.dump
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| | +0#0000e05#a8a8a8255@4|o+0#0000000#ffffff0|n|e| +0&#ffd7ff255|A|f|t|e|r| |t|h|e| |t|e|x|t| +0&#ffffff0@26|r+0&#ffd7ff255|i|g|h|t| |h|e|r|e | ||||
| | +0#0000e05#a8a8a8255@4| +0#ffffff16#e000002|B|e|l|o|w| |t|h|e| |l|i|n|e| | +0#0000000#ffffff0@38 | ||||
| | +0#0000e05#a8a8a8255@4|t+0#0000000#ffffff0|w|o| @51 | ||||
| | +0#0000e05#a8a8a8255@4|a+0#0000000#ffff4012|n|o|t|h|e|r| +0&#ffffff0@47 | ||||
| | +0#0000e05#a8a8a8255@4|O+0#ffffff16#e000002|n|e| |M|o|r|e| |H|e|r|e| +0#0000000#ffffff0@41 | ||||
| | +0#0000e05#a8a8a8255@4|t+0#0000000#ffffff0|h|r|e@1| @36|r+0&#ffff4012|i|g|h|t| |a|l|i|g|n|e|d | ||||
| | +0#0000e05#a8a8a8255@4| +0#0000000#ffffff0@36|a+0&#ffff4012|l|s|o| |r|i|g|h|t| |a|l|i|g|n|e|d | ||||
| | +0#0000e05#a8a8a8255@4|f+0#0000000#ffffff0|o|u>r| @50 | ||||
| |~+0#4040ff13&| @58 | ||||
| |~| @58 | ||||
| |~| @58 | ||||
| | +0#0000000&@41|4|,|4| @10|A|l@1|  | ||||
| @@ -2743,7 +2743,7 @@ func Test_props_with_text_after_nowrap() | ||||
|  | ||||
|   let lines =<< trim END | ||||
|       set nowrap | ||||
|       call setline(1, ['one', 'two', 'three']) | ||||
|       call setline(1, ['one', 'two', 'three', 'four']) | ||||
|       call prop_type_add('belowprop', #{highlight: 'ErrorMsg'}) | ||||
|       call prop_type_add('anotherprop', #{highlight: 'Search'}) | ||||
|       call prop_type_add('someprop', #{highlight: 'DiffChange'}) | ||||
| @@ -2752,15 +2752,21 @@ func Test_props_with_text_after_nowrap() | ||||
|       call prop_add(2, 0, #{type: 'belowprop', text: 'One More Here', text_align: 'below'}) | ||||
|       call prop_add(1, 0, #{type: 'someprop', text: 'right here', text_align: 'right'}) | ||||
|       call prop_add(1, 0, #{type: 'someprop', text: ' After the text', text_align: 'after'}) | ||||
|       normal G$ | ||||
|       normal 3G$ | ||||
|  | ||||
|       call prop_add(3, 0, #{type: 'anotherprop', text: 'right aligned', text_align: 'right'}) | ||||
|       call prop_add(3, 0, #{type: 'anotherprop', text: 'also right aligned', text_align: 'right'}) | ||||
|   END | ||||
|   call writefile(lines, 'XscriptPropsAfterNowrap') | ||||
|   let buf = RunVimInTerminal('-S XscriptPropsAfterNowrap', #{rows: 10, cols: 60}) | ||||
|   let buf = RunVimInTerminal('-S XscriptPropsAfterNowrap', #{rows: 12, cols: 60}) | ||||
|   call VerifyScreenDump(buf, 'Test_prop_with_text_after_nowrap_1', {}) | ||||
|  | ||||
|   call term_sendkeys(buf, ":set signcolumn=yes foldcolumn=3\<CR>") | ||||
|   call VerifyScreenDump(buf, 'Test_prop_with_text_after_nowrap_2', {}) | ||||
|  | ||||
|   call term_sendkeys(buf, "j") | ||||
|   call VerifyScreenDump(buf, 'Test_prop_with_text_after_nowrap_3', {}) | ||||
|  | ||||
|   call StopVimInTerminal(buf) | ||||
|   call delete('XscriptPropsAfterNowrap') | ||||
| endfunc | ||||
|   | ||||
| @@ -590,6 +590,8 @@ get_text_props(buf_T *buf, linenr_T lnum, char_u **props, int will_change) | ||||
|  | ||||
| /* | ||||
|  * Return the number of text properties with "below" alignment in line "lnum". | ||||
|  * A "right" aligned property also goes below after a "below" or other "right" | ||||
|  * aligned property. | ||||
|  */ | ||||
|     int | ||||
| prop_count_below(buf_T *buf, linenr_T lnum) | ||||
| @@ -599,14 +601,25 @@ prop_count_below(buf_T *buf, linenr_T lnum) | ||||
|     int		result = 0; | ||||
|     textprop_T	prop; | ||||
|     int		i; | ||||
|     int		next_right_goes_below = FALSE; | ||||
|  | ||||
|     if (count == 0) | ||||
| 	return 0; | ||||
|     for (i = 0; i < count; ++i) | ||||
|     { | ||||
| 	mch_memmove(&prop, props + i * sizeof(prop), sizeof(prop)); | ||||
| 	if (prop.tp_col == MAXCOL && (prop.tp_flags & TP_FLAG_ALIGN_BELOW)) | ||||
| 	    ++result; | ||||
| 	if (prop.tp_col == MAXCOL) | ||||
| 	{ | ||||
| 	    if ((prop.tp_flags & TP_FLAG_ALIGN_BELOW) | ||||
| 		    || (next_right_goes_below | ||||
| 				     && (prop.tp_flags & TP_FLAG_ALIGN_RIGHT))) | ||||
| 	    { | ||||
| 		next_right_goes_below = TRUE; | ||||
| 		++result; | ||||
| 	    } | ||||
| 	    else if (prop.tp_flags & TP_FLAG_ALIGN_RIGHT) | ||||
| 		next_right_goes_below = TRUE; | ||||
| 	} | ||||
|     } | ||||
|     return result; | ||||
| } | ||||
|   | ||||
| @@ -735,6 +735,8 @@ static char *(features[]) = | ||||
|  | ||||
| static int included_patches[] = | ||||
| {   /* Add new patch number below this line */ | ||||
| /**/ | ||||
|     200, | ||||
| /**/ | ||||
|     199, | ||||
| /**/ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user