st-columnredraw-20241119-fb8569b.diff (2073B)
1 From fb8569b193cc063ad53388e8e2009fb6682092d2 Mon Sep 17 00:00:00 2001 2 From: elbachir-one <bachiralfa@gmail.com> 3 Date: Tue, 19 Nov 2024 15:39:16 +0100 4 Subject: [PATCH] Added columnredraw 5 6 --- 7 st.c | 25 +++++++++++++++++-------- 8 1 file changed, 17 insertions(+), 8 deletions(-) 9 10 diff --git a/st.c b/st.c 11 index 57c6e96..7371554 100644 12 --- a/st.c 13 +++ b/st.c 14 @@ -113,6 +113,7 @@ typedef struct { 15 typedef struct { 16 int row; /* nb row */ 17 int col; /* nb col */ 18 + int maxcol; /* Maximum number of columns */ 19 Line *line; /* screen */ 20 Line *alt; /* alternate screen */ 21 int *dirty; /* dirtyness of lines */ 22 @@ -1231,8 +1232,8 @@ tclearregion(int x1, int y1, int x2, int y2) 23 if (y1 > y2) 24 temp = y1, y1 = y2, y2 = temp; 25 26 - LIMIT(x1, 0, term.col-1); 27 - LIMIT(x2, 0, term.col-1); 28 + LIMIT(x1, 0, term.maxcol-1); 29 + LIMIT(x2, 0, term.maxcol-1); 30 LIMIT(y1, 0, term.row-1); 31 LIMIT(y2, 0, term.row-1); 32 33 @@ -2546,11 +2547,18 @@ void 34 tresize(int col, int row) 35 { 36 int i; 37 - int minrow = MIN(row, term.row); 38 - int mincol = MIN(col, term.col); 39 + int tmp; 40 + int minrow, mincol; 41 int *bp; 42 TCursor c; 43 44 + tmp = col; 45 + if (!term.maxcol) 46 + term.maxcol = term.col; 47 + col = MAX(col, term.maxcol); 48 + minrow = MIN(row, term.row); 49 + mincol = MIN(col, term.maxcol); 50 + 51 if (col < 1 || row < 1) { 52 fprintf(stderr, 53 "tresize: error resizing to %dx%d\n", col, row); 54 @@ -2593,17 +2601,18 @@ tresize(int col, int row) 55 term.line[i] = xmalloc(col * sizeof(Glyph)); 56 term.alt[i] = xmalloc(col * sizeof(Glyph)); 57 } 58 - if (col > term.col) { 59 - bp = term.tabs + term.col; 60 + if (col > term.maxcol) { 61 + bp = term.tabs + term.maxcol; 62 63 - memset(bp, 0, sizeof(*term.tabs) * (col - term.col)); 64 + memset(bp, 0, sizeof(*term.tabs) * (col - term.maxcol)); 65 while (--bp > term.tabs && !*bp) 66 /* nothing */ ; 67 for (bp += tabspaces; bp < term.tabs + col; bp += tabspaces) 68 *bp = 1; 69 } 70 /* update terminal size */ 71 - term.col = col; 72 + term.col = tmp; 73 + term.maxcol = col; 74 term.row = row; 75 /* reset scrolling region */ 76 tsetscroll(0, row-1); 77 -- 78 2.46.2 79