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 | |t|w|o| @56 | ||||||
| |a+0&#ffff4012|n|o|t|h|e|r| +0&#ffffff0@52 | |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 | |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 | |~+0#4040ff13&| @58 | ||||||
| |~| @58 | |~| @58 | ||||||
| |~| @58 | |~| @58 | ||||||
|   | |||||||
| @@ -3,7 +3,9 @@ | |||||||
| | +0#0000e05#a8a8a8255@4|t+0#0000000#ffffff0|w|o| @51 | | +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|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|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 | |~+0#4040ff13&| @58 | ||||||
| |~| @58 | |~| @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 |   let lines =<< trim END | ||||||
|       set nowrap |       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('belowprop', #{highlight: 'ErrorMsg'}) | ||||||
|       call prop_type_add('anotherprop', #{highlight: 'Search'}) |       call prop_type_add('anotherprop', #{highlight: 'Search'}) | ||||||
|       call prop_type_add('someprop', #{highlight: 'DiffChange'}) |       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(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: 'right here', text_align: 'right'}) | ||||||
|       call prop_add(1, 0, #{type: 'someprop', text: ' After the text', text_align: 'after'}) |       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 |   END | ||||||
|   call writefile(lines, 'XscriptPropsAfterNowrap') |   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 VerifyScreenDump(buf, 'Test_prop_with_text_after_nowrap_1', {}) | ||||||
|  |  | ||||||
|   call term_sendkeys(buf, ":set signcolumn=yes foldcolumn=3\<CR>") |   call term_sendkeys(buf, ":set signcolumn=yes foldcolumn=3\<CR>") | ||||||
|   call VerifyScreenDump(buf, 'Test_prop_with_text_after_nowrap_2', {}) |   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 StopVimInTerminal(buf) | ||||||
|   call delete('XscriptPropsAfterNowrap') |   call delete('XscriptPropsAfterNowrap') | ||||||
| endfunc | 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". |  * 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 |     int | ||||||
| prop_count_below(buf_T *buf, linenr_T lnum) | 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; |     int		result = 0; | ||||||
|     textprop_T	prop; |     textprop_T	prop; | ||||||
|     int		i; |     int		i; | ||||||
|  |     int		next_right_goes_below = FALSE; | ||||||
|  |  | ||||||
|     if (count == 0) |     if (count == 0) | ||||||
| 	return 0; | 	return 0; | ||||||
|     for (i = 0; i < count; ++i) |     for (i = 0; i < count; ++i) | ||||||
|     { |     { | ||||||
| 	mch_memmove(&prop, props + i * sizeof(prop), sizeof(prop)); | 	mch_memmove(&prop, props + i * sizeof(prop), sizeof(prop)); | ||||||
| 	if (prop.tp_col == MAXCOL && (prop.tp_flags & TP_FLAG_ALIGN_BELOW)) | 	if (prop.tp_col == MAXCOL) | ||||||
| 	    ++result; | 	{ | ||||||
|  | 	    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; |     return result; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -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 */ | ||||||
|  | /**/ | ||||||
|  |     200, | ||||||
| /**/ | /**/ | ||||||
|     199, |     199, | ||||||
| /**/ | /**/ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user