diff options
author | Aurélien Aptel | 2010-02-21 14:14:58 +0100 |
---|---|---|
committer | Aurélien Aptel | 2010-02-21 14:14:58 +0100 |
commit | 3ba517e796e0c7a73c5030ad791be1db36a8cec5 (patch) | |
tree | 19b85958741f4bceb61e83b7a8c50b6fca60e2f2 | |
parent | eff05c7b90429ac4dddbbc53ac7d4c05dfc5efd4 (diff) | |
download | st-3ba517e796e0c7a73c5030ad791be1db36a8cec5.tar.gz st-3ba517e796e0c7a73c5030ad791be1db36a8cec5.tar.xz st-3ba517e796e0c7a73c5030ad791be1db36a8cec5.zip |
ECH handled correctly.
-rw-r--r-- | st.c | 27 |
1 files changed, 22 insertions, 5 deletions
@@ -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); |