Allow control characters inside escape sequences
Taken from vt100 manual programmer: Control characters (codes \0 to \37 inclusive) are specifically excluded from the control sequence syntax, but may be embedded within a control sequence. Embedded control characters are executed as soon as they are encountered by the VT100. The processing of the control sequence then continues with the next character received. --- st.c | 68 +++++++++++++++++++++++++++++++++--------------------------------- 1 file changed, 34 insertions(+), 34 deletions(-)
This commit is contained in:
		
							parent
							
								
									a7d7e29300
								
							
						
					
					
						commit
						3af49e34f6
					
				
							
								
								
									
										52
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								st.c
									
									
									
									
									
								
							| @ -1668,6 +1668,32 @@ tputc(char *c, int len) { | ||||
| 	if(iofd != -1) | ||||
| 		write(iofd, c, len); | ||||
| 
 | ||||
| 	switch(ascii) { | ||||
| 	case '\t': | ||||
| 		tputtab(1); | ||||
| 		return; | ||||
| 	case '\b': | ||||
| 		tmoveto(term.c.x-1, term.c.y); | ||||
| 		return; | ||||
| 	case '\r': | ||||
| 		tmoveto(0, term.c.y); | ||||
| 		return; | ||||
| 	case '\f': | ||||
| 	case '\v': | ||||
| 	case '\n': | ||||
| 		/* go to first col if the mode is set */ | ||||
| 		tnewline(IS_SET(MODE_CRLF)); | ||||
| 		return; | ||||
| 	case '\a': | ||||
| 		if(!(xw.state & WIN_FOCUSED)) | ||||
| 			xseturgency(1); | ||||
| 		return; | ||||
| 	case '\033': | ||||
| 		csireset(); | ||||
| 		term.esc = ESC_START; | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	if(term.esc & ESC_START) { | ||||
| 		if(term.esc & ESC_CSI) { | ||||
| 			csiescseq.buf[csiescseq.len++] = ascii; | ||||
| @ -1791,31 +1817,6 @@ tputc(char *c, int len) { | ||||
| 	} else { | ||||
| 		if(sel.bx != -1 && BETWEEN(term.c.y, sel.by, sel.ey)) | ||||
| 			sel.bx = -1; | ||||
| 		switch(ascii) { | ||||
| 		case '\t': | ||||
| 			tputtab(1); | ||||
| 			break; | ||||
| 		case '\b': | ||||
| 			tmoveto(term.c.x-1, term.c.y); | ||||
| 			break; | ||||
| 		case '\r': | ||||
| 			tmoveto(0, term.c.y); | ||||
| 			break; | ||||
| 		case '\f': | ||||
| 		case '\v': | ||||
| 		case '\n': | ||||
| 			/* go to first col if the mode is set */ | ||||
| 			tnewline(IS_SET(MODE_CRLF)); | ||||
| 			break; | ||||
| 		case '\a': | ||||
| 			if(!(xw.state & WIN_FOCUSED)) | ||||
| 				xseturgency(1); | ||||
| 			break; | ||||
| 		case '\033': | ||||
| 			csireset(); | ||||
| 			term.esc = ESC_START; | ||||
| 			break; | ||||
| 		default: | ||||
| 		if(ascii >= '\020' || term.c.attr.mode & ATTR_GFX) { | ||||
| 			if(IS_SET(MODE_WRAP) && term.c.state & CURSOR_WRAPNEXT) | ||||
| 				tnewline(1); /* always go to first col */ | ||||
| @ -1827,7 +1828,6 @@ tputc(char *c, int len) { | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| } | ||||
| 
 | ||||
| int | ||||
| tresize(int col, int row) { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user