-csihandle(void) {
- switch(escseq.mode) {
- default:
- unknown:
- fprintf(stderr, "erresc: unknown csi ");
- csidump();
- /* die(""); */
- break;
- case '@': /* ICH -- Insert <n> blank char */
- DEFAULT(escseq.arg[0], 1);
- tinsertblank(escseq.arg[0]);
- break;
- case 'A': /* CUU -- Cursor <n> Up */
- case 'e':
- DEFAULT(escseq.arg[0], 1);
- tmoveto(term.c.x, term.c.y-escseq.arg[0]);
- break;
- case 'B': /* CUD -- Cursor <n> Down */
- DEFAULT(escseq.arg[0], 1);
- tmoveto(term.c.x, term.c.y+escseq.arg[0]);
- break;
- case 'C': /* CUF -- Cursor <n> Forward */
- case 'a':
- DEFAULT(escseq.arg[0], 1);
- tmoveto(term.c.x+escseq.arg[0], term.c.y);
- break;
- case 'D': /* CUB -- Cursor <n> Backward */
- DEFAULT(escseq.arg[0], 1);
- tmoveto(term.c.x-escseq.arg[0], term.c.y);
- break;
- case 'E': /* CNL -- Cursor <n> Down and first col */
- DEFAULT(escseq.arg[0], 1);
- tmoveto(0, term.c.y+escseq.arg[0]);
- break;
- case 'F': /* CPL -- Cursor <n> Up and first col */
- DEFAULT(escseq.arg[0], 1);
- tmoveto(0, term.c.y-escseq.arg[0]);
- break;
- case 'G': /* CHA -- Move to <col> */
- case '`': /* XXX: HPA -- same? */
- DEFAULT(escseq.arg[0], 1);
- tmoveto(escseq.arg[0]-1, term.c.y);
- break;
- case 'H': /* CUP -- Move to <row> <col> */
- case 'f': /* XXX: HVP -- same? */
- DEFAULT(escseq.arg[0], 1);
- DEFAULT(escseq.arg[1], 1);
- tmoveto(escseq.arg[1]-1, escseq.arg[0]-1);
- break;
- /* XXX: (CSI n I) CHT -- Cursor Forward Tabulation <n> tab stops */
- case 'J': /* ED -- Clear screen */
- switch(escseq.arg[0]) {
- case 0: /* below */
- tclearregion(term.c.x, term.c.y, term.col-1, term.c.y);
- if(term.c.y < term.row-1)
- tclearregion(0, term.c.y+1, term.col-1, term.row-1);
- break;
- case 1: /* above */
- if(term.c.y > 1)
- tclearregion(0, 0, term.col-1, term.c.y-1);
- tclearregion(0, term.c.y, term.c.x, term.c.y);
- break;
- case 2: /* all */
- tclearregion(0, 0, term.col-1, term.row-1);
- break;
- default:
- goto unknown;
- }
- break;
- case 'K': /* EL -- Clear line */
- switch(escseq.arg[0]) {
- case 0: /* right */
- tclearregion(term.c.x, term.c.y, term.col-1, term.c.y);
- break;
- case 1: /* left */
- tclearregion(0, term.c.y, term.c.x, term.c.y);
- break;
- case 2: /* all */
- tclearregion(0, term.c.y, term.col-1, term.c.y);
- break;
- }
- break;
- case 'S': /* SU -- Scroll <n> line up */
- DEFAULT(escseq.arg[0], 1);
- tscrollup(term.top, escseq.arg[0]);
- break;
- case 'T': /* SD -- Scroll <n> line down */
- DEFAULT(escseq.arg[0], 1);
- tscrolldown(term.top, escseq.arg[0]);
- break;
- case 'L': /* IL -- Insert <n> blank lines */
- DEFAULT(escseq.arg[0], 1);
- tinsertblankline(escseq.arg[0]);
- break;
- case 'l': /* RM -- Reset Mode */
- if(escseq.priv) {
- switch(escseq.arg[0]) {
- case 1:
- term.mode &= ~MODE_APPKEYPAD;