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(-)master
parent
a7d7e29300
commit
3af49e34f6
68
st.c
68
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,40 +1817,14 @@ 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 */
|
||||
tsetchar(c);
|
||||
if(term.c.x+1 < term.col)
|
||||
tmoveto(term.c.x+1, term.c.y);
|
||||
else
|
||||
term.c.state |= CURSOR_WRAPNEXT;
|
||||
}
|
||||
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 */
|
||||
tsetchar(c);
|
||||
if(term.c.x+1 < term.col)
|
||||
tmoveto(term.c.x+1, term.c.y);
|
||||
else
|
||||
term.c.state |= CURSOR_WRAPNEXT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Reference in New Issue