tAllow control characters inside escape sequences - st - [fork] customized buil… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 3af49e34f666554fcd52a52a7ca15f3e7eafa197 | |
parent a7d7e29300acade90f2025f0b85fa5eae06edb24 | |
Author: Roberto E. Vargas Caballero <[email protected]> | |
Date: Wed, 26 Sep 2012 20:55:18 +0200 | |
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(-) | |
Diffstat: | |
M st.c | 68 ++++++++++++++++-------------… | |
1 file changed, 34 insertions(+), 34 deletions(-) | |
--- | |
diff --git a/st.c b/st.c | |
t@@ -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; | |
t@@ -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_… | |
- 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; | |
} | |
} | |
} |