aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto E. Vargas Caballero <k0ga@shike2.com>2012-09-26 20:53:46 +0200
committerRoberto E. Vargas Caballero <k0ga@shike2.com>2012-09-26 20:53:46 +0200
commita7d7e29300acade90f2025f0b85fa5eae06edb24 (patch)
treec56b0e83628bd0d98eab9c7dfc3d998cb7e095f3
parent375b6e5b175ce0a01d47288e94e9c4a8acc3939a (diff)
downloadst-a7d7e29300acade90f2025f0b85fa5eae06edb24.tar.gz
st-a7d7e29300acade90f2025f0b85fa5eae06edb24.zip
Ignore all control characters not handled
Taken from vt100 programmer manual: Control characters have values of \000 - \037, and \177. The control characters recognized by the VT100 are shown in Table 3-10. All other control codes cause no action to be taken. We have to take attention when we are using alternate charset, because in this cases they are not used as control characters. --- st.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-)
-rw-r--r--st.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/st.c b/st.c
index a64b84d..515dfb1 100644
--- a/st.c
+++ b/st.c
@@ -1663,7 +1663,7 @@ tputtab(bool forward) {
1663 1663
1664void 1664void
1665tputc(char *c, int len) { 1665tputc(char *c, int len) {
1666 char ascii = *c; 1666 uchar ascii = *c;
1667 1667
1668 if(iofd != -1) 1668 if(iofd != -1)
1669 write(iofd, c, len); 1669 write(iofd, c, len);
@@ -1792,8 +1792,6 @@ tputc(char *c, int len) {
1792 if(sel.bx != -1 && BETWEEN(term.c.y, sel.by, sel.ey)) 1792 if(sel.bx != -1 && BETWEEN(term.c.y, sel.by, sel.ey))
1793 sel.bx = -1; 1793 sel.bx = -1;
1794 switch(ascii) { 1794 switch(ascii) {
1795 case '\0': /* padding character, do nothing */
1796 break;
1797 case '\t': 1795 case '\t':
1798 tputtab(1); 1796 tputtab(1);
1799 break; 1797 break;
@@ -1818,13 +1816,15 @@ tputc(char *c, int len) {
1818 term.esc = ESC_START; 1816 term.esc = ESC_START;
1819 break; 1817 break;
1820 default: 1818 default:
1821 if(IS_SET(MODE_WRAP) && term.c.state & CURSOR_WRAPNEXT) 1819 if(ascii >= '\020' || term.c.attr.mode & ATTR_GFX) {
1822 tnewline(1); /* always go to first col */ 1820 if(IS_SET(MODE_WRAP) && term.c.state & CURSOR_WRAPNEXT)
1823 tsetchar(c); 1821 tnewline(1); /* always go to first col */
1824 if(term.c.x+1 < term.col) 1822 tsetchar(c);
1825 tmoveto(term.c.x+1, term.c.y); 1823 if(term.c.x+1 < term.col)
1826 else 1824 tmoveto(term.c.x+1, term.c.y);
1827 term.c.state |= CURSOR_WRAPNEXT; 1825 else
1826 term.c.state |= CURSOR_WRAPNEXT;
1827 }
1828 } 1828 }
1829 } 1829 }
1830} 1830}