JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
End a sequence only on CAN, SUB, \a and C1s.
[st.git] / st.c
diff --git a/st.c b/st.c
index 7474256..fd872c1 100644 (file)
--- a/st.c
+++ b/st.c
@@ -1837,7 +1837,7 @@ tsetmode(bool priv, bool set, int *args, int narg) {
                                if (!allowaltscreen)
                                        break;
                                tcursor((set) ? CURSOR_SAVE : CURSOR_LOAD);
-                               /* FALLTHRU */
+                               /* FALLTHROUGH */
                        case 47: /* swap screen */
                        case 1047:
                                if (!allowaltscreen)
@@ -1851,7 +1851,7 @@ tsetmode(bool priv, bool set, int *args, int narg) {
                                        tswapscreen();
                                if(*args != 1049)
                                        break;
-                               /* FALLTRU */
+                               /* FALLTHROUGH */
                        case 1048:
                                tcursor((set) ? CURSOR_SAVE : CURSOR_LOAD);
                                break;
@@ -2146,7 +2146,7 @@ strhandle(void) {
                        if(narg < 3)
                                break;
                        p = strescseq.args[2];
-                       /* fall through */
+                       /* FALLTHROUGH */
                case 104: /* color reset, here p = NULL */
                        j = (narg > 1) ? atoi(strescseq.args[1]) : -1;
                        if (!xsetcolorname(j, p)) {
@@ -2335,19 +2335,19 @@ tcontrolcode(uchar ascii) {
        switch(ascii) {
        case '\t':   /* HT */
                tputtab(1);
-               break;
+               return;
        case '\b':   /* BS */
                tmoveto(term.c.x-1, term.c.y);
-               break;
+               return;
        case '\r':   /* CR */
                tmoveto(0, term.c.y);
-               break;
+               return;
        case '\f':   /* LF */
        case '\v':   /* VT */
        case '\n':   /* LF */
                /* go to first col if the mode is set */
                tnewline(IS_SET(MODE_CRLF));
-               break;
+               return;
        case '\a':   /* BEL */
                if(term.esc & ESC_STR_END) {
                        /* backwards compatibility to xterm */
@@ -2366,10 +2366,10 @@ tcontrolcode(uchar ascii) {
                return;
        case '\016': /* SO */
                term.charset = 0;
-               break;
+               return;
        case '\017': /* SI */
                term.charset = 1;
-               break;
+               return;
        case '\032': /* SUB */
                tsetchar(question, &term.c.attr, term.c.x, term.c.y);
        case '\030': /* CAN */
@@ -2380,6 +2380,7 @@ tcontrolcode(uchar ascii) {
        case '\021': /* XON (IGNORED) */
        case '\023': /* XOFF (IGNORED) */
        case 0177:   /* DEL (IGNORED) */
+               return;
        case 0x84:   /* TODO: IND */
        case 0x85:   /* TODO: NEL */
        case 0x88:   /* TODO: HTS */
@@ -2396,6 +2397,7 @@ tcontrolcode(uchar ascii) {
        case 0x9f:   /* TODO: APC */
                break;
        }
+       /* only CAN, SUB, \a and C1 chars interrupt a sequence */
        term.esc &= ~(ESC_STR_END|ESC_STR);
        return;
 }
@@ -2446,7 +2448,7 @@ tputc(char *c, int len) {
                   (ascii == '\a' || ascii == 030 ||
                    ascii == 032  || ascii == 033 ||
                    ISCONTROLC1(unicodep))) {
-                       term.esc &= ~ESC_STR;
+                       term.esc &= ~(ESC_START|ESC_STR);
                        term.esc |= ESC_STR_END;
                } else if(strescseq.len + len < sizeof(strescseq.buf) - 1) {
                        memmove(&strescseq.buf[strescseq.len], c, len);