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:
		
							
								
								
									
										52
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								st.c
									
									
									
									
									
								
							| @@ -1668,6 +1668,32 @@ tputc(char *c, int len) { | |||||||
| 	if(iofd != -1) | 	if(iofd != -1) | ||||||
| 		write(iofd, c, len); | 		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_START) { | ||||||
| 		if(term.esc & ESC_CSI) { | 		if(term.esc & ESC_CSI) { | ||||||
| 			csiescseq.buf[csiescseq.len++] = ascii; | 			csiescseq.buf[csiescseq.len++] = ascii; | ||||||
| @@ -1791,31 +1817,6 @@ tputc(char *c, int len) { | |||||||
| 	} else { | 	} else { | ||||||
| 		if(sel.bx != -1 && BETWEEN(term.c.y, sel.by, sel.ey)) | 		if(sel.bx != -1 && BETWEEN(term.c.y, sel.by, sel.ey)) | ||||||
| 			sel.bx = -1; | 			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(ascii >= '\020' || term.c.attr.mode & ATTR_GFX) { | ||||||
| 			if(IS_SET(MODE_WRAP) && term.c.state & CURSOR_WRAPNEXT) | 			if(IS_SET(MODE_WRAP) && term.c.state & CURSOR_WRAPNEXT) | ||||||
| 				tnewline(1); /* always go to first col */ | 				tnewline(1); /* always go to first col */ | ||||||
| @@ -1827,7 +1828,6 @@ tputc(char *c, int len) { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| } |  | ||||||
|  |  | ||||||
| int | int | ||||||
| tresize(int col, int row) { | tresize(int col, int row) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user