X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=st.c;h=d8ff30b5a8746e07cc70ae00722772788ec7015a;hb=6530025bcaf3a65083667a93ae50035bd7137bae;hp=45bc89d179e561ab7ecc317f08cdd8a33caad122;hpb=ec3268961d1dc4072f6caa6f97db5436da2ff411;p=st.git diff --git a/st.c b/st.c index 45bc89d..d8ff30b 100644 --- a/st.c +++ b/st.c @@ -382,7 +382,7 @@ static void tnewline(int); static void tputtab(int); static void tputc(char *, int); static void treset(void); -static int tresize(int, int); +static void tresize(int, int); static void tscrollup(int, int); static void tscrolldown(int, int); static void tsetattr(int *, int); @@ -1553,6 +1553,7 @@ tsetchar(char *c, Glyph *attr, int x, int y) { void tclearregion(int x1, int y1, int x2, int y2) { int x, y, temp; + Glyph *gp; if(x1 > x2) temp = x1, x1 = x2, x2 = temp; @@ -1567,10 +1568,13 @@ tclearregion(int x1, int y1, int x2, int y2) { for(y = y1; y <= y2; y++) { term.dirty[y] = 1; for(x = x1; x <= x2; x++) { + gp = &term.line[y][x]; if(selected(x, y)) selclear(NULL); - term.line[y][x] = term.c.attr; - memcpy(term.line[y][x].c, " ", 2); + gp->fg = term.c.attr.fg; + gp->bg = term.c.attr.bg; + gp->mode = 0; + memcpy(gp->c, " ", 2); } } } @@ -2307,13 +2311,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); @@ -2652,7 +2656,7 @@ tputc(char *c, int len) { } } -int +void tresize(int col, int row) { int i; int minrow = MIN(row, term.row); @@ -2662,8 +2666,11 @@ tresize(int col, int row) { Line *orig; TCursor c; - if(col < 1 || row < 1) - return 0; + if(col < 1 || row < 1) { + fprintf(stderr, + "tresize: error resizing to %dx%d\n", col, row); + return; + } /* free unneeded rows */ i = 0; @@ -2693,14 +2700,12 @@ tresize(int col, int row) { /* resize each row to new width, zero-pad if needed */ for(i = 0; i < minrow; i++) { - term.dirty[i] = 1; term.line[i] = xrealloc(term.line[i], col * sizeof(Glyph)); term.alt[i] = xrealloc(term.alt[i], col * sizeof(Glyph)); } /* allocate any new rows */ for(/* i == minrow */; i < row; i++) { - term.dirty[i] = 1; term.line[i] = xmalloc(col * sizeof(Glyph)); term.alt[i] = xmalloc(col * sizeof(Glyph)); } @@ -2720,7 +2725,7 @@ tresize(int col, int row) { tsetscroll(0, row-1); /* make use of the LIMIT in tmoveto */ tmoveto(term.c.x, term.c.y); - /* Clearing both screens */ + /* Clearing both screens (it makes dirty all lines) */ orig = term.line; c = term.c; do { @@ -2734,8 +2739,6 @@ tresize(int col, int row) { tcursor(CURSOR_LOAD); } while(orig != term.line); term.c = c; - - return (slide > 0); } void