X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=st.c;h=1c998ec65f37f948475a39022c39f0899eff8452;hb=8342036f983288046e03a34055c10fc6b6b11017;hp=814f3f5b404b4c3d842456e65252cfd59d44848d;hpb=d4a17316d33f3c5a0017d7fe6e7e174883ccaa97;p=st.git diff --git a/st.c b/st.c index 814f3f5..1c998ec 100644 --- a/st.c +++ b/st.c @@ -70,7 +70,7 @@ char *argv0; #define LEN(a) (sizeof(a) / sizeof(a)[0]) #define DEFAULT(a, b) (a) = (a) ? (a) : (b) #define BETWEEN(x, a, b) ((a) <= (x) && (x) <= (b)) -#define ISCONTROLC0(c) (BETWEEN(c, 0, 0x1f)) +#define ISCONTROLC0(c) (BETWEEN(c, 0, 0x1f) || (c) == '\177') #define ISCONTROLC1(c) (BETWEEN(c, 0x80, 0x9f)) #define ISCONTROL(c) (ISCONTROLC0(c) || ISCONTROLC1(c)) #define LIMIT(x, a, b) (x) = (x) < (a) ? (a) : (x) > (b) ? (b) : (x) @@ -86,8 +86,6 @@ char *argv0; #define TRUEBLUE(x) (((x) & 0xff) << 8) -#define VT102ID "\033[?6c" - enum glyph_attribute { ATTR_NULL = 0, ATTR_BOLD = 1, @@ -1358,9 +1356,12 @@ treset(void) { memset(term.trantbl, sizeof(term.trantbl), CS_USA); term.charset = 0; - tclearregion(0, 0, term.col-1, term.row-1); - tmoveto(0, 0); - tcursor(CURSOR_SAVE); + for(i = 0; i < 2; i++) { + tmoveto(0, 0); + tcursor(CURSOR_SAVE); + tclearregion(0, 0, term.col-1, term.row-1); + tswapscreen(); + } } void @@ -1965,7 +1966,7 @@ csihandle(void) { break; case 'c': /* DA -- Device Attributes */ if(csiescseq.arg[0] == 0) - ttywrite(VT102ID, sizeof(VT102ID) - 1); + ttywrite(vtiden, sizeof(vtiden) - 1); break; case 'C': /* CUF -- Cursor Forward */ case 'a': /* HPR -- Cursor Forward */ @@ -2311,13 +2312,13 @@ techo(char *buf, int len) { for(; len > 0; buf++, len--) { char c = *buf; - if(ISCONTROL(c)) { /* control code */ + if(ISCONTROL((uchar) c)) { /* control code */ if(c & 0x80) { c &= 0x7f; tputc("^", 1); tputc("[", 1); } else if(c != '\n' && c != '\r' && c != '\t') { - c ^= '\x40'; + c ^= 0x40; tputc("^", 1); } tputc(&c, 1); @@ -2433,7 +2434,7 @@ tcontrolcode(uchar ascii) { case 0x98: /* TODO: SOS */ break; case 0x9a: /* DECID -- Identify Terminal */ - ttywrite(VT102ID, sizeof(VT102ID) - 1); + ttywrite(vtiden, sizeof(vtiden) - 1); break; case 0x9b: /* TODO: CSI */ case 0x9c: /* TODO: ST */ @@ -2589,7 +2590,7 @@ tputc(char *c, int len) { } break; case 'Z': /* DECID -- Identify Terminal */ - ttywrite(VT102ID, sizeof(VT102ID) - 1); + ttywrite(vtiden, sizeof(vtiden) - 1); break; case 'c': /* RIS -- Reset to inital state */ treset(); @@ -2663,7 +2664,6 @@ tresize(int col, int row) { int mincol = MIN(col, term.col); int slide = term.c.y - row + 1; bool *bp; - Line *orig; TCursor c; if(col < 1 || row < 1) { @@ -2726,9 +2726,8 @@ tresize(int col, int row) { /* make use of the LIMIT in tmoveto */ tmoveto(term.c.x, term.c.y); /* Clearing both screens (it makes dirty all lines) */ - orig = term.line; c = term.c; - do { + for(i = 0; i < 2; i++) { if(mincol < col && 0 < minrow) { tclearregion(mincol, 0, col - 1, minrow - 1); } @@ -2737,7 +2736,7 @@ tresize(int col, int row) { } tswapscreen(); tcursor(CURSOR_LOAD); - } while(orig != term.line); + } term.c = c; } @@ -3872,8 +3871,8 @@ run(void) { void usage(void) { die("%s " VERSION " (c) 2010-2014 st engineers\n" \ - "usage: st [-a] [-v] [-c class] [-f font] [-g geometry] [-o file]" \ - " [-t title] [-w windowid] [-e command ...]\n", argv0); + "usage: st [-a] [-v] [-c class] [-f font] [-g geometry] [-o file]\n" + " [-i] [-t title] [-w windowid] [-e command ...]\n", argv0); } int