[wiki] [sites] Added statuscolors patch for current git version of dwm || Daniel Raloff
 
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