~kris/suckless

st

6d595f99ae74e45d9c76421de2d756143ca34a07 — siduck76 5 years ago 8742085
[PATCH] Patch for persistence of content across resize
1 files changed, 17 insertions(+), 8 deletions(-)

M st.c
M st.c => st.c +17 -8
@@ 1373,6 1373,8 @@ tclearregion(int x1, int y1, int x2, int y2)
	LIMIT(x2, 0, term.maxcol-1);
	LIMIT(y1, 0, term.row-1);
	LIMIT(y2, 0, term.row-1);
        if (x2 == term.col-1)
		x2 = term.maxcol-1;

	for (y = y1; y <= y2; y++) {
		term.dirty[y] = 1;


@@ 2709,7 2711,9 @@ tresize(int col, int row)
	int i, j;
        int tmp;
	int minrow, mincol;
        int pmaxcol = term.maxcol;
	int *bp;
        Glyph *gp;
	TCursor c;

        tmp = col;


@@ 2726,6 2730,8 @@ tresize(int col, int row)
		return;
	}

       	term.maxcol = MAX(col, pmaxcol);

	/*
	 * slide screen to keep cursor where we expect it -
	 * tscrollup would work here, but we can optimize to


@@ 2752,10 2758,13 @@ tresize(int col, int row)
	term.tabs = xrealloc(term.tabs, col * sizeof(*term.tabs));

	for (i = 0; i < HISTSIZE; i++) {
		term.hist[i] = xrealloc(term.hist[i], col * sizeof(Glyph));
		for (j = mincol; j < col; j++) {
			term.hist[i][j] = term.c.attr;
			term.hist[i][j].u = ' ';
		term.hist[i] = xrealloc(term.hist[i], term.maxcol * sizeof(Glyph));
		for (j = pmaxcol; j < term.maxcol; j++) {
			gp = &term.hist[i][j];
			gp->fg = defaultfg;
			gp->bg = defaultbg;
			gp->mode = ATTR_NULL;
			gp->u = ' ';
		}
	}



@@ 2767,8 2776,8 @@ tresize(int col, int row)

	/* allocate any new rows */
	for (/* i = minrow */; i < row; i++) {
		term.line[i] = xmalloc(col * sizeof(Glyph));
		term.alt[i] = xmalloc(col * sizeof(Glyph));
                term.line[i] = xmalloc(term.maxcol * sizeof(Glyph));
		term.alt[i] = xmalloc(term.maxcol * sizeof(Glyph));
	}
        if (col > term.maxcol) {
		bp = term.tabs + term.maxcol;


@@ 2790,8 2799,8 @@ tresize(int col, int row)
	/* Clearing both screens (it makes dirty all lines) */
	c = term.c;
	for (i = 0; i < 2; i++) {
		if (mincol < col && 0 < minrow) {
			tclearregion(mincol, 0, col - 1, minrow - 1);
          	if (pmaxcol < col && 0 < minrow) {
			tclearregion(pmaxcol, 0, col - 1, minrow - 1);
		}
		if (0 < col && minrow < row) {
			tclearregion(0, minrow, col - 1, row - 1);