Fix for wide character being incorrectly cleared on MODE_INSERT
Under insert mode, when inserting a normal character in front of a wide character, the affected region is shifted to the right by one cell. However, the empty cell is reset as if being a part of a wide character, causing the following cell being mishandled as a dummy cell. To reproduce the bug: printf '\033[4h' # set MODE_INSERT printf 妳好 printf '\033[4D' printf 'x' printf '\033[4l\n'
This commit is contained in:
		
				
					committed by
					
						 Hiltjo Posthuma
						Hiltjo Posthuma
					
				
			
			
				
	
			
			
			
						parent
						
							211964d56e
						
					
				
				
					commit
					3a6d6d7401
				
			
							
								
								
									
										4
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								st.c
									
									
									
									
									
								
							| @@ -2471,8 +2471,10 @@ check_control_code: | |||||||
| 		gp = &term.line[term.c.y][term.c.x]; | 		gp = &term.line[term.c.y][term.c.x]; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if (IS_SET(MODE_INSERT) && term.c.x+width < term.col) | 	if (IS_SET(MODE_INSERT) && term.c.x+width < term.col) { | ||||||
| 		memmove(gp+width, gp, (term.col - term.c.x - width) * sizeof(Glyph)); | 		memmove(gp+width, gp, (term.col - term.c.x - width) * sizeof(Glyph)); | ||||||
|  | 		gp->mode &= ~ATTR_WIDE; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	if (term.c.x+width > term.col) { | 	if (term.c.x+width > term.col) { | ||||||
| 		tnewline(1); | 		tnewline(1); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user