Skip to content

Instantly share code, notes, and snippets.

@KOMON
Created March 24, 2015 17:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save KOMON/0a4819f030e4d6f84ebe to your computer and use it in GitHub Desktop.
Save KOMON/0a4819f030e4d6f84ebe to your computer and use it in GitHub Desktop.
a DWM patch to make the statuscolors patch work with the latest commit to HEAD
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
@@ -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);
@@ -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;
@@ -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);
}
@@ -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
@@ -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
@@ -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)
@@ -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;
@@ -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;
@@ -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);
}
}
@@ -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 {
@@ -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);
@@ -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();
@@ -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]);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment