st-columnredraw-20241119-fb8569b.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       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