Fix cursor move with wide glyphs
st would always move back 1 column, even with wide glyhps (using more than a single column). The glyph rune is set on its first column, and the other ones are to 0, so loop until we detect the start of the previous glyph.
This commit is contained in:
		
				
					committed by
					
						 Hiltjo Posthuma
						Hiltjo Posthuma
					
				
			
			
				
	
			
			
			
						parent
						
							a3f7420310
						
					
				
				
					commit
					7473a8d1a5
				
			
							
								
								
									
										10
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								st.c
									
									
									
									
									
								
							| @@ -86,8 +86,8 @@ enum escape_state { | ||||
|  | ||||
| typedef struct { | ||||
| 	Glyph attr; /* current char attributes */ | ||||
| 	int x; | ||||
| 	int y; | ||||
| 	int x; /* terminal column */ | ||||
| 	int y; /* terminal row */ | ||||
| 	char state; | ||||
| } TCursor; | ||||
|  | ||||
| @@ -2175,12 +2175,16 @@ tstrsequence(uchar c) | ||||
| void | ||||
| tcontrolcode(uchar ascii) | ||||
| { | ||||
| 	size_t i; | ||||
|  | ||||
| 	switch (ascii) { | ||||
| 	case '\t':   /* HT */ | ||||
| 		tputtab(1); | ||||
| 		return; | ||||
| 	case '\b':   /* BS */ | ||||
| 		tmoveto(term.c.x-1, term.c.y); | ||||
| 		for (i = 1; term.c.x && term.line[term.c.y][term.c.x - i].u == 0; ++i) | ||||
| 			; | ||||
| 		tmoveto(term.c.x - i, term.c.y); | ||||
| 		return; | ||||
| 	case '\r':   /* CR */ | ||||
| 		tmoveto(0, term.c.y); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user