dwm-status2d-20200508-60bb3df.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-status2d-20200508-60bb3df.diff (4744B)
       ---
            1 From 60bb3dfaf91227eb02e828d74e6f4758b2c56542 Mon Sep 17 00:00:00 2001
            2 From: cultab <rroarck@gmail.com>
            3 Date: Fri, 8 May 2020 13:56:08 +0300
            4 Subject: [PATCH] fix status2d to work after ed3ab6
            5 
            6 ed3ab6 changed the name of the variable sw to tw, now the patch won't apply nor work.
            7 This patch updates the variable name to the new one.
            8 ---
            9  dwm.c | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---
           10  1 file changed, 114 insertions(+), 6 deletions(-)
           11 
           12 diff --git a/dwm.c b/dwm.c
           13 index 9fd0286..71e18be 100644
           14 --- a/dwm.c
           15 +++ b/dwm.c
           16 @@ -163,6 +163,7 @@ static void detachstack(Client *c);
           17  static Monitor *dirtomon(int dir);
           18  static void drawbar(Monitor *m);
           19  static void drawbars(void);
           20 +static int drawstatusbar(Monitor *m, int bh, char* text);
           21  static void enternotify(XEvent *e);
           22  static void expose(XEvent *e);
           23  static void focus(Client *c);
           24 @@ -237,7 +238,7 @@ static void zoom(const Arg *arg);
           25  
           26  /* variables */
           27  static const char broken[] = "broken";
           28 -static char stext[256];
           29 +static char stext[1024];
           30  static int screen;
           31  static int sw, sh;           /* X display screen geometry width, height */
           32  static int bh, blw = 0;      /* bar geometry */
           33 @@ -485,7 +486,7 @@ cleanup(void)
           34                  cleanupmon(mons);
           35          for (i = 0; i < CurLast; i++)
           36                  drw_cur_free(drw, cursor[i]);
           37 -        for (i = 0; i < LENGTH(colors); i++)
           38 +        for (i = 0; i < LENGTH(colors) + 1; i++)
           39                  free(scheme[i]);
           40          XDestroyWindow(dpy, wmcheckwin);
           41          drw_free(drw);
           42 @@ -693,6 +694,114 @@ dirtomon(int dir)
           43          return m;
           44  }
           45  
           46 +int
           47 +drawstatusbar(Monitor *m, int bh, char* stext) {
           48 +        int ret, i, w, x, len;
           49 +        short isCode = 0;
           50 +        char *text;
           51 +        char *p;
           52 +
           53 +        len = strlen(stext) + 1 ;
           54 +        if (!(text = (char*) malloc(sizeof(char)*len)))
           55 +                die("malloc");
           56 +        p = text;
           57 +        memcpy(text, stext, len);
           58 +
           59 +        /* compute width of the status text */
           60 +        w = 0;
           61 +        i = -1;
           62 +        while (text[++i]) {
           63 +                if (text[i] == '^') {
           64 +                        if (!isCode) {
           65 +                                isCode = 1;
           66 +                                text[i] = '\0';
           67 +                                w += TEXTW(text) - lrpad;
           68 +                                text[i] = '^';
           69 +                                if (text[++i] == 'f')
           70 +                                        w += atoi(text + ++i);
           71 +                        } else {
           72 +                                isCode = 0;
           73 +                                text = text + i + 1;
           74 +                                i = -1;
           75 +                        }
           76 +                }
           77 +        }
           78 +        if (!isCode)
           79 +                w += TEXTW(text) - lrpad;
           80 +        else
           81 +                isCode = 0;
           82 +        text = p;
           83 +
           84 +        w += 2; /* 1px padding on both sides */
           85 +        ret = x = m->ww - w;
           86 +
           87 +        drw_setscheme(drw, scheme[LENGTH(colors)]);
           88 +        drw->scheme[ColFg] = scheme[SchemeNorm][ColFg];
           89 +        drw->scheme[ColBg] = scheme[SchemeNorm][ColBg];
           90 +        drw_rect(drw, x, 0, w, bh, 1, 1);
           91 +        x++;
           92 +
           93 +        /* process status text */
           94 +        i = -1;
           95 +        while (text[++i]) {
           96 +                if (text[i] == '^' && !isCode) {
           97 +                        isCode = 1;
           98 +
           99 +                        text[i] = '\0';
          100 +                        w = TEXTW(text) - lrpad;
          101 +                        drw_text(drw, x, 0, w, bh, 0, text, 0);
          102 +
          103 +                        x += w;
          104 +
          105 +                        /* process code */
          106 +                        while (text[++i] != '^') {
          107 +                                if (text[i] == 'c') {
          108 +                                        char buf[8];
          109 +                                        memcpy(buf, (char*)text+i+1, 7);
          110 +                                        buf[7] = '\0';
          111 +                                        drw_clr_create(drw, &drw->scheme[ColFg], buf);
          112 +                                        i += 7;
          113 +                                } else if (text[i] == 'b') {
          114 +                                        char buf[8];
          115 +                                        memcpy(buf, (char*)text+i+1, 7);
          116 +                                        buf[7] = '\0';
          117 +                                        drw_clr_create(drw, &drw->scheme[ColBg], buf);
          118 +                                        i += 7;
          119 +                                } else if (text[i] == 'd') {
          120 +                                        drw->scheme[ColFg] = scheme[SchemeNorm][ColFg];
          121 +                                        drw->scheme[ColBg] = scheme[SchemeNorm][ColBg];
          122 +                                } else if (text[i] == 'r') {
          123 +                                        int rx = atoi(text + ++i);
          124 +                                        while (text[++i] != ',');
          125 +                                        int ry = atoi(text + ++i);
          126 +                                        while (text[++i] != ',');
          127 +                                        int rw = atoi(text + ++i);
          128 +                                        while (text[++i] != ',');
          129 +                                        int rh = atoi(text + ++i);
          130 +
          131 +                                        drw_rect(drw, rx + x, ry, rw, rh, 1, 0);
          132 +                                } else if (text[i] == 'f') {
          133 +                                        x += atoi(text + ++i);
          134 +                                }
          135 +                        }
          136 +
          137 +                        text = text + i + 1;
          138 +                        i=-1;
          139 +                        isCode = 0;
          140 +                }
          141 +        }
          142 +
          143 +        if (!isCode) {
          144 +                w = TEXTW(text) - lrpad;
          145 +                drw_text(drw, x, 0, w, bh, 0, text, 0);
          146 +        }
          147 +
          148 +        drw_setscheme(drw, scheme[SchemeNorm]);
          149 +        free(p);
          150 +
          151 +        return ret;
          152 +}
          153 +
          154  void
          155  drawbar(Monitor *m)
          156  {
          157 @@ -704,9 +813,7 @@ drawbar(Monitor *m)
          158  
          159          /* draw status first so it can be overdrawn by tags later */
          160          if (m == selmon) { /* status is only drawn on selected monitor */
          161 -                drw_setscheme(drw, scheme[SchemeNorm]);
          162 -                tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */
          163 -                drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0);
          164 +                tw = m->ww - drawstatusbar(m, bh, stext);
          165          }
          166  
          167          for (c = m->clients; c; c = c->next) {
          168 @@ -1568,7 +1675,8 @@ setup(void)
          169          cursor[CurResize] = drw_cur_create(drw, XC_sizing);
          170          cursor[CurMove] = drw_cur_create(drw, XC_fleur);
          171          /* init appearance */
          172 -        scheme = ecalloc(LENGTH(colors), sizeof(Clr *));
          173 +        scheme = ecalloc(LENGTH(colors) + 1, sizeof(Clr *));
          174 +        scheme[LENGTH(colors)] = drw_scm_create(drw, colors[0], 3);
          175          for (i = 0; i < LENGTH(colors); i++)
          176                  scheme[i] = drw_scm_create(drw, colors[i], 3);
          177          /* init bars */
          178 -- 
          179 2.26.2
          180