ECH handled correctly. - st - Personal fork of st
 (HTM) git clone git://git.drkhsh.at/st.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 3ba517e796e0c7a73c5030ad791be1db36a8cec5
 (DIR) parent eff05c7b90429ac4dddbbc53ac7d4c05dfc5efd4
 (HTM) Author: Aurélien Aptel <aurelien.aptel@gmail.com>
       Date:   Sun, 21 Feb 2010 14:14:58 +0100
       
       ECH handled correctly.
       
       Diffstat:
         M st.c                                |      27 ++++++++++++++++++++++-----
       
       1 file changed, 22 insertions(+), 5 deletions(-)
       ---
 (DIR) diff --git a/st.c b/st.c
       @@ -692,13 +692,24 @@ csihandle(void) {
                                default:
                                        goto unknown;
                                }
       -                } else goto unknown;
       +                } else {
       +                        switch(escseq.arg[0]) {
       +                        case 4:
       +                                term.mode &= ~MODE_INSERT;
       +                                break;
       +                        default:
       +                                goto unknown;
       +                        }
       +                }
                        break;
                case 'M': /* DL -- Delete <n> lines */
                        DEFAULT(escseq.arg[0], 1);
                        tdeleteline(escseq.arg[0]);
                        break;
       -        case 'X': /* ECH -- Erase <n> char XXX: same? */
       +        case 'X': /* ECH -- Erase <n> char */
       +                DEFAULT(escseq.arg[0], 1);
       +                tclearregion(term.c.x, term.c.y, term.c.x + escseq.arg[0], term.c.y);
       +                break;
                case 'P': /* DCH -- Delete <n> char */
                        DEFAULT(escseq.arg[0], 1);
                        tdeletechar(escseq.arg[0]);
       @@ -727,10 +738,16 @@ csihandle(void) {
                                        tcursor(CURSOR_SAVE);
                                        tclearregion(0, 0, term.col-1, term.row-1);
                                        break;
       -                        default:
       -                                goto unknown;
       +                        default: goto unknown;
       +                        }
       +                } else {
       +                        switch(escseq.arg[0]) {
       +                        case 4:
       +                                term.mode |= MODE_INSERT;
       +                                break;
       +                        default: goto unknown;
                                }
       -                } else goto unknown;
       +                };
                        break;
                case 'm': /* SGR -- Terminal attribute (color) */
                        tsetattr(escseq.arg, escseq.narg);