[wiki] [sites] Added statuscolors patch for current git version of dwm || Daniel Raloff

From: <git_AT_suckless.org>
Date: Wed, 25 Mar 2015 14:59:12 +0100

commit 456cab5eb268774276e944c4b8d0015567b7b81f
Author: Daniel Raloff <dan_AT_raloff.net>
Date: Wed Mar 25 06:58:52 2015 -0700

    Added statuscolors patch for current git version of dwm

diff --git a/dwm.suckless.org/patches/dwm-6.1-statuscolors.diff b/dwm.suckless.org/patches/dwm-6.1-statuscolors.diff
new file mode 100644
index 0000000..1b3676f
--- /dev/null
+++ b/dwm.suckless.org/patches/dwm-6.1-statuscolors.diff
_AT_@ -0,0 +1,206 @@
+Only in dwm: config.def.h
+diff -up dwm/drw.c dwm_git_colors/drw.c
+--- dwm/drw.c 2015-03-24 10:00:33.865796838 -0700
++++ dwm_git_colors/drw.c 2015-03-24 09:56:59.542647284 -0700
+_AT_@ -202,13 +202,38 @@ drw_setscheme(Drw *drw, ClrScheme *schem
+ drw->scheme = scheme;
+ }
+
++int
++drw_colored_text(Drw *drw, ClrScheme *scheme, int numcolors, int x, int y, unsigned int w, unsigned int h, char *text) {
++ if(!drw || !drw->fontcount || !drw->scheme)
++ return 0;
++
++ char *buf = text, *ptr = buf, c =1;
++ int i;
++
++ while(*ptr) {
++ for(i = 0; *ptr < 0 || *ptr > numcolors; i++, ptr++);
++ if(!*ptr)
++ break;
++ c = *ptr;
++ *ptr = 0;
++ if(i) {
++ x = drw_text(drw, x, y, w, h, buf, 0);
++ }
++ *ptr = c;
++ drw_setscheme(drw, &scheme[c-1]);
++ buf = ++ptr;
++ }
++ drw_text(drw, x, y, w, h, buf, 0);
++ return x;
++}
++
+ void
+-drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int empty, int invert) {
++drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int empty) {
+ int dx;
+
+ if(!drw || !drw->fontcount || !drw->scheme)
+ return;
+- XSetForeground(drw->dpy, drw->gc, invert ? drw->scheme->bg->pix : drw->scheme->fg->pix);
++ XSetForeground(drw->dpy, drw->gc, drw->scheme->fg->pix);
+ dx = (drw->fonts[0]->ascent + drw->fonts[0]->descent + 2) / 4;
+ if(filled)
+ XFillRectangle(drw->dpy, drw->drawable, drw->gc, x+1, y+1, dx+1, dx+1);
+_AT_@ -217,7 +242,7 @@ drw_rect(Drw *drw, int x, int y, unsigne
+ }
+
+ int
+-drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, const char *text, int invert) {
++drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, const char *text, int pad) {
+ char buf[1024];
+ int tx, ty, th;
+ Extnts tex;
+_AT_@ -242,7 +267,7 @@ drw_text(Drw *drw, int x, int y, unsigne
+ if (!drw || !drw->scheme) {
+ return 0;
+ } else if (render) {
+- XSetForeground(drw->dpy, drw->gc, invert ? drw->scheme->fg->pix : drw->scheme->bg->pix);
++ XSetForeground(drw->dpy, drw->gc, drw->scheme->bg->pix);
+ XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
+ }
+
+_AT_@ -294,10 +319,10 @@ drw_text(Drw *drw, int x, int y, unsigne
+ for(i = len; i && i > len - 3; buf[--i] = '.');
+
+ if (render) {
+- th = curfont->ascent + curfont->descent;
+- ty = y + (h / 2) - (th / 2) + curfont->ascent;
++ th = pad ? (curfont->ascent + curfont->descent) : 0;
++ ty = y + ((h + curfont->ascent - curfont->descent) / 2);
+ tx = x + (h / 2);
+- XftDrawStringUtf8(d, invert ? &drw->scheme->bg->rgb : &drw->scheme->fg->rgb, curfont->xfont, tx, ty, (XftChar8 *)buf, len);
++ XftDrawStringUtf8(d, &drw->scheme->fg->rgb, curfont->xfont, tx, ty, (XftChar8 *)buf, len);
+ }
+
+ x += tex.w;
+diff -up dwm/drw.h dwm_git_colors/drw.h
+--- dwm/drw.h 2015-03-24 10:00:33.865796838 -0700
++++ dwm_git_colors/drw.h 2015-03-24 09:22:03.216317586 -0700
+_AT_@ -67,8 +67,9 @@ void drw_setfont(Drw *drw, Fnt *font);
+ void drw_setscheme(Drw *drw, ClrScheme *scheme);
+
+ /* Drawing functions */
+-void drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int empty, int invert);
+-int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, const char *text, int invert);
++int drw_colored_text(Drw *drw, ClrScheme *scheme, int numcolors, int x, int y, unsigned int w, unsigned int h, char *text);
++void drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int empty);
++int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, const char *text, int pad);
+
+ /* Map functions */
+ void drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h);
+Binary files dwm/drw.o and dwm_git_colors/drw.o differ
+Binary files dwm/dwm and dwm_git_colors/dwm differ
+diff -up dwm/dwm.c dwm_git_colors/dwm.c
+--- dwm/dwm.c 2015-03-24 10:02:59.752217939 -0700
++++ dwm_git_colors/dwm.c 2015-03-24 09:23:22.826334134 -0700
+_AT_@ -51,6 +51,7 @@
+ * MAX(0, MIN((y)+(h),(m)->wy+(m)->wh) - MAX((y),(m)->wy)))
+ #define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags]))
+ #define LENGTH(X) (sizeof X / sizeof X[0])
++#define MAXCOLORS 9
+ #define MOUSEMASK (BUTTONMASK|PointerMotionMask)
+ #define WIDTH(X) ((X)->w + 2 * (X)->bw)
+ #define HEIGHT(X) ((X)->h + 2 * (X)->bw)
+_AT_@ -261,7 +263,7 @@ static void (*handler[LASTEvent]) (XEven
+ static Atom wmatom[WMLast], netatom[NetLast];
+ static Bool running = True;
+ static Cur *cursor[CurLast];
+-static ClrScheme scheme[SchemeLast];
++static ClrScheme scheme[MAXCOLORS];
+ static Display *dpy;
+ static Drw *drw;
+ static Monitor *mons, *selmon;
+_AT_@ -703,14 +716,14 @@ drawbar(Monitor *m) {
+ x = 0;
+ for(i = 0; i < LENGTH(tags); i++) {
+ w = TEXTW(tags[i]);
+- drw_setscheme(drw, m->tagset[m->seltags] & 1 << i ? &scheme[SchemeSel] : &scheme[SchemeNorm]);
+- drw_text(drw, x, 0, w, bh, tags[i], urg & 1 << i);
++ drw_setscheme(drw, &scheme[(m->tagset[m->seltags] & 1 << i) ? 1 : (urg & 1 << i ? 2:0)]);
++ drw_text(drw, x, 0, w, bh, tags[i], 1);
+ drw_rect(drw, x, 0, w, bh, m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
+- occ & 1 << i, urg & 1 << i);
++ occ & 1 << i);
+ x += w;
+ }
+ w = blw = TEXTW(m->ltsymbol);
+- drw_setscheme(drw, &scheme[SchemeNorm]);
++ drw_setscheme(drw, &scheme[0]);
+ drw_text(drw, x, 0, w, bh, m->ltsymbol, 0);
+ x += w;
+ xx = x;
+_AT_@ -721,19 +734,19 @@ drawbar(Monitor *m) {
+ x = xx;
+ w = m->ww - xx;
+ }
+- drw_text(drw, x, 0, w, bh, stext, 0);
++ drw_colored_text(drw, scheme, NUMCOLORS, x, 0, w, bh, stext);
+ }
+ else
+ x = m->ww;
+ if((w = x - xx) > bh) {
+ x = xx;
+ if(m->sel) {
+- drw_setscheme(drw, m == selmon ? &scheme[SchemeSel] : &scheme[SchemeNorm]);
+- drw_text(drw, x, 0, w, bh, m->sel->name, 0);
+- drw_rect(drw, x, 0, w, bh, m->sel->isfixed, m->sel->isfloating, 0);
++ drw_setscheme(drw, &scheme[m == selmon ? 1 : 0]);
++ drw_text(drw, x, 0, w, bh, m->sel->name, 1);
++ drw_rect(drw, x, 0, w, bh, m->sel->isfixed, m->sel->isfloating);
+ }
+ else {
+- drw_setscheme(drw, &scheme[SchemeNorm]);
++ drw_setscheme(drw, &scheme[0]);
+ drw_text(drw, x, 0, w, bh, NULL, 0);
+ }
+ }
+_AT_@ -791,7 +804,7 @@ focus(Client *c) {
+ detachstack(c);
+ attachstack(c);
+ grabbuttons(c, True);
+- XSetWindowBorder(dpy, c->win, scheme[SchemeSel].border->pix);
++ XSetWindowBorder(dpy, c->win, scheme[1].border->pix);
+ setfocus(c);
+ }
+ else {
+_AT_@ -1039,7 +1052,7 @@ manage(Window w, XWindowAttributes *wa)
+
+ wc.border_width = c->bw;
+ XConfigureWindow(dpy, w, CWBorderWidth, &wc);
+- XSetWindowBorder(dpy, w, scheme[SchemeNorm].border->pix);
++ XSetWindowBorder(dpy, w, scheme[0].border->pix);
+ configure(c); /* propagates border_width, if size doesn't change */
+ updatewindowtype(c);
+ updatesizehints(c);
+_AT_@ -1531,12 +1544,12 @@ setup(void) {
+ cursor[CurResize] = drw_cur_create(drw, XC_sizing);
+ cursor[CurMove] = drw_cur_create(drw, XC_fleur);
+ /* init appearance */
+- scheme[SchemeNorm].border = drw_clr_create(drw, normbordercolor);
+- scheme[SchemeNorm].bg = drw_clr_create(drw, normbgcolor);
+- scheme[SchemeNorm].fg = drw_clr_create(drw, normfgcolor);
+- scheme[SchemeSel].border = drw_clr_create(drw, selbordercolor);
+- scheme[SchemeSel].bg = drw_clr_create(drw, selbgcolor);
+- scheme[SchemeSel].fg = drw_clr_create(drw, selfgcolor);
++ for(int i = 0; i < NUMCOLORS; i++){
++ scheme[i].border = drw_clr_create(drw, colors[i][0]);
++ scheme[i].fg = drw_clr_create(drw, colors[i][1]);
++ scheme[i].bg = drw_clr_create(drw, colors[i][2]);
++ }
++
+ /* init bars */
+ updatebars();
+ updatestatus();
+_AT_@ -1685,7 +1698,7 @@ unfocus(Client *c, Bool setfocus) {
+ if(!c)
+ return;
+ grabbuttons(c, False);
+- XSetWindowBorder(dpy, c->win, scheme[SchemeNorm].border->pix);
++ XSetWindowBorder(dpy, c->win, scheme[0].border->pix);
+ if(setfocus) {
+ XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
+ XDeleteProperty(dpy, root, netatom[NetActiveWindow]);
+Binary files dwm/dwm.o and dwm_git_colors/dwm.o differ
+Common subdirectories: dwm/.git and dwm_git_colors/.git
diff --git a/dwm.suckless.org/patches/statuscolors.md b/dwm.suckless.org/patches/statuscolors.md
index f996553..159ec40 100644
--- a/dwm.suckless.org/patches/statuscolors.md
+++ b/dwm.suckless.org/patches/statuscolors.md
_AT_@ -59,3 +59,4 @@ An example status script snippet to take advantage of the colors:
  * [dwm-5.7.2-statuscolors.diff](historical/dwm-5.7.2-statuscolors.diff)
  * [dwm-5.8.2-statuscolors.diff](historical/dwm-5.8.2-statuscolors.diff)
  * [dwm-5.9-statuscolors.diff](dwm-5.9-statuscolors.diff)
+ * [dwm-6.1-statuscolors.diff](dwm-6.1-statuscolors.diff)
Received on Wed Mar 25 2015 - 14:59:12 CET

This archive was generated by hypermail 2.3.0 : Thu Jun 18 2015 - 17:40:17 CEST