X-Git-Url: https://git.xinqibao.xyz/st.git/blobdiff_plain/3a095984b053ebb159956368eb3258f51f50e352..29b209f5f55c80e457a5a913a463bd24f8e307e9:/st.c?ds=sidebyside diff --git a/st.c b/st.c index a64b84d..bb80321 100644 --- a/st.c +++ b/st.c @@ -1663,11 +1663,40 @@ tputtab(bool forward) { void tputc(char *c, int len) { - char ascii = *c; + uchar ascii = *c; 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(term.esc & ESC_STR) + break; + + 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,33 +1820,7 @@ tputc(char *c, int len) { } else { if(sel.bx != -1 && BETWEEN(term.c.y, sel.by, sel.ey)) sel.bx = -1; - switch(ascii) { - case '\0': /* padding character, do nothing */ - break; - 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);