--
- typedef struct {
- const char *class;
- const char *instance;
-_AT_@ -273,6 +253,31 @@
- /* configuration, allows nested code to access above variables */
- #include "config.h"
-
-+struct Monitor {
-+ char ltsymbol[16];
-+ float mfact;
-+ int num;
-+ int by; /* bar geometry */
-+ int mx, my, mw, mh; /* screen size */
-+ int wx, wy, ww, wh; /* window area */
-+ unsigned int seltags;
-+ unsigned int sellt;
-+ unsigned int tagset[2];
-+ Bool showbar;
-+ Bool topbar;
-+ Client *clients;
-+ Client *sel;
-+ Client *stack;
-+ Monitor *next;
-+ Window barwin;
-+ const Layout *lt[2];
-+ int curtag;
-+ int prevtag;
-+ const Layout *lts[LENGTH(tags) + 1];
-+ double mfacts[LENGTH(tags) + 1];
-+ Bool showbars[LENGTH(tags) + 1];
-+};
-+
- /* compile-time check if all tags fit into an unsigned int bit array. */
- struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
-
-_AT_@ -1450,7 +1455,7 @@
- if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
- selmon->sellt ^= 1;
- if(arg && arg->v)
-- selmon->lt[selmon->sellt] = (Layout *)arg->v;
-+ selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag] = (Layout *)arg->v;
- strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol);
- if(selmon->sel)
- arrange(selmon);
-_AT_@ -1468,13 +1473,15 @@
- f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
- if(f < 0.1 || f > 0.9)
- return;
-- selmon->mfact = f;
-+ selmon->mfact = selmon->mfacts[selmon->curtag] = f;
- arrange(selmon);
- }
-
- void
- setup(void) {
- XSetWindowAttributes wa;
-+ Monitor *m;
-+ unsigned int i;
-
- /* clean up any zombies immediately */
- sigchld(0);
-_AT_@ -1509,7 +1516,27 @@
- XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
- if(!dc.font.set)
- XSetFont(dpy, dc.gc, dc.font.xfont->fid);
-+ /* init tags */
-+ for(m = mons; m; m = m->next)
-+ m->curtag = m->prevtag = 1;
-+ /* init mfacts */
-+ for(m = mons; m; m = m->next) {
-+ for(i=0; i < LENGTH(tags) + 1 ; i++) {
-+ m->mfacts[i] = m->mfact;
-+ }
-+ }
-+ /* init layouts */
-+ for(m = mons; m; m = m->next) {
-+ for(i=0; i < LENGTH(tags) + 1; i++) {
-+ m->lts[i] = &layouts[0];
-+ }
-+ }
- /* init bars */
-+ for(m = mons; m; m = m->next) {
-+ for(i=0; i < LENGTH(tags) + 1; i++) {
-+ m->showbars[i] = m->showbar;
-+ }
-+ }
- updatebars();
- updatestatus();
- /* EWMH support per view */
-_AT_@ -1620,7 +1647,7 @@
-
- void
- togglebar(const Arg *arg) {
-- selmon->showbar = !selmon->showbar;
-+ selmon->showbar = selmon->showbars[selmon->curtag] = !selmon->showbar;
- updatebarpos(selmon);
- XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
- arrange(selmon);
-_AT_@ -1640,12 +1667,27 @@
- void
- toggletag(const Arg *arg) {
- unsigned int newtags;
-+ unsigned int i;
-
- if(!selmon->sel)
- return;
- newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
- if(newtags) {
- selmon->sel->tags = newtags;
-+ if(newtags == ~0) {
-+ selmon->prevtag = selmon->curtag;
-+ selmon->curtag = 0;
-+ }
-+ if(!(newtags & 1 << (selmon->curtag - 1))) {
-+ selmon->prevtag = selmon->curtag;
-+ for (i=0; !(newtags & 1 << i); i++);
-+ selmon->curtag = i + 1;
-+ }
-+ selmon->sel->tags = newtags;
-+ selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag];
-+ selmon->mfact = selmon->mfacts[selmon->curtag];
-+ if (selmon->showbar != selmon->showbars[selmon->curtag])
-+ togglebar(NULL);
- arrange(selmon);
- }
- }
-_AT_@ -1912,11 +1954,29 @@
-
- void
- view(const Arg *arg) {
-+ unsigned int i;
-+
- if((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
- return;
- selmon->seltags ^= 1; /* toggle sel tagset */
-- if(arg->ui & TAGMASK)
-+ if(arg->ui & TAGMASK) {
- selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
-+ selmon->prevtag = selmon->curtag;
-+ if(arg->ui == ~0)
-+ selmon->curtag = 0;
-+ else {
-+ for (i=0; !(arg->ui & 1 << i); i++);
-+ selmon->curtag = i + 1;
-+ }
-+ } else {
-+ selmon->prevtag= selmon->curtag ^ selmon->prevtag;
-+ selmon->curtag^= selmon->prevtag;
-+ selmon->prevtag= selmon->curtag ^ selmon->prevtag;
-+ }
-+ selmon->lt[selmon->sellt]= selmon->lts[selmon->curtag];
-+ selmon->mfact = selmon->mfacts[selmon->curtag];
-+ if(selmon->showbar != selmon->showbars[selmon->curtag])
-+ togglebar(NULL);
- arrange(selmon);
- }
-
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/dwm-5.7.2-statuscolors.diff
--- a/dwm.suckless.org/patches/dwm-5.7.2-statuscolors.diff Mon Sep 12 10:45:45 2011 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
_AT_@ -1,234 +0,0 @@
-diff -r 2bcd25cce4ab config.def.h
---- a/config.def.h Sun Sep 27 20:20:14 2009 +0100
-+++ b/config.def.h Mon Oct 05 22:01:49 2009 -0300
-_AT_@ -1,13 +1,16 @@
- /* See LICENSE file for copyright and license details. */
-
- /* appearance */
-+#define NUMCOLORS 4 // need at least 3
-+static const char colors[NUMCOLORS][ColLast][8] = {
-+ // border foreground background
-+ { "#cccccc", "#000000", "#cccccc" }, // 0 = normal
-+ { "#0066ff", "#ffffff", "#0066ff" }, // 1 = selected
-+ { "#0066ff", "#0066ff", "#ffffff" }, // 2 = urgent/warning
-+ { "#ff0000", "#ffffff", "#ff0000" }, // 3 = error
-+ // add more here
-+};
- static const char font[] = "-*-*-medium-*-*-*-14-*-*-*-*-*-*-*";
--static const char normbordercolor[] = "#cccccc";
--static const char normbgcolor[] = "#cccccc";
--static const char normfgcolor[] = "#000000";
--static const char selbordercolor[] = "#0066ff";
--static const char selbgcolor[] = "#0066ff";
--static const char selfgcolor[] = "#ffffff";
- static const unsigned int borderpx = 1; /* border pixel of windows */
- static const unsigned int snap = 32; /* snap pixel */
- static const Bool showbar = True; /* False means no bar */
-_AT_@ -45,7 +48,7 @@
- #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
-
- /* commands */
--static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
-+static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb", colors[0][ColBG], "-nf", colors[0][ColFG], "-sb", colors[1][ColBG], "-sf", colors[1][ColFG], NULL };
- static const char *termcmd[] = { "uxterm", NULL };
-
- static Key keys[] = {
-diff -r 2bcd25cce4ab dwm.c
---- a/dwm.c Sun Sep 27 20:20:14 2009 +0100
-+++ b/dwm.c Mon Oct 05 22:01:49 2009 -0300
-_AT_@ -48,6 +48,7 @@
- #define LENGTH(X) (sizeof X / sizeof X[0])
- #define MAX(A, B) ((A) > (B) ? (A) : (B))
- #define MIN(A, B) ((A) < (B) ? (A) : (B))
-+#define MAXCOLORS 8
- #define MOUSEMASK (BUTTONMASK|PointerMotionMask)
- #define WIDTH(X) ((X)->w + 2 * (X)->bw)
- #define HEIGHT(X) ((X)->h + 2 * (X)->bw)
-_AT_@ -95,8 +96,7 @@
-
- typedef struct {
- int x, y, w, h;
-- unsigned long norm[ColLast];
-- unsigned long sel[ColLast];
-+ unsigned long colors[MAXCOLORS][ColLast];
- Drawable drawable;
- GC gc;
- struct {
-_AT_@ -172,8 +172,9 @@
- static Monitor *dirtomon(int dir);
- static void drawbar(Monitor *m);
- static void drawbars(void);
--static void drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]);
--static void drawtext(const char *text, unsigned long col[ColLast], Bool invert);
-+static void drawcoloredtext(char *text);
-+static void drawsquare(Bool filled, Bool empty, unsigned long col[ColLast]);
-+static void drawtext(const char *text, unsigned long col[ColLast], Bool pad);
- static void enternotify(XEvent *e);
- static void expose(XEvent *e);
- static void focus(Client *c);
-_AT_@ -691,14 +692,13 @@
- dc.x = 0;
- for(i = 0; i < LENGTH(tags); i++) {
- dc.w = TEXTW(tags[i]);
-- col = m->tagset[m->seltags] & 1 << i ? dc.sel : dc.norm;
-- drawtext(tags[i], col, urg & 1 << i);
-- drawsquare(m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
-- occ & 1 << i, urg & 1 << i, col);
-+ col = dc.colors[ (m->tagset[m->seltags] & 1 << i ? 1:(urg & 1 << i ? 2:0))];
-+ drawtext(tags[i], col, True);
-+ drawsquare(m == selmon && selmon->sel && selmon->sel->tags & 1 << i, occ & 1 << i, col);
- dc.x += dc.w;
- }
- dc.w = blw = TEXTW(m->ltsymbol);
-- drawtext(m->ltsymbol, dc.norm, False);
-+ drawtext(m->ltsymbol, dc.colors[0], True);
- dc.x += dc.w;
- x = dc.x;
- if(m == selmon) { /* status is only drawn on selected monitor */
-_AT_@ -708,19 +708,19 @@
- dc.x = x;
- dc.w = m->ww - x;
- }
-- drawtext(stext, dc.norm, False);
-+ drawcoloredtext(stext);
- }
- else
- dc.x = m->ww;
- if((dc.w = dc.x - x) > bh) {
- dc.x = x;
- if(m->sel) {
-- col = m == selmon ? dc.sel : dc.norm;
-- drawtext(m->sel->name, col, False);
-- drawsquare(m->sel->isfixed, m->sel->isfloating, False, col);
-+ col = m == selmon ? dc.colors[1] : dc.colors[0];
-+ drawtext(m->sel->name, col, True);
-+ drawsquare(m->sel->isfixed, m->sel->isfloating, col);
- }
- else
-- drawtext(NULL, dc.norm, False);
-+ drawtext(NULL, dc.colors[0], False);
- }
- XCopyArea(dpy, dc.drawable, m->barwin, dc.gc, 0, 0, m->ww, bh, 0, 0);
- XSync(dpy, False);
-_AT_@ -735,12 +735,42 @@
- }
-
- void
--drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]) {
-+drawcoloredtext(char *text) {
-+ Bool first=True;
-+ char *buf = text, *ptr = buf, c = 1;
-+ unsigned long *col = dc.colors[0];
-+ int i, ox = dc.x;
-+
-+ while( *ptr ) {
-+ for( i = 0; *ptr < 0 || *ptr > NUMCOLORS; i++, ptr++);
-+ if( !*ptr ) break;
-+ c=*ptr;
-+ *ptr=0;
-+ if( i ) {
-+ dc.w = selmon->ww - dc.x;
-+ drawtext(buf, col, first);
-+ dc.x += textnw(buf, i) + textnw(&c,1);
-+ if( first ) dc.x += ( dc.font.ascent + dc.font.descent ) / 2;
-+ first = False;
-+ } else if( first ) {
-+ ox = dc.x += textnw(&c,1);
-+ }
-+ *ptr = c;
-+ col = dc.colors[ c-1 ];
-+ buf = ++ptr;
-+ }
-+ if( !first ) dc.x-=(dc.font.ascent+dc.font.descent)/2;
-+ drawtext(buf, col, True);
-+ dc.x = ox;
-+}
-+
-+void
-+drawsquare(Bool filled, Bool empty, unsigned long col[ColLast]) {
- int x;
- XGCValues gcv;
- XRectangle r = { dc.x, dc.y, dc.w, dc.h };
-
-- gcv.foreground = col[invert ? ColBG : ColFG];
-+ gcv.foreground = col[ ColFG ];
- XChangeGC(dpy, dc.gc, GCForeground, &gcv);
- x = (dc.font.ascent + dc.font.descent + 2) / 4;
- r.x = dc.x + 1;
-_AT_@ -756,18 +786,18 @@
- }
-
- void
--drawtext(const char *text, unsigned long col[ColLast], Bool invert) {
-+drawtext(const char *text, unsigned long col[ColLast], Bool pad) {
- char buf[256];
- int i, x, y, h, len, olen;
- XRectangle r = { dc.x, dc.y, dc.w, dc.h };
-
-- XSetForeground(dpy, dc.gc, col[invert ? ColFG : ColBG]);
-+ XSetForeground(dpy, dc.gc, col[ ColBG ]);
- XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
- if(!text)
- return;
- olen = strlen(text);
-- h = dc.font.ascent + dc.font.descent;
-- y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
-+ h = pad ? (dc.font.ascent + dc.font.descent) : 0;
-+ y = dc.y + ((dc.h + dc.font.ascent - dc.font.descent) / 2);
- x = dc.x + (h / 2);
- /* shorten text if necessary */
- for(len = MIN(olen, sizeof buf); len && textnw(text, len) > dc.w - h; len--);
-_AT_@ -776,7 +806,7 @@
- memcpy(buf, text, len);
- if(len < olen)
- for(i = len; i && i > len - 3; buf[--i] = '.');
-- XSetForeground(dpy, dc.gc, col[invert ? ColBG : ColFG]);
-+ XSetForeground(dpy, dc.gc, col[ ColFG ]);
- if(dc.font.set)
- XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
- else
-_AT_@ -824,7 +854,7 @@
- detachstack(c);
- attachstack(c);
- grabbuttons(c, True);
-- XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]);
-+ XSetWindowBorder(dpy, c->win, dc.colors[1][ColBorder]);
- XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
- }
- else
-_AT_@ -1132,7 +1162,7 @@
- }
- wc.border_width = c->bw;
- XConfigureWindow(dpy, w, CWBorderWidth, &wc);
-- XSetWindowBorder(dpy, w, dc.norm[ColBorder]);
-+ XSetWindowBorder(dpy, w, dc.colors[0][ColBorder]);
- configure(c); /* propagates border_width, if size doesn't change */
- updatesizehints(c);
- XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask);
-_AT_@ -1498,12 +1528,11 @@
- cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing);
- cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur);
- /* init appearance */
-- dc.norm[ColBorder] = getcolor(normbordercolor);
-- dc.norm[ColBG] = getcolor(normbgcolor);
-- dc.norm[ColFG] = getcolor(normfgcolor);
-- dc.sel[ColBorder] = getcolor(selbordercolor);
-- dc.sel[ColBG] = getcolor(selbgcolor);
-- dc.sel[ColFG] = getcolor(selfgcolor);
-+ for(int i=0; i<NUMCOLORS; i++) {
-+ dc.colors[i][ColBorder] = getcolor( colors[i][ColBorder] );
-+ dc.colors[i][ColFG] = getcolor( colors[i][ColFG] );
-+ dc.colors[i][ColBG] = getcolor( colors[i][ColBG] );
-+ }
- dc.drawable = XCreatePixmap(dpy, root, DisplayWidth(dpy, screen), bh, DefaultDepth(dpy, screen));
- dc.gc = XCreateGC(dpy, root, 0, NULL);
- XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
-_AT_@ -1665,7 +1694,7 @@
- if(!c)
- return;
- grabbuttons(c, False);
-- XSetWindowBorder(dpy, c->win, dc.norm[ColBorder]);
-+ XSetWindowBorder(dpy, c->win, dc.colors[0][ColBorder]);
- XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
- }
-
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/dwm-5.8.2-statuscolors.diff
--- a/dwm.suckless.org/patches/dwm-5.8.2-statuscolors.diff Mon Sep 12 10:45:45 2011 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
_AT_@ -1,232 +0,0 @@
---- a/config.def.h 2010-10-16 15:49:03.000000000 +0200
-+++ b/config.def.h 2010-10-16 15:51:35.000000000 +0200
-_AT_@ -1,13 +1,16 @@
- /* See LICENSE file for copyright and license details. */
-
- /* appearance */
-+#define NUMCOLORS 4 // need at least 3
-+static const char colors[NUMCOLORS][ColLast][8] = {
-+ // border foreground background
-+ { "#cccccc", "#000000", "#cccccc" }, // 0 = normal
-+ { "#0066ff", "#ffffff", "#0066ff" }, // 1 = selected
-+ { "#0066ff", "#0066ff", "#ffffff" }, // 2 = urgent/warning
-+ { "#ff0000", "#ffffff", "#ff0000" }, // 3 = error
-+ // add more here
-+};
- static const char font[] = "-*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*";
--static const char normbordercolor[] = "#cccccc";
--static const char normbgcolor[] = "#cccccc";
--static const char normfgcolor[] = "#000000";
--static const char selbordercolor[] = "#0066ff";
--static const char selbgcolor[] = "#0066ff";
--static const char selfgcolor[] = "#ffffff";
- static const unsigned int borderpx = 1; /* border pixel of windows */
- static const unsigned int snap = 32; /* snap pixel */
- static const Bool showbar = True; /* False means no bar */
-_AT_@ -45,7 +48,7 @@
- #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
-
- /* commands */
--static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
-+static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb", colors[0][ColBG], "-nf", colors[0][ColFG],"-sb", colors[1][ColBG], "-sf", colors[1][ColFG], NULL };
- static const char *termcmd[] = { "uxterm", NULL };
-
- static Key keys[] = {
---- a//dwm.c 2010-06-04 12:39:15.000000000 +0200
-+++ b/dwm.c 2010-11-03 20:36:50.000000000 +0100
-_AT_@ -48,6 +48,7 @@
- #define LENGTH(X) (sizeof X / sizeof X[0])
- #define MAX(A, B) ((A) > (B) ? (A) : (B))
- #define MIN(A, B) ((A) < (B) ? (A) : (B))
-+#define MAXCOLORS 8
- #define MOUSEMASK (BUTTONMASK|PointerMotionMask)
- #define WIDTH(X) ((X)->w + 2 * (X)->bw)
- #define HEIGHT(X) ((X)->h + 2 * (X)->bw)
-_AT_@ -97,8 +98,7 @@
-
- typedef struct {
- int x, y, w, h;
-- unsigned long norm[ColLast];
-- unsigned long sel[ColLast];
-+ unsigned long colors[MAXCOLORS][ColLast];
- Drawable drawable;
- GC gc;
- struct {
-_AT_@ -175,8 +175,9 @@
- static Monitor *dirtomon(int dir);
- static void drawbar(Monitor *m);
- static void drawbars(void);
--static void drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]);
--static void drawtext(const char *text, unsigned long col[ColLast], Bool invert);
-+static void drawcoloredtext(char *text);
-+static void drawsquare(Bool filled, Bool empty, unsigned long col[ColLast]);
-+static void drawtext(const char *text, unsigned long col[ColLast], Bool pad);
- static void enternotify(XEvent *e);
- static void expose(XEvent *e);
- static void focus(Client *c);
-_AT_@ -696,14 +697,13 @@
- dc.x = 0;
- for(i = 0; i < LENGTH(tags); i++) {
- dc.w = TEXTW(tags[i]);
-- col = m->tagset[m->seltags] & 1 << i ? dc.sel : dc.norm;
-- drawtext(tags[i], col, urg & 1 << i);
-- drawsquare(m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
-- occ & 1 << i, urg & 1 << i, col);
-+ col = dc.colors[ (m->tagset[m->seltags] & 1 << i ? 1:(urg & 1 << i ? 2:0))];
-+ drawtext(tags[i], col, True);
-+ drawsquare(m == selmon && selmon->sel && selmon->sel->tags & 1 << i, occ & 1 << i, col);
- dc.x += dc.w;
- }
- dc.w = blw = TEXTW(m->ltsymbol);
-- drawtext(m->ltsymbol, dc.norm, False);
-+ drawtext(m->ltsymbol, dc.colors[0], True);
- dc.x += dc.w;
- x = dc.x;
- if(m == selmon) { /* status is only drawn on selected monitor */
-_AT_@ -713,19 +713,19 @@
- dc.x = x;
- dc.w = m->ww - x;
- }
-- drawtext(stext, dc.norm, False);
-+ drawcoloredtext(stext);
- }
- else
- dc.x = m->ww;
- if((dc.w = dc.x - x) > bh) {
- dc.x = x;
- if(m->sel) {
-- col = m == selmon ? dc.sel : dc.norm;
-- drawtext(m->sel->name, col, False);
-- drawsquare(m->sel->isfixed, m->sel->isfloating, False, col);
-+ col = m == selmon ? dc.colors[1] : dc.colors[0];
-+ drawtext(m->sel->name, col, True);
-+ drawsquare(m->sel->isfixed, m->sel->isfloating, col);
- }
- else
-- drawtext(NULL, dc.norm, False);
-+ drawtext(NULL, dc.colors[0], False);
- }
- XCopyArea(dpy, dc.drawable, m->barwin, dc.gc, 0, 0, m->ww, bh, 0, 0);
- XSync(dpy, False);
-_AT_@ -740,12 +740,42 @@
- }
-
- void
--drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]) {
-+drawcoloredtext(char *text) {
-+ Bool first=True;
-+ char *buf = text, *ptr = buf, c = 1;
-+ unsigned long *col = dc.colors[0];
-+ int i, ox = dc.x;
-+
-+ while( *ptr ) {
-+ for( i = 0; *ptr < 0 || *ptr > NUMCOLORS; i++, ptr++);
-+ if( !*ptr ) break;
-+ c=*ptr;
-+ *ptr=0;
-+ if( i ) {
-+ dc.w = selmon->ww - dc.x;
-+ drawtext(buf, col, first);
-+ dc.x += textnw(buf, i) + textnw(&c,1);
-+ if( first ) dc.x += ( dc.font.ascent + dc.font.descent ) / 2;
-+ first = False;
-+ } else if( first ) {
-+ ox = dc.x += textnw(&c,1);
-+ }
-+ *ptr = c;
-+ col = dc.colors[ c-1 ];
-+ buf = ++ptr;
-+ }
-+ if( !first ) dc.x-=(dc.font.ascent+dc.font.descent)/2;
-+ drawtext(buf, col, True);
-+ dc.x = ox;
-+}
-+
-+void
-+drawsquare(Bool filled, Bool empty, unsigned long col[ColLast]) {
- int x;
- XGCValues gcv;
- XRectangle r = { dc.x, dc.y, dc.w, dc.h };
-
-- gcv.foreground = col[invert ? ColBG : ColFG];
-+ gcv.foreground = col[ ColFG ];
- XChangeGC(dpy, dc.gc, GCForeground, &gcv);
- x = (dc.font.ascent + dc.font.descent + 2) / 4;
- r.x = dc.x + 1;
-_AT_@ -761,18 +791,18 @@
- }
-
- void
--drawtext(const char *text, unsigned long col[ColLast], Bool invert) {
-+drawtext(const char *text, unsigned long col[ColLast], Bool pad) {
- char buf[256];
- int i, x, y, h, len, olen;
- XRectangle r = { dc.x, dc.y, dc.w, dc.h };
-
-- XSetForeground(dpy, dc.gc, col[invert ? ColFG : ColBG]);
-+ XSetForeground(dpy, dc.gc, col[ ColBG ]);
- XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
- if(!text)
- return;
- olen = strlen(text);
-- h = dc.font.ascent + dc.font.descent;
-- y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
-+ h = pad ? (dc.font.ascent + dc.font.descent) : 0;
-+ y = dc.y + ((dc.h + dc.font.ascent - dc.font.descent) / 2);
- x = dc.x + (h / 2);
- /* shorten text if necessary */
- for(len = MIN(olen, sizeof buf); len && textnw(text, len) > dc.w - h; len--);
-_AT_@ -781,7 +811,7 @@
- memcpy(buf, text, len);
- if(len < olen)
- for(i = len; i && i > len - 3; buf[--i] = '.');
-- XSetForeground(dpy, dc.gc, col[invert ? ColBG : ColFG]);
-+ XSetForeground(dpy, dc.gc, col[ ColFG ]);
- if(dc.font.set)
- XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
- else
-_AT_@ -830,7 +860,7 @@
- detachstack(c);
- attachstack(c);
- grabbuttons(c, True);
-- XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]);
-+ XSetWindowBorder(dpy, c->win, dc.colors[1][ColBorder]);
- XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
- }
- else
-_AT_@ -1139,7 +1169,7 @@
- }
- wc.border_width = c->bw;
- XConfigureWindow(dpy, w, CWBorderWidth, &wc);
-- XSetWindowBorder(dpy, w, dc.norm[ColBorder]);
-+ XSetWindowBorder(dpy, w, dc.colors[0][ColBorder]);
- configure(c); /* propagates border_width, if size doesn't change */
- updatesizehints(c);
- XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask);
-_AT_@ -1544,12 +1574,11 @@
- cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing);
- cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur);
- /* init appearance */
-- dc.norm[ColBorder] = getcolor(normbordercolor);
-- dc.norm[ColBG] = getcolor(normbgcolor);
-- dc.norm[ColFG] = getcolor(normfgcolor);
-- dc.sel[ColBorder] = getcolor(selbordercolor);
-- dc.sel[ColBG] = getcolor(selbgcolor);
-- dc.sel[ColFG] = getcolor(selfgcolor);
-+ for(int i=0; i<NUMCOLORS; i++) {
-+ dc.colors[i][ColBorder] = getcolor( colors[i][ColBorder] );
-+ dc.colors[i][ColFG] = getcolor( colors[i][ColFG] );
-+ dc.colors[i][ColBG] = getcolor( colors[i][ColBG] );
-+ }
- dc.drawable = XCreatePixmap(dpy, root, DisplayWidth(dpy, screen), bh, DefaultDepth(dpy, screen));
- dc.gc = XCreateGC(dpy, root, 0, NULL);
- XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
-_AT_@ -1711,7 +1740,7 @@
- if(!c)
- return;
- grabbuttons(c, False);
-- XSetWindowBorder(dpy, c->win, dc.norm[ColBorder]);
-+ XSetWindowBorder(dpy, c->win, dc.colors[0][ColBorder]);
- if(setfocus)
- XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
- }
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/dwm-gap-5.7.2.diff
--- a/dwm.suckless.org/patches/dwm-gap-5.7.2.diff Mon Sep 12 10:45:45 2011 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
_AT_@ -1,23 +0,0 @@
---- a/dwm.c 2009-09-17 10:48:57.000000000 +0200
-+++ b/dwm.c 2009-09-16 18:54:37.000000000 +0200
-_AT_@ -1270,10 +1270,10 @@
- XWindowChanges wc;
-
- if(applysizehints(c, &x, &y, &w, &h, interact)) {
-- c->x = wc.x = x;
-- c->y = wc.y = y;
-- c->w = wc.width = w;
-- c->h = wc.height = h;
-+ c->x = wc.x = x + gappx;
-+ c->y = wc.y = y + gappx;
-+ c->w = wc.width = w - 2 * gappx ;
-+ c->h = wc.height = h - 2 * gappx ;
- wc.border_width = c->bw;
- XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
- configure(c);
-
-diff -r 72e52c5333ef config.def.h
---- a/config.def.h Wed Nov 25 13:56:17 2009 +0000
-+++ b/config.def.h Tue Dec 15 18:39:44 2009 +0100
-_AT_@ -7,14 +7,15 @@
-+static const unsigned int gappx = 4; /* gap pixel between windows */
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/dwm-pertag-5.6.1.diff
--- a/dwm.suckless.org/patches/dwm-pertag-5.6.1.diff Mon Sep 12 10:45:45 2011 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
_AT_@ -1,184 +0,0 @@
---- dwm.c 2009-09-18 18:12:50.000000000 +0200
-+++ dwm.c.working 2009-09-18 18:14:04.000000000 +0200
-_AT_@ -131,6 +131,25 @@
- void (*arrange) (Monitor *);
- } Layout;
-
-+struct Monitor {
-+ float mfact;
-+ int num;
-+ int by; /* bar geometry */
-+ int mx, my, mw, mh; /* screen size */
-+ int wx, wy, ww, wh; /* window area */
-+ unsigned int seltags;
-+ unsigned int sellt;
-+ unsigned int tagset[2];
-+ Bool showbar;
-+ Bool topbar;
-+ Client *clients;
-+ Client *sel;
-+ Client *stack;
-+ Monitor *next;
-+ Window barwin;
-+ const Layout *lt[2];
-+};
-+
- typedef struct {
- const char *class;
- const char *instance;
-_AT_@ -263,30 +282,6 @@
- /* configuration, allows nested code to access above variables */
- #include "config.h"
-
--struct Monitor {
-- float mfact;
-- int num;
-- int by; /* bar geometry */
-- int mx, my, mw, mh; /* screen size */
-- int wx, wy, ww, wh; /* window area */
-- unsigned int seltags;
-- unsigned int sellt;
-- unsigned int tagset[2];
-- Bool showbar;
-- Bool topbar;
-- Client *clients;
-- Client *sel;
-- Client *stack;
-- Monitor *next;
-- Window barwin;
-- const Layout *lt[2];
-- int curtag;
-- int prevtag;
-- const Layout *lts[LENGTH(tags) + 1];
-- double mfacts[LENGTH(tags) + 1];
-- Bool showbars[LENGTH(tags) + 1];
--};
--
- /* compile-time check if all tags fit into an unsigned int bit array. */
- struct NumTags {
- char limitexceeded[LENGTH(tags) > 31 ? -1 : 1];
-_AT_@ -1484,7 +1479,7 @@
- if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
- selmon->sellt ^= 1;
- if (arg && arg->v)
-- selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag] = (Layout *) arg->v;
-+ selmon->lt[selmon->sellt] = (Layout *) arg->v;
- if (selmon->sel)
- arrange();
- else
-_AT_@ -1502,7 +1497,7 @@
- f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
- if (f < 0.1 || f > 0.9)
- return;
-- selmon->mfact = selmon->mfacts[selmon->curtag] = f;
-+ selmon->mfact = f;
- arrange();
- }
-
-_AT_@ -1512,7 +1507,6 @@
- unsigned int i;
- int w;
- XSetWindowAttributes wa;
-- Monitor *m;
-
- /* clean up any zombies immediately */
- sigchld(0);
-_AT_@ -1547,31 +1541,11 @@
- XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
- if (!dc.font.set)
- XSetFont(dpy, dc.gc, dc.font.xfont->fid);
-- /* init tags */
-- for (m = mons; m; m = m->next)
-- m->curtag = m->prevtag = 1;
-- /* init mfacts */
-- for (m = mons; m; m = m->next) {
-- for (i = 0; i < LENGTH(tags) + 1; i++) {
-- m->mfacts[i] = m->mfact;
-- }
-- }
-- /* init layouts */
-- for (m = mons; m; m = m->next) {
-- for (i = 0; i < LENGTH(tags) + 1; i++) {
-- m->lts[i] = &layouts[0];
-- }
-- }
- /* init bars */
- for (blw = i = 0; LENGTH(layouts) > 1 && i < LENGTH(layouts); i++) {
- w = TEXTW(layouts[i].symbol);
- blw = MAX(blw, w);
- }
-- for (m = mons; m; m = m->next) {
-- for (i = 0; i < LENGTH(tags) + 1; i++) {
-- m->showbars[i] = m->showbar;
-- }
-- }
- updatebars();
- updatestatus();
- /* EWMH support per view */
-_AT_@ -1689,7 +1663,7 @@
- void
- togglebar(const Arg * arg)
- {
-- selmon->showbar = selmon->showbars[selmon->curtag] = !selmon->showbar;
-+ selmon->showbar = !selmon->showbar;
- updatebarpos(selmon);
- XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
- arrange();
-_AT_@ -1710,27 +1684,13 @@
- void
- toggletag(const Arg * arg)
- {
-- unsigned int i;
- unsigned int newtags;
-
- if (!selmon->sel)
- return;
- newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
- if (newtags) {
-- if (newtags == ~0) {
-- selmon->prevtag = selmon->curtag;
-- selmon->curtag = 0;
-- }
-- if (!(newtags & 1 << (selmon->curtag - 1))) {
-- selmon->prevtag = selmon->curtag;
-- for (i = 0; !(newtags & 1 << i); i++);
-- selmon->curtag = i + 1;
-- }
- selmon->sel->tags = newtags;
-- selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag];
-- selmon->mfact = selmon->mfacts[selmon->curtag];
-- if (selmon->showbar != selmon->showbars[selmon->curtag])
-- togglebar(NULL);
- arrange();
- }
- }
-_AT_@ -1993,28 +1953,11 @@
- void
- view(const Arg * arg)
- {
-- unsigned int i;
- if ((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
- return;
- selmon->seltags ^= 1; /* toggle sel tagset */
-- if (arg->ui & TAGMASK) {
-+ if (arg->ui & TAGMASK)
- selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
-- selmon->prevtag = selmon->curtag;
-- if (arg->ui == ~0)
-- selmon->curtag = 0;
-- else {
-- for (i = 0; !(arg->ui & 1 << i); i++);
-- selmon->curtag = i + 1;
-- }
-- } else {
-- selmon->prevtag = selmon->curtag ^ selmon->prevtag;
-- selmon->curtag ^= selmon->prevtag;
-- selmon->prevtag = selmon->curtag ^ selmon->prevtag;
-- }
-- selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag];
-- selmon->mfact = selmon->mfacts[selmon->curtag];
-- if (selmon->showbar != selmon->showbars[selmon->curtag])
-- togglebar(NULL);
- arrange();
- }
-
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/dwm-uselessgap-5.8.diff
--- a/dwm.suckless.org/patches/dwm-uselessgap-5.8.diff Mon Sep 12 10:45:45 2011 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
_AT_@ -1,49 +0,0 @@
-diff -r 72e52c5333ef config.def.h
---- a/config.def.h Wed Nov 25 13:56:17 2009 +0000
-+++ b/config.def.h Thu Mar 11 16:32:24 2010 +0100
-_AT_@ -9,6 +9,7 @@
- static const char selbgcolor[] = "#0066ff";
- static const char selfgcolor[] = "#ffffff";
- static const unsigned int borderpx = 1; /* border pixel of windows */
-+static const unsigned int gappx = 6; /* gap pixel between windows */
- static const unsigned int snap = 32; /* snap pixel */
- static const Bool showbar = True; /* False means no bar */
- static const Bool topbar = True; /* False means bottom bar */
-diff -r 72e52c5333ef dwm.c
---- a/dwm.c Wed Nov 25 13:56:17 2009 +0000
-+++ b/dwm.c Thu Mar 11 16:32:24 2010 +0100
-_AT_@ -269,6 +269,7 @@
- static DC dc;
- static Monitor *mons = NULL, *selmon = NULL;
- static Window root;
-+static int globalborder ;
-
- /* configuration, allows nested code to access above variables */
- #include "config.h"
-_AT_@ -1299,16 +1300,21 @@
- resize(Client *c, int x, int y, int w, int h, Bool interact) {
- XWindowChanges wc;
-
-+ if(c->isfloating || selmon->lt[selmon->sellt]->arrange == NULL) { globalborder = 0 ; }
-+ else {
-+ if (selmon->lt[selmon->sellt]->arrange == monocle) { globalborder = 0 - borderpx ; }
-+ else { globalborder = gappx ; }
-+ }
- if(applysizehints(c, &x, &y, &w, &h, interact)) {
-- c->x = wc.x = x;
-- c->y = wc.y = y;
-- c->w = wc.width = w;
-- c->h = wc.height = h;
-+ c->x = wc.x = x + globalborder;
-+ c->y = wc.y = y + globalborder;
-+ c->w = wc.width = w - 2 * globalborder ;
-+ c->h = wc.height = h - 2 * globalborder ;
- wc.border_width = c->bw;
- XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
- configure(c);
- XSync(dpy, False);
-- }
-+ }
- }
-
- void
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/fancybar-5.6.1.diff
--- a/dwm.suckless.org/patches/fancybar-5.6.1.diff Mon Sep 12 10:45:45 2011 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
_AT_@ -1,121 +0,0 @@
-diff -r e47a47bd3ed4 dwm.c
---- a/dwm.c Tue Jul 21 10:57:54 2009 +0100
-+++ b/dwm.c Mon Aug 24 18:28:57 2009 +0200
-_AT_@ -169,6 +169,7 @@
- static Monitor *dirtomon(int dir);
- static void drawbar(Monitor *m);
- static void drawbars(void);
-+static void drawvline(unsigned long col[ColLast]);
- static void drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]);
- static void drawtext(const char *text, unsigned long col[ColLast], Bool invert);
- static void enternotify(XEvent *e);
-_AT_@ -648,10 +649,11 @@
-
- void
- drawbar(Monitor *m) {
-- int x;
-+ int x, ow, mw = 0, extra, tw;
- unsigned int i, n = 0, occ = 0, urg = 0;
- unsigned long *col;
-- Client *c;
-+ Client *c, *firstvis, *lastvis = NULL;
-+ DC seldc;
-
- for(c = m->clients; c; c = c->next) {
- if(ISVISIBLE(c))
-_AT_@ -689,16 +691,62 @@
- }
- else
- dc.x = m->ww;
-- if((dc.w = dc.x - x) > bh) {
-- dc.x = x;
-- if(m->sel) {
-- col = m == selmon ? dc.sel : dc.norm;
-- drawtext(m->sel->name, col, False);
-- drawsquare(m->sel->isfixed, m->sel->isfloating, False, col);
-+
-+ for(c = m->clients; c && !ISVISIBLE(c); c = c->next);
-+ firstvis = c;
-+
-+ col = m == selmon ? dc.sel : dc.norm;
-+ dc.w = dc.x - x;
-+ dc.x = x;
-+
-+ if(n > 0) {
-+ mw = dc.w / n;
-+ extra = 0;
-+ seldc = dc;
-+ i = 0;
-+
-+ while(c) {
-+ lastvis = c;
-+ tw = TEXTW(c->name);
-+ if(tw < mw) extra += (mw - tw); else i++;
-+ for(c = c->next; c && !ISVISIBLE(c); c = c->next);
- }
-- else
-+
-+ if(i > 0) mw += extra / i;
-+
-+ c = firstvis;
-+ x = dc.x;
-+ }
-+
-+ while(dc.w > bh) {
-+ if(c) {
-+ ow = dc.w;
-+ tw = TEXTW(c->name);
-+ dc.w = MIN(ow, tw);
-+
-+ if(dc.w > mw) dc.w = mw;
-+ if(m->sel == c) seldc = dc;
-+ if(c == lastvis) dc.w = ow;
-+
-+ drawtext(c->name, col, False);
-+ if(c != firstvis) drawvline(col);
-+ drawsquare(c->isfixed, c->isfloating, False, col);
-+
-+ dc.x += dc.w;
-+ dc.w = ow - dc.w;
-+ for(c = c->next; c && !ISVISIBLE(c); c = c->next);
-+ } else {
- drawtext(NULL, dc.norm, False);
-+ break;
-+ }
- }
-+
-+ if(m == selmon && m->sel && ISVISIBLE(m->sel)) {
-+ dc = seldc;
-+ drawtext(m->sel->name, col, True);
-+ drawsquare(m->sel->isfixed, m->sel->isfloating, True, col);
-+ }
-+
- XCopyArea(dpy, dc.drawable, m->barwin, dc.gc, 0, 0, m->ww, bh, 0, 0);
- XSync(dpy, False);
- }
-_AT_@ -709,6 +757,15 @@
-
- for(m = mons; m; m = m->next)
- drawbar(m);
-+}
-+
-+void
-+drawvline(unsigned long col[ColLast]) {
-+ XGCValues gcv;
-+
-+ gcv.foreground = col[ColFG];
-+ XChangeGC(dpy, dc.gc, GCForeground, &gcv);
-+ XDrawLine(dpy, dc.drawable, dc.gc, dc.x, dc.y, dc.x, dc.y + (dc.font.ascent + dc.font.descent + 2));
- }
-
- void
-_AT_@ -1235,8 +1292,7 @@
- }
- if(ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) {
- updatetitle(c);
-- if(c == selmon->sel)
-- drawbars();
-+ drawbars();
- }
- }
- }
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/fancybar.md
--- a/dwm.suckless.org/patches/fancybar.md Mon Sep 12 10:45:45 2011 +0100
+++ b/dwm.suckless.org/patches/fancybar.md Mon Sep 12 12:35:44 2011 +0200
_AT_@ -12,7 +12,7 @@
## Download
- * [fancybar-5.6.1.diff](fancybar-5.6.1.diff) (dwm 5.6.1) (20090824)
+ * [fancybar-5.6.1.diff](historical/fancybar-5.6.1.diff) (dwm 5.6.1) (20090824)
* [fancybar-r1496.diff](fancybar-r1496.diff) (dwm 5.7) (20090922)
## Author
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/flextile-5.8.1.diff
--- a/dwm.suckless.org/patches/flextile-5.8.1.diff Mon Sep 12 10:45:45 2011 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
_AT_@ -1,418 +0,0 @@
-diff -up ../dwm-5.8.1-0/config.def.h ./config.def.h
---- ../dwm-5.8.1-0/config.def.h 2010-05-29 13:49:12.000000000 +0200
-+++ ./config.def.h 2010-05-31 15:18:43.686311000 +0200
-_AT_@ -25,6 +25,11 @@ static const Rule rules[] = {
- /* layout(s) */
- static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
- static const Bool resizehints = True; /* True means respect size hints in tiled resizals */
-+static const int layoutaxis[] = {
-+ 1, /* layout axis: 1 = x, 2 = y; negative values mirror the layout, setting the master area to the right / bottom instead of left / top */
-+ 2, /* master axis: 1 = x (from left to right), 2 = y (from top to bottom), 3 = z (monocle) */
-+ 2, /* stack axis: 1 = x (from left to right), 2 = y (from top to bottom), 3 = z (monocle) */
-+};
-
- static const Layout layouts[] = {
- /* symbol arrange function */
-_AT_@ -81,6 +86,12 @@ static Key keys[] = {
- TAGKEYS( XK_8, 7)
- TAGKEYS( XK_9, 8)
- { MODKEY|ShiftMask, XK_q, quit, {0} },
-+ { MODKEY|ControlMask, XK_t, rotatelayoutaxis, {.i = 0} }, /* 0 = layout axis */
-+ { MODKEY|ControlMask, XK_Tab, rotatelayoutaxis, {.i = 1} }, /* 1 = master axis */
-+ { MODKEY|ControlMask|ShiftMask, XK_Tab, rotatelayoutaxis, {.i = 2} }, /* 2 = stack axis */
-+ { MODKEY|ControlMask, XK_Return, mirrorlayout, {0} },
-+ { MODKEY|ControlMask, XK_j, shiftmastersplit, {.i = -1} }, /* reduce the number of tiled clients in the master area */
-+ { MODKEY|ControlMask, XK_k, shiftmastersplit, {.i = +1} }, /* increase the number of tiled clients in the master area */
- };
-
- /* button definitions */
-diff -up ../dwm-5.8.1-0/dwm.c ./dwm.c
---- ../dwm-5.8.1-0/dwm.c 2010-05-29 13:49:12.000000000 +0200
-+++ ./dwm.c 2010-05-31 16:02:14.553316000 +0200
-_AT_@ -120,26 +120,6 @@ typedef struct {
- void (*arrange)(Monitor *);
- } Layout;
-
--struct Monitor {
-- char ltsymbol[16];
-- float mfact;
-- int num;
-- int by; /* bar geometry */
-- int mx, my, mw, mh; /* screen size */
-- int wx, wy, ww, wh; /* window area */
-- unsigned int seltags;
-- unsigned int sellt;
-- unsigned int tagset[2];
-- Bool showbar;
-- Bool topbar;
-- Client *clients;
-- Client *sel;
-- Client *stack;
-- Monitor *next;
-- Window barwin;
-- const Layout *lt[2];
--};
--
- typedef struct {
- const char *class;
- const char *instance;
-_AT_@ -193,6 +173,7 @@ static void killclient(const Arg *arg);
- static void manage(Window w, XWindowAttributes *wa);
- static void mappingnotify(XEvent *e);
- static void maprequest(XEvent *e);
-+static void mirrorlayout(const Arg *arg);
- static void monocle(Monitor *m);
- static void movemouse(const Arg *arg);
- static Client *nexttiled(Client *c);
-_AT_@ -202,6 +183,7 @@ static void quit(const Arg *arg);
- static void resize(Client *c, int x, int y, int w, int h, Bool interact);
- static void resizemouse(const Arg *arg);
- static void restack(Monitor *m);
-+static void rotatelayoutaxis(const Arg *arg);
- static void run(void);
- static void scan(void);
- static void sendmon(Client *c, Monitor *m);
-_AT_@ -209,6 +191,7 @@ static void setclientstate(Client *c, lo
- static void setlayout(const Arg *arg);
- static void setmfact(const Arg *arg);
- static void setup(void);
-+static void shiftmastersplit(const Arg *arg);
- static void showhide(Client *c);
- static void sigchld(int unused);
- static void spawn(const Arg *arg);
-_AT_@ -275,6 +258,34 @@ static Window root;
-
- /* compile-time check if all tags fit into an unsigned int bit array. */
- struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
-+struct Monitor {
-+ char ltsymbol[16];
-+ float mfact;
-+ double mfacts[LENGTH(tags) + 1];
-+ int ltaxis[3];
-+ int ltaxes[LENGTH(tags) + 1][3];
-+ int num;
-+ int curtag;
-+ int prevtag;
-+ int by; /* bar geometry */
-+ int mx, my, mw, mh; /* screen size */
-+ int wx, wy, ww, wh; /* window area */
-+ unsigned int msplit;
-+ unsigned int msplits[LENGTH(tags) + 1];
-+ unsigned int seltags;
-+ unsigned int sellt;
-+ unsigned int tagset[2];
-+ Bool showbar;
-+ Bool showbars[LENGTH(tags) + 1];
-+ Bool topbar;
-+ Client *clients;
-+ Client *sel;
-+ Client *stack;
-+ Monitor *next;
-+ Window barwin;
-+ const Layout *lt[2];
-+ const Layout *lts[LENGTH(tags) + 1];
-+};
-
- /* function implementations */
- void
-_AT_@ -616,6 +627,10 @@ createmon(void) {
- m->lt[0] = &layouts[0];
- m->lt[1] = &layouts[1 % LENGTH(layouts)];
- strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol);
-+ m->ltaxis[0] = layoutaxis[0];
-+ m->ltaxis[1] = layoutaxis[1];
-+ m->ltaxis[2] = layoutaxis[2];
-+ m->msplit = 1;
- return m;
- }
-
-_AT_@ -1173,6 +1188,15 @@ maprequest(XEvent *e) {
- }
-
- void
-+mirrorlayout(const Arg *arg) {
-+ if(!selmon->lt[selmon->sellt]->arrange)
-+ return;
-+ selmon->ltaxis[0] *= -1;
-+ selmon->ltaxes[selmon->curtag][0] = selmon->ltaxis[0];
-+ arrange(selmon);
-+}
-+
-+void
- monocle(Monitor *m) {
- unsigned int n = 0;
- Client *c;
-_AT_@ -1387,6 +1411,21 @@ restack(Monitor *m) {
- }
-
- void
-+rotatelayoutaxis(const Arg *arg) {
-+ if(!selmon->lt[selmon->sellt]->arrange)
-+ return;
-+ if(arg->i == 0) {
-+ if(selmon->ltaxis[0] > 0)
-+ selmon->ltaxis[0] = selmon->ltaxis[0] + 1 > 2 ? 1 : selmon->ltaxis[0] + 1;
-+ else
-+ selmon->ltaxis[0] = selmon->ltaxis[0] - 1 < -2 ? -1 : selmon->ltaxis[0] - 1;
-+ } else
-+ selmon->ltaxis[arg->i] = selmon->ltaxis[arg->i] + 1 > 3 ? 1 : selmon->ltaxis[arg->i] + 1;
-+ selmon->ltaxes[selmon->curtag][arg->i] = selmon->ltaxis[arg->i];
-+ arrange(selmon);
-+}
-+
-+void
- run(void) {
- XEvent ev;
- /* main event loop */
-_AT_@ -1451,7 +1490,7 @@ setlayout(const Arg *arg) {
- if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
- selmon->sellt ^= 1;
- if(arg && arg->v)
-- selmon->lt[selmon->sellt] = (Layout *)arg->v;
-+ selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag] = (Layout *)arg->v;
- strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol);
- if(selmon->sel)
- arrange(selmon);
-_AT_@ -1469,14 +1508,16 @@ setmfact(const Arg *arg) {
- f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
- if(f < 0.1 || f > 0.9)
- return;
-- selmon->mfact = f;
-+ selmon->mfact = selmon->mfacts[selmon->curtag] = f;
- arrange(selmon);
- }
-
- void
- setup(void) {
- XSetWindowAttributes wa;
--
-+ Monitor *m;
-+ unsigned int i;
-+
- /* clean up any zombies immediately */
- sigchld(0);
-
-_AT_@ -1511,7 +1552,19 @@ setup(void) {
- XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
- if(!dc.font.set)
- XSetFont(dpy, dc.gc, dc.font.xfont->fid);
-- /* init bars */
-+ /* init tags, bars, layouts, axes, msplits and mfacts */
-+ for(m = mons; m; m = m->next) {
-+ m->curtag = m->prevtag = 1;
-+ for(i=0; i < LENGTH(tags) + 1; i++) {
-+ m->showbars[i] = m->showbar;
-+ m->lts[i] = &layouts[0];
-+ m->mfacts[i] = m->mfact;
-+ m->ltaxes[i][0] = m->ltaxis[0];
-+ m->ltaxes[i][1] = m->ltaxis[1];
-+ m->ltaxes[i][2] = m->ltaxis[2];
-+ m->msplits[i] = m->msplit;
-+ }
-+ }
- updatebars();
- updatestatus();
- /* EWMH support per view */
-_AT_@ -1528,6 +1581,19 @@ setup(void) {
- }
-
- void
-+shiftmastersplit(const Arg *arg) {
-+ unsigned int n;
-+ Client *c;
-+
-+ for(n = 0, c = nexttiled(selmon->clients); c; c = nexttiled(c->next), n++);
-+ if(!arg || !selmon->lt[selmon->sellt]->arrange || selmon->msplit + arg->i < 1 || selmon->msplit + arg->i > n)
-+ return;
-+ selmon->msplit += arg->i;
-+ selmon->msplits[selmon->curtag] = selmon->msplit;
-+ arrange(selmon);
-+}
-+
-+void
- showhide(Client *c) {
- if(!c)
- return;
-_AT_@ -1592,37 +1658,95 @@ textnw(const char *text, unsigned int le
-
- void
- tile(Monitor *m) {
-- int x, y, h, w, mw;
-- unsigned int i, n;
-+ char sym1 = 61, sym2 = 93, sym3 = 61, sym;
-+ int x1 = m->wx, y1 = m->wy, h1 = m->wh, w1 = m->ww, X1 = x1 + w1, Y1 = y1 + h1;
-+ int x2 = m->wx, y2 = m->wy, h2 = m->wh, w2 = m->ww, X2 = x2 + w2, Y2 = y2 + h2;
-+ unsigned int i, n, n1, n2;
- Client *c;
-
- for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
-+ if(m->msplit > n)
-+ m->msplit = (n == 0) ? 1 : n;
-+ if(n == 0 && m->ltaxis[1] != 3)
-+ return;
-+ /* layout symbol */
-+ if(abs(m->ltaxis[0]) == m->ltaxis[1]) /* explicitly: ((abs(m->ltaxis[0]) == 1 && m->ltaxis[1] == 1) || (abs(m->ltaxis[0]) == 2 && m->ltaxis[1] == 2)) */
-+ sym1 = 124;
-+ if(abs(m->ltaxis[0]) == m->ltaxis[2])
-+ sym3 = 124;
-+ if(m->ltaxis[1] == 3)
-+ sym1 = (n == 0) ? 0 : m->msplit;
-+ if(m->ltaxis[2] == 3)
-+ sym3 = (n == 0) ? 0 : n - m->msplit;
-+ if(m->ltaxis[0] < 0) {
-+ sym = sym1;
-+ sym1 = sym3;
-+ sym2 = 91;
-+ sym3 = sym;
-+ }
-+ if(m->msplit == 1) {
-+ if(m->ltaxis[0] > 0)
-+ sym1 = 91;
-+ else
-+ sym3 = 93;
-+ }
-+ if(m->msplit > 1 && m->ltaxis[1] == 3 && m->ltaxis[2] == 3)
-+ snprintf(m->ltsymbol, sizeof m->ltsymbol, "%d%c%d", sym1, sym2, sym3);
-+ else if((m->msplit > 1 && m->ltaxis[1] == 3 && m->ltaxis[0] > 0) || (m->ltaxis[2] == 3 && m->ltaxis[0] < 0))
-+ snprintf(m->ltsymbol, sizeof m->ltsymbol, "%d%c%c", sym1, sym2, sym3);
-+ else if((m->ltaxis[2] == 3 && m->ltaxis[0] > 0) || (m->msplit > 1 && m->ltaxis[1] == 3 && m->ltaxis[0] < 0))
-+ snprintf(m->ltsymbol, sizeof m->ltsymbol, "%c%c%d", sym1, sym2, sym3);
-+ else
-+ snprintf(m->ltsymbol, sizeof m->ltsymbol, "%c%c%c", sym1, sym2, sym3);
- if(n == 0)
- return;
-+ /* master and stack area */
-+ if(abs(m->ltaxis[0]) == 1 && n > m->msplit) {
-+ w1 *= m->mfact;
-+ w2 -= w1;
-+ x1 += (m->ltaxis[0] < 0) ? w2 : 0;
-+ x2 += (m->ltaxis[0] < 0) ? 0 : w1;
-+ X1 = x1 + w1;
-+ X2 = x2 + w2;
-+ } else if(abs(m->ltaxis[0]) == 2 && n > m->msplit) {
-+ h1 *= m->mfact;
-+ h2 -= h1;
-+ y1 += (m->ltaxis[0] < 0) ? h2 : 0;
-+ y2 += (m->ltaxis[0] < 0) ? 0 : h1;
-+ Y1 = y1 + h1;
-+ Y2 = y2 + h2;
-+ }
- /* master */
-- c = nexttiled(m->clients);
-- mw = m->mfact * m->ww;
-- resize(c, m->wx, m->wy, (n == 1 ? m->ww : mw) - 2 * c->bw, m->wh - 2 * c->bw, False);
-- if(--n == 0)
-- return;
-- /* tile stack */
-- x = (m->wx + mw > c->x + c->w) ? c->x + c->w + 2 * c->bw : m->wx + mw;
-- y = m->wy;
-- w = (m->wx + mw > c->x + c->w) ? m->wx + m->ww - x : m->ww - mw;
-- h = m->wh / n;
-- if(h < bh)
-- h = m->wh;
-- for(i = 0, c = nexttiled(c->next); c; c = nexttiled(c->next), i++) {
-- resize(c, x, y, w - 2 * c->bw, /* remainder */ ((i + 1 == n)
-- ? m->wy + m->wh - y - 2 * c->bw : h - 2 * c->bw), False);
-- if(h != m->wh)
-- y = c->y + HEIGHT(c);
-+ n1 = (m->ltaxis[1] != 1 || w1 / m->msplit < bh) ? 1 : m->msplit;
-+ n2 = (m->ltaxis[1] != 2 || h1 / m->msplit < bh) ? 1 : m->msplit;
-+ for(i = 0, c = nexttiled(m->clients); i < m->msplit; c = nexttiled(c->next), i++) {
-+ resize(c, x1, y1,
-+ (m->ltaxis[1] == 1 && i + 1 == m->msplit) ? X1 - x1 - 2 * c->bw : w1 / n1 - 2 * c->bw,
-+ (m->ltaxis[1] == 2 && i + 1 == m->msplit) ? Y1 - y1 - 2 * c->bw : h1 / n2 - 2 * c->bw, False);
-+ if(n1 > 1)
-+ x1 = c->x + WIDTH(c);
-+ if(n2 > 1)
-+ y1 = c->y + HEIGHT(c);
-+ }
-+ /* stack */
-+ if(n > m->msplit) {
-+ n1 = (m->ltaxis[2] != 1 || w2 / (n - m->msplit) < bh) ? 1 : n - m->msplit;
-+ n2 = (m->ltaxis[2] != 2 || h2 / (n - m->msplit) < bh) ? 1 : n - m->msplit;
-+ for(i = 0; c; c = nexttiled(c->next), i++) {
-+ resize(c, x2, y2,
-+ (m->ltaxis[2] == 1 && i + 1 == n - m->msplit) ? X2 - x2 - 2 * c->bw : w2 / n1 - 2 * c->bw,
-+ (m->ltaxis[2] == 2 && i + 1 == n - m->msplit) ? Y2 - y2 - 2 * c->bw : h2 / n2 - 2 * c->bw, False);
-+ if(n1 > 1)
-+ x2 = c->x + WIDTH(c);
-+ if(n2 > 1)
-+ y2 = c->y + HEIGHT(c);
-+ }
- }
- }
-
- void
- togglebar(const Arg *arg) {
-- selmon->showbar = !selmon->showbar;
-+ selmon->showbar = selmon->showbars[selmon->curtag] = !selmon->showbar;
- updatebarpos(selmon);
- XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
- arrange(selmon);
-_AT_@ -1642,12 +1766,31 @@ togglefloating(const Arg *arg) {
- void
- toggletag(const Arg *arg) {
- unsigned int newtags;
-+ unsigned int i;
-
- if(!selmon->sel)
- return;
- newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
- if(newtags) {
- selmon->sel->tags = newtags;
-+ if(newtags == ~0) {
-+ selmon->prevtag = selmon->curtag;
-+ selmon->curtag = 0;
-+ }
-+ if(!(newtags & 1 << (selmon->curtag - 1))) {
-+ selmon->prevtag = selmon->curtag;
-+ for (i=0; !(newtags & 1 << i); i++);
-+ selmon->curtag = i + 1;
-+ }
-+ selmon->sel->tags = newtags;
-+ selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag];
-+ selmon->mfact = selmon->mfacts[selmon->curtag];
-+ if (selmon->showbar != selmon->showbars[selmon->curtag])
-+ togglebar(NULL);
-+ selmon->ltaxis[0] = selmon->ltaxes[selmon->curtag][0];
-+ selmon->ltaxis[1] = selmon->ltaxes[selmon->curtag][1];
-+ selmon->ltaxis[2] = selmon->ltaxes[selmon->curtag][2];
-+ selmon->msplit = selmon->msplits[selmon->curtag];
- arrange(selmon);
- }
- }
-_AT_@ -1914,11 +2057,33 @@ updatewmhints(Client *c) {
-
- void
- view(const Arg *arg) {
-+ unsigned int i;
-+
- if((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
- return;
- selmon->seltags ^= 1; /* toggle sel tagset */
-- if(arg->ui & TAGMASK)
-+ if(arg->ui & TAGMASK) {
- selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
-+ selmon->prevtag = selmon->curtag;
-+ if(arg->ui == ~0)
-+ selmon->curtag = 0;
-+ else {
-+ for (i=0; !(arg->ui & 1 << i); i++);
-+ selmon->curtag = i + 1;
-+ }
-+ } else {
-+ selmon->prevtag = selmon->curtag ^ selmon->prevtag;
-+ selmon->curtag ^= selmon->prevtag;
-+ selmon->prevtag = selmon->curtag ^ selmon->prevtag;
-+ }
-+ selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag];
-+ selmon->mfact = selmon->mfacts[selmon->curtag];
-+ if(selmon->showbar != selmon->showbars[selmon->curtag])
-+ togglebar(NULL);
-+ selmon->ltaxis[0] = selmon->ltaxes[selmon->curtag][0];
-+ selmon->ltaxis[1] = selmon->ltaxes[selmon->curtag][1];
-+ selmon->ltaxis[2] = selmon->ltaxes[selmon->curtag][2];
-+ selmon->msplit = selmon->msplits[selmon->curtag];
- arrange(selmon);
- }
-
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/flextile.md
--- a/dwm.suckless.org/patches/flextile.md Mon Sep 12 10:45:45 2011 +0100
+++ b/dwm.suckless.org/patches/flextile.md Mon Sep 12 12:35:44 2011 +0200
_AT_@ -57,10 +57,10 @@
## Download ##
- * [flextile-5.8.1.diff][1] (14k) (20100531, joten (at) freenet (dot) de)
- * [flextile-5.8.2.diff][2] (13k, +164 SLOC) (20100611, joten (at) freenet (dot) de) updated by Pascal Wittmann `<mail at pascal-wittmann dot de>`
+ * [flextile-5.8.2.diff][5.8.2] (13k, +164 SLOC) (20100611, joten (at) freenet (dot) de) updated by Pascal Wittmann `<mail at pascal-wittmann dot de>`
+ * [flextile-5.8.1.diff][5.8.1] (14k) (20100531, joten (at) freenet (dot) de)
-[1]: http://dwm.suckless.org/patches/flextile-5.8.1.diff
-[2]: http://dwm.suckless.org/patches/flextile-5.8.2.diff
+[5.8.2]: flextile-5.8.2.diff
+[5.8.1]: historical/flextile-5.8.1.diff
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/gapless_grid.md
--- a/dwm.suckless.org/patches/gapless_grid.md Mon Sep 12 10:45:45 2011 +0100
+++ b/dwm.suckless.org/patches/gapless_grid.md Mon Sep 12 12:35:44 2011 +0200
_AT_@ -27,4 +27,5 @@
## Download
* [gaplessgrid.c](gaplessgrid.c) (dwm 5.6.1) (20090908)
-* see [historical patches](historical) for older versions
+* [dwm-r1437-gaplessgrid.diff](historical/dwm-r1437-gaplessgrid.diff) (1.9k) (20090704)
+* [dwm-5.2-gaplessgrid.diff](historical/dwm-5.2-gaplessgrid.diff) (1.9k) (20081020)
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/historical/dwm-5.7.2-pertag.diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/dwm.suckless.org/patches/historical/dwm-5.7.2-pertag.diff Mon Sep 12 12:35:44 2011 +0200
_AT_@ -0,0 +1,184 @@
+diff -r 2bcd25cce4ab dwm.c
+--- a/dwm.c Sun Sep 27 20:20:14 2009 +0100
++++ b/dwm.c Tue Oct 20 18:27:52 2009 -0300
+_AT_@ -120,26 +120,6 @@
+ void (*arrange)(Monitor *);
+ } Layout;
+
+-struct Monitor {
+- char ltsymbol[16];
+- float mfact;
+- int num;
+- int by; /* bar geometry */
+- int mx, my, mw, mh; /* screen size */
+- int wx, wy, ww, wh; /* window area */
+- unsigned int seltags;
+- unsigned int sellt;
+- unsigned int tagset[2];
+- Bool showbar;
+- Bool topbar;
+- Client *clients;
+- Client *sel;
+- Client *stack;
+- Monitor *next;
+- Window barwin;
+- const Layout *lt[2];
+-};
+-
+ typedef struct {
+ const char *class;
+ const char *instance;
+_AT_@ -273,6 +253,31 @@
+ /* configuration, allows nested code to access above variables */
+ #include "config.h"
+
++struct Monitor {
++ char ltsymbol[16];
++ float mfact;
++ int num;
++ int by; /* bar geometry */
++ int mx, my, mw, mh; /* screen size */
++ int wx, wy, ww, wh; /* window area */
++ unsigned int seltags;
++ unsigned int sellt;
++ unsigned int tagset[2];
++ Bool showbar;
++ Bool topbar;
++ Client *clients;
++ Client *sel;
++ Client *stack;
++ Monitor *next;
++ Window barwin;
++ const Layout *lt[2];
++ int curtag;
++ int prevtag;
++ const Layout *lts[LENGTH(tags) + 1];
++ double mfacts[LENGTH(tags) + 1];
++ Bool showbars[LENGTH(tags) + 1];
++};
++
+ /* compile-time check if all tags fit into an unsigned int bit array. */
+ struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
+
+_AT_@ -1450,7 +1455,7 @@
+ if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
+ selmon->sellt ^= 1;
+ if(arg && arg->v)
+- selmon->lt[selmon->sellt] = (Layout *)arg->v;
++ selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag] = (Layout *)arg->v;
+ strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol);
+ if(selmon->sel)
+ arrange(selmon);
+_AT_@ -1468,13 +1473,15 @@
+ f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
+ if(f < 0.1 || f > 0.9)
+ return;
+- selmon->mfact = f;
++ selmon->mfact = selmon->mfacts[selmon->curtag] = f;
+ arrange(selmon);
+ }
+
+ void
+ setup(void) {
+ XSetWindowAttributes wa;
++ Monitor *m;
++ unsigned int i;
+
+ /* clean up any zombies immediately */
+ sigchld(0);
+_AT_@ -1509,7 +1516,27 @@
+ XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
+ if(!dc.font.set)
+ XSetFont(dpy, dc.gc, dc.font.xfont->fid);
++ /* init tags */
++ for(m = mons; m; m = m->next)
++ m->curtag = m->prevtag = 1;
++ /* init mfacts */
++ for(m = mons; m; m = m->next) {
++ for(i=0; i < LENGTH(tags) + 1 ; i++) {
++ m->mfacts[i] = m->mfact;
++ }
++ }
++ /* init layouts */
++ for(m = mons; m; m = m->next) {
++ for(i=0; i < LENGTH(tags) + 1; i++) {
++ m->lts[i] = &layouts[0];
++ }
++ }
+ /* init bars */
++ for(m = mons; m; m = m->next) {
++ for(i=0; i < LENGTH(tags) + 1; i++) {
++ m->showbars[i] = m->showbar;
++ }
++ }
+ updatebars();
+ updatestatus();
+ /* EWMH support per view */
+_AT_@ -1620,7 +1647,7 @@
+
+ void
+ togglebar(const Arg *arg) {
+- selmon->showbar = !selmon->showbar;
++ selmon->showbar = selmon->showbars[selmon->curtag] = !selmon->showbar;
+ updatebarpos(selmon);
+ XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
+ arrange(selmon);
+_AT_@ -1640,12 +1667,27 @@
+ void
+ toggletag(const Arg *arg) {
+ unsigned int newtags;
++ unsigned int i;
+
+ if(!selmon->sel)
+ return;
+ newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
+ if(newtags) {
+ selmon->sel->tags = newtags;
++ if(newtags == ~0) {
++ selmon->prevtag = selmon->curtag;
++ selmon->curtag = 0;
++ }
++ if(!(newtags & 1 << (selmon->curtag - 1))) {
++ selmon->prevtag = selmon->curtag;
++ for (i=0; !(newtags & 1 << i); i++);
++ selmon->curtag = i + 1;
++ }
++ selmon->sel->tags = newtags;
++ selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag];
++ selmon->mfact = selmon->mfacts[selmon->curtag];
++ if (selmon->showbar != selmon->showbars[selmon->curtag])
++ togglebar(NULL);
+ arrange(selmon);
+ }
+ }
+_AT_@ -1912,11 +1954,29 @@
+
+ void
+ view(const Arg *arg) {
++ unsigned int i;
++
+ if((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
+ return;
+ selmon->seltags ^= 1; /* toggle sel tagset */
+- if(arg->ui & TAGMASK)
++ if(arg->ui & TAGMASK) {
+ selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
++ selmon->prevtag = selmon->curtag;
++ if(arg->ui == ~0)
++ selmon->curtag = 0;
++ else {
++ for (i=0; !(arg->ui & 1 << i); i++);
++ selmon->curtag = i + 1;
++ }
++ } else {
++ selmon->prevtag= selmon->curtag ^ selmon->prevtag;
++ selmon->curtag^= selmon->prevtag;
++ selmon->prevtag= selmon->curtag ^ selmon->prevtag;
++ }
++ selmon->lt[selmon->sellt]= selmon->lts[selmon->curtag];
++ selmon->mfact = selmon->mfacts[selmon->curtag];
++ if(selmon->showbar != selmon->showbars[selmon->curtag])
++ togglebar(NULL);
+ arrange(selmon);
+ }
+
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/historical/dwm-5.7.2-statuscolors.diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/dwm.suckless.org/patches/historical/dwm-5.7.2-statuscolors.diff Mon Sep 12 12:35:44 2011 +0200
_AT_@ -0,0 +1,234 @@
+diff -r 2bcd25cce4ab config.def.h
+--- a/config.def.h Sun Sep 27 20:20:14 2009 +0100
++++ b/config.def.h Mon Oct 05 22:01:49 2009 -0300
+_AT_@ -1,13 +1,16 @@
+ /* See LICENSE file for copyright and license details. */
+
+ /* appearance */
++#define NUMCOLORS 4 // need at least 3
++static const char colors[NUMCOLORS][ColLast][8] = {
++ // border foreground background
++ { "#cccccc", "#000000", "#cccccc" }, // 0 = normal
++ { "#0066ff", "#ffffff", "#0066ff" }, // 1 = selected
++ { "#0066ff", "#0066ff", "#ffffff" }, // 2 = urgent/warning
++ { "#ff0000", "#ffffff", "#ff0000" }, // 3 = error
++ // add more here
++};
+ static const char font[] = "-*-*-medium-*-*-*-14-*-*-*-*-*-*-*";
+-static const char normbordercolor[] = "#cccccc";
+-static const char normbgcolor[] = "#cccccc";
+-static const char normfgcolor[] = "#000000";
+-static const char selbordercolor[] = "#0066ff";
+-static const char selbgcolor[] = "#0066ff";
+-static const char selfgcolor[] = "#ffffff";
+ static const unsigned int borderpx = 1; /* border pixel of windows */
+ static const unsigned int snap = 32; /* snap pixel */
+ static const Bool showbar = True; /* False means no bar */
+_AT_@ -45,7 +48,7 @@
+ #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
+
+ /* commands */
+-static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
++static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb", colors[0][ColBG], "-nf", colors[0][ColFG], "-sb", colors[1][ColBG], "-sf", colors[1][ColFG], NULL };
+ static const char *termcmd[] = { "uxterm", NULL };
+
+ static Key keys[] = {
+diff -r 2bcd25cce4ab dwm.c
+--- a/dwm.c Sun Sep 27 20:20:14 2009 +0100
++++ b/dwm.c Mon Oct 05 22:01:49 2009 -0300
+_AT_@ -48,6 +48,7 @@
+ #define LENGTH(X) (sizeof X / sizeof X[0])
+ #define MAX(A, B) ((A) > (B) ? (A) : (B))
+ #define MIN(A, B) ((A) < (B) ? (A) : (B))
++#define MAXCOLORS 8
+ #define MOUSEMASK (BUTTONMASK|PointerMotionMask)
+ #define WIDTH(X) ((X)->w + 2 * (X)->bw)
+ #define HEIGHT(X) ((X)->h + 2 * (X)->bw)
+_AT_@ -95,8 +96,7 @@
+
+ typedef struct {
+ int x, y, w, h;
+- unsigned long norm[ColLast];
+- unsigned long sel[ColLast];
++ unsigned long colors[MAXCOLORS][ColLast];
+ Drawable drawable;
+ GC gc;
+ struct {
+_AT_@ -172,8 +172,9 @@
+ static Monitor *dirtomon(int dir);
+ static void drawbar(Monitor *m);
+ static void drawbars(void);
+-static void drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]);
+-static void drawtext(const char *text, unsigned long col[ColLast], Bool invert);
++static void drawcoloredtext(char *text);
++static void drawsquare(Bool filled, Bool empty, unsigned long col[ColLast]);
++static void drawtext(const char *text, unsigned long col[ColLast], Bool pad);
+ static void enternotify(XEvent *e);
+ static void expose(XEvent *e);
+ static void focus(Client *c);
+_AT_@ -691,14 +692,13 @@
+ dc.x = 0;
+ for(i = 0; i < LENGTH(tags); i++) {
+ dc.w = TEXTW(tags[i]);
+- col = m->tagset[m->seltags] & 1 << i ? dc.sel : dc.norm;
+- drawtext(tags[i], col, urg & 1 << i);
+- drawsquare(m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
+- occ & 1 << i, urg & 1 << i, col);
++ col = dc.colors[ (m->tagset[m->seltags] & 1 << i ? 1:(urg & 1 << i ? 2:0))];
++ drawtext(tags[i], col, True);
++ drawsquare(m == selmon && selmon->sel && selmon->sel->tags & 1 << i, occ & 1 << i, col);
+ dc.x += dc.w;
+ }
+ dc.w = blw = TEXTW(m->ltsymbol);
+- drawtext(m->ltsymbol, dc.norm, False);
++ drawtext(m->ltsymbol, dc.colors[0], True);
+ dc.x += dc.w;
+ x = dc.x;
+ if(m == selmon) { /* status is only drawn on selected monitor */
+_AT_@ -708,19 +708,19 @@
+ dc.x = x;
+ dc.w = m->ww - x;
+ }
+- drawtext(stext, dc.norm, False);
++ drawcoloredtext(stext);
+ }
+ else
+ dc.x = m->ww;
+ if((dc.w = dc.x - x) > bh) {
+ dc.x = x;
+ if(m->sel) {
+- col = m == selmon ? dc.sel : dc.norm;
+- drawtext(m->sel->name, col, False);
+- drawsquare(m->sel->isfixed, m->sel->isfloating, False, col);
++ col = m == selmon ? dc.colors[1] : dc.colors[0];
++ drawtext(m->sel->name, col, True);
++ drawsquare(m->sel->isfixed, m->sel->isfloating, col);
+ }
+ else
+- drawtext(NULL, dc.norm, False);
++ drawtext(NULL, dc.colors[0], False);
+ }
+ XCopyArea(dpy, dc.drawable, m->barwin, dc.gc, 0, 0, m->ww, bh, 0, 0);
+ XSync(dpy, False);
+_AT_@ -735,12 +735,42 @@
+ }
+
+ void
+-drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]) {
++drawcoloredtext(char *text) {
++ Bool first=True;
++ char *buf = text, *ptr = buf, c = 1;
++ unsigned long *col = dc.colors[0];
++ int i, ox = dc.x;
++
++ while( *ptr ) {
++ for( i = 0; *ptr < 0 || *ptr > NUMCOLORS; i++, ptr++);
++ if( !*ptr ) break;
++ c=*ptr;
++ *ptr=0;
++ if( i ) {
++ dc.w = selmon->ww - dc.x;
++ drawtext(buf, col, first);
++ dc.x += textnw(buf, i) + textnw(&c,1);
++ if( first ) dc.x += ( dc.font.ascent + dc.font.descent ) / 2;
++ first = False;
++ } else if( first ) {
++ ox = dc.x += textnw(&c,1);
++ }
++ *ptr = c;
++ col = dc.colors[ c-1 ];
++ buf = ++ptr;
++ }
++ if( !first ) dc.x-=(dc.font.ascent+dc.font.descent)/2;
++ drawtext(buf, col, True);
++ dc.x = ox;
++}
++
++void
++drawsquare(Bool filled, Bool empty, unsigned long col[ColLast]) {
+ int x;
+ XGCValues gcv;
+ XRectangle r = { dc.x, dc.y, dc.w, dc.h };
+
+- gcv.foreground = col[invert ? ColBG : ColFG];
++ gcv.foreground = col[ ColFG ];
+ XChangeGC(dpy, dc.gc, GCForeground, &gcv);
+ x = (dc.font.ascent + dc.font.descent + 2) / 4;
+ r.x = dc.x + 1;
+_AT_@ -756,18 +786,18 @@
+ }
+
+ void
+-drawtext(const char *text, unsigned long col[ColLast], Bool invert) {
++drawtext(const char *text, unsigned long col[ColLast], Bool pad) {
+ char buf[256];
+ int i, x, y, h, len, olen;
+ XRectangle r = { dc.x, dc.y, dc.w, dc.h };
+
+- XSetForeground(dpy, dc.gc, col[invert ? ColFG : ColBG]);
++ XSetForeground(dpy, dc.gc, col[ ColBG ]);
+ XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
+ if(!text)
+ return;
+ olen = strlen(text);
+- h = dc.font.ascent + dc.font.descent;
+- y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
++ h = pad ? (dc.font.ascent + dc.font.descent) : 0;
++ y = dc.y + ((dc.h + dc.font.ascent - dc.font.descent) / 2);
+ x = dc.x + (h / 2);
+ /* shorten text if necessary */
+ for(len = MIN(olen, sizeof buf); len && textnw(text, len) > dc.w - h; len--);
+_AT_@ -776,7 +806,7 @@
+ memcpy(buf, text, len);
+ if(len < olen)
+ for(i = len; i && i > len - 3; buf[--i] = '.');
+- XSetForeground(dpy, dc.gc, col[invert ? ColBG : ColFG]);
++ XSetForeground(dpy, dc.gc, col[ ColFG ]);
+ if(dc.font.set)
+ XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
+ else
+_AT_@ -824,7 +854,7 @@
+ detachstack(c);
+ attachstack(c);
+ grabbuttons(c, True);
+- XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]);
++ XSetWindowBorder(dpy, c->win, dc.colors[1][ColBorder]);
+ XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
+ }
+ else
+_AT_@ -1132,7 +1162,7 @@
+ }
+ wc.border_width = c->bw;
+ XConfigureWindow(dpy, w, CWBorderWidth, &wc);
+- XSetWindowBorder(dpy, w, dc.norm[ColBorder]);
++ XSetWindowBorder(dpy, w, dc.colors[0][ColBorder]);
+ configure(c); /* propagates border_width, if size doesn't change */
+ updatesizehints(c);
+ XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask);
+_AT_@ -1498,12 +1528,11 @@
+ cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing);
+ cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur);
+ /* init appearance */
+- dc.norm[ColBorder] = getcolor(normbordercolor);
+- dc.norm[ColBG] = getcolor(normbgcolor);
+- dc.norm[ColFG] = getcolor(normfgcolor);
+- dc.sel[ColBorder] = getcolor(selbordercolor);
+- dc.sel[ColBG] = getcolor(selbgcolor);
+- dc.sel[ColFG] = getcolor(selfgcolor);
++ for(int i=0; i<NUMCOLORS; i++) {
++ dc.colors[i][ColBorder] = getcolor( colors[i][ColBorder] );
++ dc.colors[i][ColFG] = getcolor( colors[i][ColFG] );
++ dc.colors[i][ColBG] = getcolor( colors[i][ColBG] );
++ }
+ dc.drawable = XCreatePixmap(dpy, root, DisplayWidth(dpy, screen), bh, DefaultDepth(dpy, screen));
+ dc.gc = XCreateGC(dpy, root, 0, NULL);
+ XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
+_AT_@ -1665,7 +1694,7 @@
+ if(!c)
+ return;
+ grabbuttons(c, False);
+- XSetWindowBorder(dpy, c->win, dc.norm[ColBorder]);
++ XSetWindowBorder(dpy, c->win, dc.colors[0][ColBorder]);
+ XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
+ }
+
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/historical/dwm-5.8.2-statuscolors.diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/dwm.suckless.org/patches/historical/dwm-5.8.2-statuscolors.diff Mon Sep 12 12:35:44 2011 +0200
_AT_@ -0,0 +1,232 @@
+--- a/config.def.h 2010-10-16 15:49:03.000000000 +0200
++++ b/config.def.h 2010-10-16 15:51:35.000000000 +0200
+_AT_@ -1,13 +1,16 @@
+ /* See LICENSE file for copyright and license details. */
+
+ /* appearance */
++#define NUMCOLORS 4 // need at least 3
++static const char colors[NUMCOLORS][ColLast][8] = {
++ // border foreground background
++ { "#cccccc", "#000000", "#cccccc" }, // 0 = normal
++ { "#0066ff", "#ffffff", "#0066ff" }, // 1 = selected
++ { "#0066ff", "#0066ff", "#ffffff" }, // 2 = urgent/warning
++ { "#ff0000", "#ffffff", "#ff0000" }, // 3 = error
++ // add more here
++};
+ static const char font[] = "-*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*";
+-static const char normbordercolor[] = "#cccccc";
+-static const char normbgcolor[] = "#cccccc";
+-static const char normfgcolor[] = "#000000";
+-static const char selbordercolor[] = "#0066ff";
+-static const char selbgcolor[] = "#0066ff";
+-static const char selfgcolor[] = "#ffffff";
+ static const unsigned int borderpx = 1; /* border pixel of windows */
+ static const unsigned int snap = 32; /* snap pixel */
+ static const Bool showbar = True; /* False means no bar */
+_AT_@ -45,7 +48,7 @@
+ #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
+
+ /* commands */
+-static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
++static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb", colors[0][ColBG], "-nf", colors[0][ColFG],"-sb", colors[1][ColBG], "-sf", colors[1][ColFG], NULL };
+ static const char *termcmd[] = { "uxterm", NULL };
+
+ static Key keys[] = {
+--- a//dwm.c 2010-06-04 12:39:15.000000000 +0200
++++ b/dwm.c 2010-11-03 20:36:50.000000000 +0100
+_AT_@ -48,6 +48,7 @@
+ #define LENGTH(X) (sizeof X / sizeof X[0])
+ #define MAX(A, B) ((A) > (B) ? (A) : (B))
+ #define MIN(A, B) ((A) < (B) ? (A) : (B))
++#define MAXCOLORS 8
+ #define MOUSEMASK (BUTTONMASK|PointerMotionMask)
+ #define WIDTH(X) ((X)->w + 2 * (X)->bw)
+ #define HEIGHT(X) ((X)->h + 2 * (X)->bw)
+_AT_@ -97,8 +98,7 @@
+
+ typedef struct {
+ int x, y, w, h;
+- unsigned long norm[ColLast];
+- unsigned long sel[ColLast];
++ unsigned long colors[MAXCOLORS][ColLast];
+ Drawable drawable;
+ GC gc;
+ struct {
+_AT_@ -175,8 +175,9 @@
+ static Monitor *dirtomon(int dir);
+ static void drawbar(Monitor *m);
+ static void drawbars(void);
+-static void drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]);
+-static void drawtext(const char *text, unsigned long col[ColLast], Bool invert);
++static void drawcoloredtext(char *text);
++static void drawsquare(Bool filled, Bool empty, unsigned long col[ColLast]);
++static void drawtext(const char *text, unsigned long col[ColLast], Bool pad);
+ static void enternotify(XEvent *e);
+ static void expose(XEvent *e);
+ static void focus(Client *c);
+_AT_@ -696,14 +697,13 @@
+ dc.x = 0;
+ for(i = 0; i < LENGTH(tags); i++) {
+ dc.w = TEXTW(tags[i]);
+- col = m->tagset[m->seltags] & 1 << i ? dc.sel : dc.norm;
+- drawtext(tags[i], col, urg & 1 << i);
+- drawsquare(m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
+- occ & 1 << i, urg & 1 << i, col);
++ col = dc.colors[ (m->tagset[m->seltags] & 1 << i ? 1:(urg & 1 << i ? 2:0))];
++ drawtext(tags[i], col, True);
++ drawsquare(m == selmon && selmon->sel && selmon->sel->tags & 1 << i, occ & 1 << i, col);
+ dc.x += dc.w;
+ }
+ dc.w = blw = TEXTW(m->ltsymbol);
+- drawtext(m->ltsymbol, dc.norm, False);
++ drawtext(m->ltsymbol, dc.colors[0], True);
+ dc.x += dc.w;
+ x = dc.x;
+ if(m == selmon) { /* status is only drawn on selected monitor */
+_AT_@ -713,19 +713,19 @@
+ dc.x = x;
+ dc.w = m->ww - x;
+ }
+- drawtext(stext, dc.norm, False);
++ drawcoloredtext(stext);
+ }
+ else
+ dc.x = m->ww;
+ if((dc.w = dc.x - x) > bh) {
+ dc.x = x;
+ if(m->sel) {
+- col = m == selmon ? dc.sel : dc.norm;
+- drawtext(m->sel->name, col, False);
+- drawsquare(m->sel->isfixed, m->sel->isfloating, False, col);
++ col = m == selmon ? dc.colors[1] : dc.colors[0];
++ drawtext(m->sel->name, col, True);
++ drawsquare(m->sel->isfixed, m->sel->isfloating, col);
+ }
+ else
+- drawtext(NULL, dc.norm, False);
++ drawtext(NULL, dc.colors[0], False);
+ }
+ XCopyArea(dpy, dc.drawable, m->barwin, dc.gc, 0, 0, m->ww, bh, 0, 0);
+ XSync(dpy, False);
+_AT_@ -740,12 +740,42 @@
+ }
+
+ void
+-drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]) {
++drawcoloredtext(char *text) {
++ Bool first=True;
++ char *buf = text, *ptr = buf, c = 1;
++ unsigned long *col = dc.colors[0];
++ int i, ox = dc.x;
++
++ while( *ptr ) {
++ for( i = 0; *ptr < 0 || *ptr > NUMCOLORS; i++, ptr++);
++ if( !*ptr ) break;
++ c=*ptr;
++ *ptr=0;
++ if( i ) {
++ dc.w = selmon->ww - dc.x;
++ drawtext(buf, col, first);
++ dc.x += textnw(buf, i) + textnw(&c,1);
++ if( first ) dc.x += ( dc.font.ascent + dc.font.descent ) / 2;
++ first = False;
++ } else if( first ) {
++ ox = dc.x += textnw(&c,1);
++ }
++ *ptr = c;
++ col = dc.colors[ c-1 ];
++ buf = ++ptr;
++ }
++ if( !first ) dc.x-=(dc.font.ascent+dc.font.descent)/2;
++ drawtext(buf, col, True);
++ dc.x = ox;
++}
++
++void
++drawsquare(Bool filled, Bool empty, unsigned long col[ColLast]) {
+ int x;
+ XGCValues gcv;
+ XRectangle r = { dc.x, dc.y, dc.w, dc.h };
+
+- gcv.foreground = col[invert ? ColBG : ColFG];
++ gcv.foreground = col[ ColFG ];
+ XChangeGC(dpy, dc.gc, GCForeground, &gcv);
+ x = (dc.font.ascent + dc.font.descent + 2) / 4;
+ r.x = dc.x + 1;
+_AT_@ -761,18 +791,18 @@
+ }
+
+ void
+-drawtext(const char *text, unsigned long col[ColLast], Bool invert) {
++drawtext(const char *text, unsigned long col[ColLast], Bool pad) {
+ char buf[256];
+ int i, x, y, h, len, olen;
+ XRectangle r = { dc.x, dc.y, dc.w, dc.h };
+
+- XSetForeground(dpy, dc.gc, col[invert ? ColFG : ColBG]);
++ XSetForeground(dpy, dc.gc, col[ ColBG ]);
+ XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
+ if(!text)
+ return;
+ olen = strlen(text);
+- h = dc.font.ascent + dc.font.descent;
+- y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
++ h = pad ? (dc.font.ascent + dc.font.descent) : 0;
++ y = dc.y + ((dc.h + dc.font.ascent - dc.font.descent) / 2);
+ x = dc.x + (h / 2);
+ /* shorten text if necessary */
+ for(len = MIN(olen, sizeof buf); len && textnw(text, len) > dc.w - h; len--);
+_AT_@ -781,7 +811,7 @@
+ memcpy(buf, text, len);
+ if(len < olen)
+ for(i = len; i && i > len - 3; buf[--i] = '.');
+- XSetForeground(dpy, dc.gc, col[invert ? ColBG : ColFG]);
++ XSetForeground(dpy, dc.gc, col[ ColFG ]);
+ if(dc.font.set)
+ XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
+ else
+_AT_@ -830,7 +860,7 @@
+ detachstack(c);
+ attachstack(c);
+ grabbuttons(c, True);
+- XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]);
++ XSetWindowBorder(dpy, c->win, dc.colors[1][ColBorder]);
+ XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
+ }
+ else
+_AT_@ -1139,7 +1169,7 @@
+ }
+ wc.border_width = c->bw;
+ XConfigureWindow(dpy, w, CWBorderWidth, &wc);
+- XSetWindowBorder(dpy, w, dc.norm[ColBorder]);
++ XSetWindowBorder(dpy, w, dc.colors[0][ColBorder]);
+ configure(c); /* propagates border_width, if size doesn't change */
+ updatesizehints(c);
+ XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask);
+_AT_@ -1544,12 +1574,11 @@
+ cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing);
+ cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur);
+ /* init appearance */
+- dc.norm[ColBorder] = getcolor(normbordercolor);
+- dc.norm[ColBG] = getcolor(normbgcolor);
+- dc.norm[ColFG] = getcolor(normfgcolor);
+- dc.sel[ColBorder] = getcolor(selbordercolor);
+- dc.sel[ColBG] = getcolor(selbgcolor);
+- dc.sel[ColFG] = getcolor(selfgcolor);
++ for(int i=0; i<NUMCOLORS; i++) {
++ dc.colors[i][ColBorder] = getcolor( colors[i][ColBorder] );
++ dc.colors[i][ColFG] = getcolor( colors[i][ColFG] );
++ dc.colors[i][ColBG] = getcolor( colors[i][ColBG] );
++ }
+ dc.drawable = XCreatePixmap(dpy, root, DisplayWidth(dpy, screen), bh, DefaultDepth(dpy, screen));
+ dc.gc = XCreateGC(dpy, root, 0, NULL);
+ XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
+_AT_@ -1711,7 +1740,7 @@
+ if(!c)
+ return;
+ grabbuttons(c, False);
+- XSetWindowBorder(dpy, c->win, dc.norm[ColBorder]);
++ XSetWindowBorder(dpy, c->win, dc.colors[0][ColBorder]);
+ if(setfocus)
+ XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
+ }
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/historical/dwm-gap-5.7.2.diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/dwm.suckless.org/patches/historical/dwm-gap-5.7.2.diff Mon Sep 12 12:35:44 2011 +0200
_AT_@ -0,0 +1,23 @@
+--- a/dwm.c 2009-09-17 10:48:57.000000000 +0200
++++ b/dwm.c 2009-09-16 18:54:37.000000000 +0200
+_AT_@ -1270,10 +1270,10 @@
+ XWindowChanges wc;
+
+ if(applysizehints(c, &x, &y, &w, &h, interact)) {
+- c->x = wc.x = x;
+- c->y = wc.y = y;
+- c->w = wc.width = w;
+- c->h = wc.height = h;
++ c->x = wc.x = x + gappx;
++ c->y = wc.y = y + gappx;
++ c->w = wc.width = w - 2 * gappx ;
++ c->h = wc.height = h - 2 * gappx ;
+ wc.border_width = c->bw;
+ XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
+ configure(c);
+
+diff -r 72e52c5333ef config.def.h
+--- a/config.def.h Wed Nov 25 13:56:17 2009 +0000
++++ b/config.def.h Tue Dec 15 18:39:44 2009 +0100
+_AT_@ -7,14 +7,15 @@
++static const unsigned int gappx = 4; /* gap pixel between windows */
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/historical/dwm-pertag-5.6.1.diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/dwm.suckless.org/patches/historical/dwm-pertag-5.6.1.diff Mon Sep 12 12:35:44 2011 +0200
_AT_@ -0,0 +1,184 @@
+--- dwm.c 2009-09-18 18:12:50.000000000 +0200
++++ dwm.c.working 2009-09-18 18:14:04.000000000 +0200
+_AT_@ -131,6 +131,25 @@
+ void (*arrange) (Monitor *);
+ } Layout;
+
++struct Monitor {
++ float mfact;
++ int num;
++ int by; /* bar geometry */
++ int mx, my, mw, mh; /* screen size */
++ int wx, wy, ww, wh; /* window area */
++ unsigned int seltags;
++ unsigned int sellt;
++ unsigned int tagset[2];
++ Bool showbar;
++ Bool topbar;
++ Client *clients;
++ Client *sel;
++ Client *stack;
++ Monitor *next;
++ Window barwin;
++ const Layout *lt[2];
++};
++
+ typedef struct {
+ const char *class;
+ const char *instance;
+_AT_@ -263,30 +282,6 @@
+ /* configuration, allows nested code to access above variables */
+ #include "config.h"
+
+-struct Monitor {
+- float mfact;
+- int num;
+- int by; /* bar geometry */
+- int mx, my, mw, mh; /* screen size */
+- int wx, wy, ww, wh; /* window area */
+- unsigned int seltags;
+- unsigned int sellt;
+- unsigned int tagset[2];
+- Bool showbar;
+- Bool topbar;
+- Client *clients;
+- Client *sel;
+- Client *stack;
+- Monitor *next;
+- Window barwin;
+- const Layout *lt[2];
+- int curtag;
+- int prevtag;
+- const Layout *lts[LENGTH(tags) + 1];
+- double mfacts[LENGTH(tags) + 1];
+- Bool showbars[LENGTH(tags) + 1];
+-};
+-
+ /* compile-time check if all tags fit into an unsigned int bit array. */
+ struct NumTags {
+ char limitexceeded[LENGTH(tags) > 31 ? -1 : 1];
+_AT_@ -1484,7 +1479,7 @@
+ if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
+ selmon->sellt ^= 1;
+ if (arg && arg->v)
+- selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag] = (Layout *) arg->v;
++ selmon->lt[selmon->sellt] = (Layout *) arg->v;
+ if (selmon->sel)
+ arrange();
+ else
+_AT_@ -1502,7 +1497,7 @@
+ f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
+ if (f < 0.1 || f > 0.9)
+ return;
+- selmon->mfact = selmon->mfacts[selmon->curtag] = f;
++ selmon->mfact = f;
+ arrange();
+ }
+
+_AT_@ -1512,7 +1507,6 @@
+ unsigned int i;
+ int w;
+ XSetWindowAttributes wa;
+- Monitor *m;
+
+ /* clean up any zombies immediately */
+ sigchld(0);
+_AT_@ -1547,31 +1541,11 @@
+ XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
+ if (!dc.font.set)
+ XSetFont(dpy, dc.gc, dc.font.xfont->fid);
+- /* init tags */
+- for (m = mons; m; m = m->next)
+- m->curtag = m->prevtag = 1;
+- /* init mfacts */
+- for (m = mons; m; m = m->next) {
+- for (i = 0; i < LENGTH(tags) + 1; i++) {
+- m->mfacts[i] = m->mfact;
+- }
+- }
+- /* init layouts */
+- for (m = mons; m; m = m->next) {
+- for (i = 0; i < LENGTH(tags) + 1; i++) {
+- m->lts[i] = &layouts[0];
+- }
+- }
+ /* init bars */
+ for (blw = i = 0; LENGTH(layouts) > 1 && i < LENGTH(layouts); i++) {
+ w = TEXTW(layouts[i].symbol);
+ blw = MAX(blw, w);
+ }
+- for (m = mons; m; m = m->next) {
+- for (i = 0; i < LENGTH(tags) + 1; i++) {
+- m->showbars[i] = m->showbar;
+- }
+- }
+ updatebars();
+ updatestatus();
+ /* EWMH support per view */
+_AT_@ -1689,7 +1663,7 @@
+ void
+ togglebar(const Arg * arg)
+ {
+- selmon->showbar = selmon->showbars[selmon->curtag] = !selmon->showbar;
++ selmon->showbar = !selmon->showbar;
+ updatebarpos(selmon);
+ XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
+ arrange();
+_AT_@ -1710,27 +1684,13 @@
+ void
+ toggletag(const Arg * arg)
+ {
+- unsigned int i;
+ unsigned int newtags;
+
+ if (!selmon->sel)
+ return;
+ newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
+ if (newtags) {
+- if (newtags == ~0) {
+- selmon->prevtag = selmon->curtag;
+- selmon->curtag = 0;
+- }
+- if (!(newtags & 1 << (selmon->curtag - 1))) {
+- selmon->prevtag = selmon->curtag;
+- for (i = 0; !(newtags & 1 << i); i++);
+- selmon->curtag = i + 1;
+- }
+ selmon->sel->tags = newtags;
+- selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag];
+- selmon->mfact = selmon->mfacts[selmon->curtag];
+- if (selmon->showbar != selmon->showbars[selmon->curtag])
+- togglebar(NULL);
+ arrange();
+ }
+ }
+_AT_@ -1993,28 +1953,11 @@
+ void
+ view(const Arg * arg)
+ {
+- unsigned int i;
+ if ((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
+ return;
+ selmon->seltags ^= 1; /* toggle sel tagset */
+- if (arg->ui & TAGMASK) {
++ if (arg->ui & TAGMASK)
+ selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
+- selmon->prevtag = selmon->curtag;
+- if (arg->ui == ~0)
+- selmon->curtag = 0;
+- else {
+- for (i = 0; !(arg->ui & 1 << i); i++);
+- selmon->curtag = i + 1;
+- }
+- } else {
+- selmon->prevtag = selmon->curtag ^ selmon->prevtag;
+- selmon->curtag ^= selmon->prevtag;
+- selmon->prevtag = selmon->curtag ^ selmon->prevtag;
+- }
+- selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag];
+- selmon->mfact = selmon->mfacts[selmon->curtag];
+- if (selmon->showbar != selmon->showbars[selmon->curtag])
+- togglebar(NULL);
+ arrange();
+ }
+
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/historical/dwm-uselessgap-5.8.diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/dwm.suckless.org/patches/historical/dwm-uselessgap-5.8.diff Mon Sep 12 12:35:44 2011 +0200
_AT_@ -0,0 +1,49 @@
+diff -r 72e52c5333ef config.def.h
+--- a/config.def.h Wed Nov 25 13:56:17 2009 +0000
++++ b/config.def.h Thu Mar 11 16:32:24 2010 +0100
+_AT_@ -9,6 +9,7 @@
+ static const char selbgcolor[] = "#0066ff";
+ static const char selfgcolor[] = "#ffffff";
+ static const unsigned int borderpx = 1; /* border pixel of windows */
++static const unsigned int gappx = 6; /* gap pixel between windows */
+ static const unsigned int snap = 32; /* snap pixel */
+ static const Bool showbar = True; /* False means no bar */
+ static const Bool topbar = True; /* False means bottom bar */
+diff -r 72e52c5333ef dwm.c
+--- a/dwm.c Wed Nov 25 13:56:17 2009 +0000
++++ b/dwm.c Thu Mar 11 16:32:24 2010 +0100
+_AT_@ -269,6 +269,7 @@
+ static DC dc;
+ static Monitor *mons = NULL, *selmon = NULL;
+ static Window root;
++static int globalborder ;
+
+ /* configuration, allows nested code to access above variables */
+ #include "config.h"
+_AT_@ -1299,16 +1300,21 @@
+ resize(Client *c, int x, int y, int w, int h, Bool interact) {
+ XWindowChanges wc;
+
++ if(c->isfloating || selmon->lt[selmon->sellt]->arrange == NULL) { globalborder = 0 ; }
++ else {
++ if (selmon->lt[selmon->sellt]->arrange == monocle) { globalborder = 0 - borderpx ; }
++ else { globalborder = gappx ; }
++ }
+ if(applysizehints(c, &x, &y, &w, &h, interact)) {
+- c->x = wc.x = x;
+- c->y = wc.y = y;
+- c->w = wc.width = w;
+- c->h = wc.height = h;
++ c->x = wc.x = x + globalborder;
++ c->y = wc.y = y + globalborder;
++ c->w = wc.width = w - 2 * globalborder ;
++ c->h = wc.height = h - 2 * globalborder ;
+ wc.border_width = c->bw;
+ XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
+ configure(c);
+ XSync(dpy, False);
+- }
++ }
+ }
+
+ void
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/historical/fancybar-5.6.1.diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/dwm.suckless.org/patches/historical/fancybar-5.6.1.diff Mon Sep 12 12:35:44 2011 +0200
_AT_@ -0,0 +1,121 @@
+diff -r e47a47bd3ed4 dwm.c
+--- a/dwm.c Tue Jul 21 10:57:54 2009 +0100
++++ b/dwm.c Mon Aug 24 18:28:57 2009 +0200
+_AT_@ -169,6 +169,7 @@
+ static Monitor *dirtomon(int dir);
+ static void drawbar(Monitor *m);
+ static void drawbars(void);
++static void drawvline(unsigned long col[ColLast]);
+ static void drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]);
+ static void drawtext(const char *text, unsigned long col[ColLast], Bool invert);
+ static void enternotify(XEvent *e);
+_AT_@ -648,10 +649,11 @@
+
+ void
+ drawbar(Monitor *m) {
+- int x;
++ int x, ow, mw = 0, extra, tw;
+ unsigned int i, n = 0, occ = 0, urg = 0;
+ unsigned long *col;
+- Client *c;
++ Client *c, *firstvis, *lastvis = NULL;
++ DC seldc;
+
+ for(c = m->clients; c; c = c->next) {
+ if(ISVISIBLE(c))
+_AT_@ -689,16 +691,62 @@
+ }
+ else
+ dc.x = m->ww;
+- if((dc.w = dc.x - x) > bh) {
+- dc.x = x;
+- if(m->sel) {
+- col = m == selmon ? dc.sel : dc.norm;
+- drawtext(m->sel->name, col, False);
+- drawsquare(m->sel->isfixed, m->sel->isfloating, False, col);
++
++ for(c = m->clients; c && !ISVISIBLE(c); c = c->next);
++ firstvis = c;
++
++ col = m == selmon ? dc.sel : dc.norm;
++ dc.w = dc.x - x;
++ dc.x = x;
++
++ if(n > 0) {
++ mw = dc.w / n;
++ extra = 0;
++ seldc = dc;
++ i = 0;
++
++ while(c) {
++ lastvis = c;
++ tw = TEXTW(c->name);
++ if(tw < mw) extra += (mw - tw); else i++;
++ for(c = c->next; c && !ISVISIBLE(c); c = c->next);
+ }
+- else
++
++ if(i > 0) mw += extra / i;
++
++ c = firstvis;
++ x = dc.x;
++ }
++
++ while(dc.w > bh) {
++ if(c) {
++ ow = dc.w;
++ tw = TEXTW(c->name);
++ dc.w = MIN(ow, tw);
++
++ if(dc.w > mw) dc.w = mw;
++ if(m->sel == c) seldc = dc;
++ if(c == lastvis) dc.w = ow;
++
++ drawtext(c->name, col, False);
++ if(c != firstvis) drawvline(col);
++ drawsquare(c->isfixed, c->isfloating, False, col);
++
++ dc.x += dc.w;
++ dc.w = ow - dc.w;
++ for(c = c->next; c && !ISVISIBLE(c); c = c->next);
++ } else {
+ drawtext(NULL, dc.norm, False);
++ break;
++ }
+ }
++
++ if(m == selmon && m->sel && ISVISIBLE(m->sel)) {
++ dc = seldc;
++ drawtext(m->sel->name, col, True);
++ drawsquare(m->sel->isfixed, m->sel->isfloating, True, col);
++ }
++
+ XCopyArea(dpy, dc.drawable, m->barwin, dc.gc, 0, 0, m->ww, bh, 0, 0);
+ XSync(dpy, False);
+ }
+_AT_@ -709,6 +757,15 @@
+
+ for(m = mons; m; m = m->next)
+ drawbar(m);
++}
++
++void
++drawvline(unsigned long col[ColLast]) {
++ XGCValues gcv;
++
++ gcv.foreground = col[ColFG];
++ XChangeGC(dpy, dc.gc, GCForeground, &gcv);
++ XDrawLine(dpy, dc.drawable, dc.gc, dc.x, dc.y, dc.x, dc.y + (dc.font.ascent + dc.font.descent + 2));
+ }
+
+ void
+_AT_@ -1235,8 +1292,7 @@
+ }
+ if(ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) {
+ updatetitle(c);
+- if(c == selmon->sel)
+- drawbars();
++ drawbars();
+ }
+ }
+ }
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/historical/flextile-5.8.1.diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/dwm.suckless.org/patches/historical/flextile-5.8.1.diff Mon Sep 12 12:35:44 2011 +0200
_AT_@ -0,0 +1,418 @@
+diff -up ../dwm-5.8.1-0/config.def.h ./config.def.h
+--- ../dwm-5.8.1-0/config.def.h 2010-05-29 13:49:12.000000000 +0200
++++ ./config.def.h 2010-05-31 15:18:43.686311000 +0200
+_AT_@ -25,6 +25,11 @@ static const Rule rules[] = {
+ /* layout(s) */
+ static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
+ static const Bool resizehints = True; /* True means respect size hints in tiled resizals */
++static const int layoutaxis[] = {
++ 1, /* layout axis: 1 = x, 2 = y; negative values mirror the layout, setting the master area to the right / bottom instead of left / top */
++ 2, /* master axis: 1 = x (from left to right), 2 = y (from top to bottom), 3 = z (monocle) */
++ 2, /* stack axis: 1 = x (from left to right), 2 = y (from top to bottom), 3 = z (monocle) */
++};
+
+ static const Layout layouts[] = {
+ /* symbol arrange function */
+_AT_@ -81,6 +86,12 @@ static Key keys[] = {
+ TAGKEYS( XK_8, 7)
+ TAGKEYS( XK_9, 8)
+ { MODKEY|ShiftMask, XK_q, quit, {0} },
++ { MODKEY|ControlMask, XK_t, rotatelayoutaxis, {.i = 0} }, /* 0 = layout axis */
++ { MODKEY|ControlMask, XK_Tab, rotatelayoutaxis, {.i = 1} }, /* 1 = master axis */
++ { MODKEY|ControlMask|ShiftMask, XK_Tab, rotatelayoutaxis, {.i = 2} }, /* 2 = stack axis */
++ { MODKEY|ControlMask, XK_Return, mirrorlayout, {0} },
++ { MODKEY|ControlMask, XK_j, shiftmastersplit, {.i = -1} }, /* reduce the number of tiled clients in the master area */
++ { MODKEY|ControlMask, XK_k, shiftmastersplit, {.i = +1} }, /* increase the number of tiled clients in the master area */
+ };
+
+ /* button definitions */
+diff -up ../dwm-5.8.1-0/dwm.c ./dwm.c
+--- ../dwm-5.8.1-0/dwm.c 2010-05-29 13:49:12.000000000 +0200
++++ ./dwm.c 2010-05-31 16:02:14.553316000 +0200
+_AT_@ -120,26 +120,6 @@ typedef struct {
+ void (*arrange)(Monitor *);
+ } Layout;
+
+-struct Monitor {
+- char ltsymbol[16];
+- float mfact;
+- int num;
+- int by; /* bar geometry */
+- int mx, my, mw, mh; /* screen size */
+- int wx, wy, ww, wh; /* window area */
+- unsigned int seltags;
+- unsigned int sellt;
+- unsigned int tagset[2];
+- Bool showbar;
+- Bool topbar;
+- Client *clients;
+- Client *sel;
+- Client *stack;
+- Monitor *next;
+- Window barwin;
+- const Layout *lt[2];
+-};
+-
+ typedef struct {
+ const char *class;
+ const char *instance;
+_AT_@ -193,6 +173,7 @@ static void killclient(const Arg *arg);
+ static void manage(Window w, XWindowAttributes *wa);
+ static void mappingnotify(XEvent *e);
+ static void maprequest(XEvent *e);
++static void mirrorlayout(const Arg *arg);
+ static void monocle(Monitor *m);
+ static void movemouse(const Arg *arg);
+ static Client *nexttiled(Client *c);
+_AT_@ -202,6 +183,7 @@ static void quit(const Arg *arg);
+ static void resize(Client *c, int x, int y, int w, int h, Bool interact);
+ static void resizemouse(const Arg *arg);
+ static void restack(Monitor *m);
++static void rotatelayoutaxis(const Arg *arg);
+ static void run(void);
+ static void scan(void);
+ static void sendmon(Client *c, Monitor *m);
+_AT_@ -209,6 +191,7 @@ static void setclientstate(Client *c, lo
+ static void setlayout(const Arg *arg);
+ static void setmfact(const Arg *arg);
+ static void setup(void);
++static void shiftmastersplit(const Arg *arg);
+ static void showhide(Client *c);
+ static void sigchld(int unused);
+ static void spawn(const Arg *arg);
+_AT_@ -275,6 +258,34 @@ static Window root;
+
+ /* compile-time check if all tags fit into an unsigned int bit array. */
+ struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
++struct Monitor {
++ char ltsymbol[16];
++ float mfact;
++ double mfacts[LENGTH(tags) + 1];
++ int ltaxis[3];
++ int ltaxes[LENGTH(tags) + 1][3];
++ int num;
++ int curtag;
++ int prevtag;
++ int by; /* bar geometry */
++ int mx, my, mw, mh; /* screen size */
++ int wx, wy, ww, wh; /* window area */
++ unsigned int msplit;
++ unsigned int msplits[LENGTH(tags) + 1];
++ unsigned int seltags;
++ unsigned int sellt;
++ unsigned int tagset[2];
++ Bool showbar;
++ Bool showbars[LENGTH(tags) + 1];
++ Bool topbar;
++ Client *clients;
++ Client *sel;
++ Client *stack;
++ Monitor *next;
++ Window barwin;
++ const Layout *lt[2];
++ const Layout *lts[LENGTH(tags) + 1];
++};
+
+ /* function implementations */
+ void
+_AT_@ -616,6 +627,10 @@ createmon(void) {
+ m->lt[0] = &layouts[0];
+ m->lt[1] = &layouts[1 % LENGTH(layouts)];
+ strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol);
++ m->ltaxis[0] = layoutaxis[0];
++ m->ltaxis[1] = layoutaxis[1];
++ m->ltaxis[2] = layoutaxis[2];
++ m->msplit = 1;
+ return m;
+ }
+
+_AT_@ -1173,6 +1188,15 @@ maprequest(XEvent *e) {
+ }
+
+ void
++mirrorlayout(const Arg *arg) {
++ if(!selmon->lt[selmon->sellt]->arrange)
++ return;
++ selmon->ltaxis[0] *= -1;
++ selmon->ltaxes[selmon->curtag][0] = selmon->ltaxis[0];
++ arrange(selmon);
++}
++
++void
+ monocle(Monitor *m) {
+ unsigned int n = 0;
+ Client *c;
+_AT_@ -1387,6 +1411,21 @@ restack(Monitor *m) {
+ }
+
+ void
++rotatelayoutaxis(const Arg *arg) {
++ if(!selmon->lt[selmon->sellt]->arrange)
++ return;
++ if(arg->i == 0) {
++ if(selmon->ltaxis[0] > 0)
++ selmon->ltaxis[0] = selmon->ltaxis[0] + 1 > 2 ? 1 : selmon->ltaxis[0] + 1;
++ else
++ selmon->ltaxis[0] = selmon->ltaxis[0] - 1 < -2 ? -1 : selmon->ltaxis[0] - 1;
++ } else
++ selmon->ltaxis[arg->i] = selmon->ltaxis[arg->i] + 1 > 3 ? 1 : selmon->ltaxis[arg->i] + 1;
++ selmon->ltaxes[selmon->curtag][arg->i] = selmon->ltaxis[arg->i];
++ arrange(selmon);
++}
++
++void
+ run(void) {
+ XEvent ev;
+ /* main event loop */
+_AT_@ -1451,7 +1490,7 @@ setlayout(const Arg *arg) {
+ if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
+ selmon->sellt ^= 1;
+ if(arg && arg->v)
+- selmon->lt[selmon->sellt] = (Layout *)arg->v;
++ selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag] = (Layout *)arg->v;
+ strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol);
+ if(selmon->sel)
+ arrange(selmon);
+_AT_@ -1469,14 +1508,16 @@ setmfact(const Arg *arg) {
+ f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
+ if(f < 0.1 || f > 0.9)
+ return;
+- selmon->mfact = f;
++ selmon->mfact = selmon->mfacts[selmon->curtag] = f;
+ arrange(selmon);
+ }
+
+ void
+ setup(void) {
+ XSetWindowAttributes wa;
+-
++ Monitor *m;
++ unsigned int i;
++
+ /* clean up any zombies immediately */
+ sigchld(0);
+
+_AT_@ -1511,7 +1552,19 @@ setup(void) {
+ XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
+ if(!dc.font.set)
+ XSetFont(dpy, dc.gc, dc.font.xfont->fid);
+- /* init bars */
++ /* init tags, bars, layouts, axes, msplits and mfacts */
++ for(m = mons; m; m = m->next) {
++ m->curtag = m->prevtag = 1;
++ for(i=0; i < LENGTH(tags) + 1; i++) {
++ m->showbars[i] = m->showbar;
++ m->lts[i] = &layouts[0];
++ m->mfacts[i] = m->mfact;
++ m->ltaxes[i][0] = m->ltaxis[0];
++ m->ltaxes[i][1] = m->ltaxis[1];
++ m->ltaxes[i][2] = m->ltaxis[2];
++ m->msplits[i] = m->msplit;
++ }
++ }
+ updatebars();
+ updatestatus();
+ /* EWMH support per view */
+_AT_@ -1528,6 +1581,19 @@ setup(void) {
+ }
+
+ void
++shiftmastersplit(const Arg *arg) {
++ unsigned int n;
++ Client *c;
++
++ for(n = 0, c = nexttiled(selmon->clients); c; c = nexttiled(c->next), n++);
++ if(!arg || !selmon->lt[selmon->sellt]->arrange || selmon->msplit + arg->i < 1 || selmon->msplit + arg->i > n)
++ return;
++ selmon->msplit += arg->i;
++ selmon->msplits[selmon->curtag] = selmon->msplit;
++ arrange(selmon);
++}
++
++void
+ showhide(Client *c) {
+ if(!c)
+ return;
+_AT_@ -1592,37 +1658,95 @@ textnw(const char *text, unsigned int le
+
+ void
+ tile(Monitor *m) {
+- int x, y, h, w, mw;
+- unsigned int i, n;
++ char sym1 = 61, sym2 = 93, sym3 = 61, sym;
++ int x1 = m->wx, y1 = m->wy, h1 = m->wh, w1 = m->ww, X1 = x1 + w1, Y1 = y1 + h1;
++ int x2 = m->wx, y2 = m->wy, h2 = m->wh, w2 = m->ww, X2 = x2 + w2, Y2 = y2 + h2;
++ unsigned int i, n, n1, n2;
+ Client *c;
+
+ for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
++ if(m->msplit > n)
++ m->msplit = (n == 0) ? 1 : n;
++ if(n == 0 && m->ltaxis[1] != 3)
++ return;
++ /* layout symbol */
++ if(abs(m->ltaxis[0]) == m->ltaxis[1]) /* explicitly: ((abs(m->ltaxis[0]) == 1 && m->ltaxis[1] == 1) || (abs(m->ltaxis[0]) == 2 && m->ltaxis[1] == 2)) */
++ sym1 = 124;
++ if(abs(m->ltaxis[0]) == m->ltaxis[2])
++ sym3 = 124;
++ if(m->ltaxis[1] == 3)
++ sym1 = (n == 0) ? 0 : m->msplit;
++ if(m->ltaxis[2] == 3)
++ sym3 = (n == 0) ? 0 : n - m->msplit;
++ if(m->ltaxis[0] < 0) {
++ sym = sym1;
++ sym1 = sym3;
++ sym2 = 91;
++ sym3 = sym;
++ }
++ if(m->msplit == 1) {
++ if(m->ltaxis[0] > 0)
++ sym1 = 91;
++ else
++ sym3 = 93;
++ }
++ if(m->msplit > 1 && m->ltaxis[1] == 3 && m->ltaxis[2] == 3)
++ snprintf(m->ltsymbol, sizeof m->ltsymbol, "%d%c%d", sym1, sym2, sym3);
++ else if((m->msplit > 1 && m->ltaxis[1] == 3 && m->ltaxis[0] > 0) || (m->ltaxis[2] == 3 && m->ltaxis[0] < 0))
++ snprintf(m->ltsymbol, sizeof m->ltsymbol, "%d%c%c", sym1, sym2, sym3);
++ else if((m->ltaxis[2] == 3 && m->ltaxis[0] > 0) || (m->msplit > 1 && m->ltaxis[1] == 3 && m->ltaxis[0] < 0))
++ snprintf(m->ltsymbol, sizeof m->ltsymbol, "%c%c%d", sym1, sym2, sym3);
++ else
++ snprintf(m->ltsymbol, sizeof m->ltsymbol, "%c%c%c", sym1, sym2, sym3);
+ if(n == 0)
+ return;
++ /* master and stack area */
++ if(abs(m->ltaxis[0]) == 1 && n > m->msplit) {
++ w1 *= m->mfact;
++ w2 -= w1;
++ x1 += (m->ltaxis[0] < 0) ? w2 : 0;
++ x2 += (m->ltaxis[0] < 0) ? 0 : w1;
++ X1 = x1 + w1;
++ X2 = x2 + w2;
++ } else if(abs(m->ltaxis[0]) == 2 && n > m->msplit) {
++ h1 *= m->mfact;
++ h2 -= h1;
++ y1 += (m->ltaxis[0] < 0) ? h2 : 0;
++ y2 += (m->ltaxis[0] < 0) ? 0 : h1;
++ Y1 = y1 + h1;
++ Y2 = y2 + h2;
++ }
+ /* master */
+- c = nexttiled(m->clients);
+- mw = m->mfact * m->ww;
+- resize(c, m->wx, m->wy, (n == 1 ? m->ww : mw) - 2 * c->bw, m->wh - 2 * c->bw, False);
+- if(--n == 0)
+- return;
+- /* tile stack */
+- x = (m->wx + mw > c->x + c->w) ? c->x + c->w + 2 * c->bw : m->wx + mw;
+- y = m->wy;
+- w = (m->wx + mw > c->x + c->w) ? m->wx + m->ww - x : m->ww - mw;
+- h = m->wh / n;
+- if(h < bh)
+- h = m->wh;
+- for(i = 0, c = nexttiled(c->next); c; c = nexttiled(c->next), i++) {
+- resize(c, x, y, w - 2 * c->bw, /* remainder */ ((i + 1 == n)
+- ? m->wy + m->wh - y - 2 * c->bw : h - 2 * c->bw), False);
+- if(h != m->wh)
+- y = c->y + HEIGHT(c);
++ n1 = (m->ltaxis[1] != 1 || w1 / m->msplit < bh) ? 1 : m->msplit;
++ n2 = (m->ltaxis[1] != 2 || h1 / m->msplit < bh) ? 1 : m->msplit;
++ for(i = 0, c = nexttiled(m->clients); i < m->msplit; c = nexttiled(c->next), i++) {
++ resize(c, x1, y1,
++ (m->ltaxis[1] == 1 && i + 1 == m->msplit) ? X1 - x1 - 2 * c->bw : w1 / n1 - 2 * c->bw,
++ (m->ltaxis[1] == 2 && i + 1 == m->msplit) ? Y1 - y1 - 2 * c->bw : h1 / n2 - 2 * c->bw, False);
++ if(n1 > 1)
++ x1 = c->x + WIDTH(c);
++ if(n2 > 1)
++ y1 = c->y + HEIGHT(c);
++ }
++ /* stack */
++ if(n > m->msplit) {
++ n1 = (m->ltaxis[2] != 1 || w2 / (n - m->msplit) < bh) ? 1 : n - m->msplit;
++ n2 = (m->ltaxis[2] != 2 || h2 / (n - m->msplit) < bh) ? 1 : n - m->msplit;
++ for(i = 0; c; c = nexttiled(c->next), i++) {
++ resize(c, x2, y2,
++ (m->ltaxis[2] == 1 && i + 1 == n - m->msplit) ? X2 - x2 - 2 * c->bw : w2 / n1 - 2 * c->bw,
++ (m->ltaxis[2] == 2 && i + 1 == n - m->msplit) ? Y2 - y2 - 2 * c->bw : h2 / n2 - 2 * c->bw, False);
++ if(n1 > 1)
++ x2 = c->x + WIDTH(c);
++ if(n2 > 1)
++ y2 = c->y + HEIGHT(c);
++ }
+ }
+ }
+
+ void
+ togglebar(const Arg *arg) {
+- selmon->showbar = !selmon->showbar;
++ selmon->showbar = selmon->showbars[selmon->curtag] = !selmon->showbar;
+ updatebarpos(selmon);
+ XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
+ arrange(selmon);
+_AT_@ -1642,12 +1766,31 @@ togglefloating(const Arg *arg) {
+ void
+ toggletag(const Arg *arg) {
+ unsigned int newtags;
++ unsigned int i;
+
+ if(!selmon->sel)
+ return;
+ newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
+ if(newtags) {
+ selmon->sel->tags = newtags;
++ if(newtags == ~0) {
++ selmon->prevtag = selmon->curtag;
++ selmon->curtag = 0;
++ }
++ if(!(newtags & 1 << (selmon->curtag - 1))) {
++ selmon->prevtag = selmon->curtag;
++ for (i=0; !(newtags & 1 << i); i++);
++ selmon->curtag = i + 1;
++ }
++ selmon->sel->tags = newtags;
++ selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag];
++ selmon->mfact = selmon->mfacts[selmon->curtag];
++ if (selmon->showbar != selmon->showbars[selmon->curtag])
++ togglebar(NULL);
++ selmon->ltaxis[0] = selmon->ltaxes[selmon->curtag][0];
++ selmon->ltaxis[1] = selmon->ltaxes[selmon->curtag][1];
++ selmon->ltaxis[2] = selmon->ltaxes[selmon->curtag][2];
++ selmon->msplit = selmon->msplits[selmon->curtag];
+ arrange(selmon);
+ }
+ }
+_AT_@ -1914,11 +2057,33 @@ updatewmhints(Client *c) {
+
+ void
+ view(const Arg *arg) {
++ unsigned int i;
++
+ if((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
+ return;
+ selmon->seltags ^= 1; /* toggle sel tagset */
+- if(arg->ui & TAGMASK)
++ if(arg->ui & TAGMASK) {
+ selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
++ selmon->prevtag = selmon->curtag;
++ if(arg->ui == ~0)
++ selmon->curtag = 0;
++ else {
++ for (i=0; !(arg->ui & 1 << i); i++);
++ selmon->curtag = i + 1;
++ }
++ } else {
++ selmon->prevtag = selmon->curtag ^ selmon->prevtag;
++ selmon->curtag ^= selmon->prevtag;
++ selmon->prevtag = selmon->curtag ^ selmon->prevtag;
++ }
++ selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag];
++ selmon->mfact = selmon->mfacts[selmon->curtag];
++ if(selmon->showbar != selmon->showbars[selmon->curtag])
++ togglebar(NULL);
++ selmon->ltaxis[0] = selmon->ltaxes[selmon->curtag][0];
++ selmon->ltaxis[1] = selmon->ltaxes[selmon->curtag][1];
++ selmon->ltaxis[2] = selmon->ltaxes[selmon->curtag][2];
++ selmon->msplit = selmon->msplits[selmon->curtag];
+ arrange(selmon);
+ }
+
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/historical/gapless_grid.md
--- a/dwm.suckless.org/patches/historical/gapless_grid.md Mon Sep 12 10:45:45 2011 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
_AT_@ -1,34 +0,0 @@
-# GAPLESS GRID LAYOUT #
-
-## Description ##
-
-This patch is similar to [gridmode][1] (in fact it is an altered version) in that it provides a layout for dwm, which arranges the windows in a grid. Though instead of using a regular grid, which in case leaves empty cells (e. g. with 3 windows there are 4 cells, one cell is empty), it uses the same number of columns, but adjusts the number of rows (at first x rows and (x+1) rows, when needed) leaving no empty cells.
-
-
-## Usage ##
-
-Download the patch and apply it according to the [general instructions](.). The patch will make the following changes:
-
- - gaplessgrid.c: adding the file
- - config.def.h: adding the include-line for 'gaplessgrid.c'
- - config.def.h: adding the layout '"###", gaplessgrid'
-
-Comment: There may be problems applying the patch, if another layout has been added before.
-
-
-## Configuration ##
-
- * Transfer the changes made by the patch in 'config.def.h' to 'config.h', if needed.
- * Add a key definition like '{ MODKEY, XK_g, setlayout, {.v = &layouts[3]} },'.
-
-
-## Download ##
-
- * [dwm-5.2-gaplessgrid.diff][2] (1.9k) (20081020)
- * [dwm-r1437-gaplessgrid.diff][3] (1.9k) (20090704)
-
-
-[1]: /dwm/patches/gridmode.html
-[2]: http://dwm.suckless.org/patches/dwm-5.2-gaplessgrid.diff
-[3]: http://dwm.suckless.org/patches/dwm-r1437-gaplessgrid.diff
-
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/historical/index.md
--- a/dwm.suckless.org/patches/historical/index.md Mon Sep 12 10:45:45 2011 +0100
+++ b/dwm.suckless.org/patches/historical/index.md Mon Sep 12 12:35:44 2011 +0200
_AT_@ -1,10 +1,17 @@
-This section contains patches for old versions of dwm.
+This section contains patches for old versions of dwm, which have not yet been
+ported to less newer versions.
old offsite patches
-------------------
-* [dwm-meillo](http://prog.marmaro.de/dwm-meillo/)
+* [dwm-meillo](http://marmaro.de/prog/dwm-meillo/)
* [dwm-mitch](http://www.cgarbs.de/dwm-mitch.en.html)
* [fnegronidwm](http://sharesource.org/project/fnegronidwm/wiki/)
+* [dwm-gtx](http://s01.de/~tox/hg/dwm/) - Gottox' old dwm fork from earlier days
* [patches written by InfinityX](http://flash.metawaredesign.co.uk/4/)
* [display date](http://henry.precheur.org/2009/5/20/dwm%2C_display_date_patch_updated.html)
* [DWM-Hacked](http://sourceforge.net/projects/dwm-hacked/)
+
+more unofficial patches
+-----------------------
+
+* Take a look at [bitbucket](https://bitbucket.org/repo/all/followers?name=dwm) to see who else has forked dwm and abandoned their fork, so it fits in this historical section!
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/pertag.md
--- a/dwm.suckless.org/patches/pertag.md Mon Sep 12 10:45:45 2011 +0100
+++ b/dwm.suckless.org/patches/pertag.md Mon Sep 12 12:35:44 2011 +0200
_AT_@ -34,7 +34,7 @@
[5]: http://v4hn.de/patches/dwm-5.1-pertag.diff
[6]: historical/dwm-5.2-pertag.diff
[7]: historical/dwm-5.4-pertag.diff
-[8]: dwm-pertag-5.6.1.diff
-[9]: dwm-5.7.2-pertag.diff
+[8]: historical/dwm-pertag-5.6.1.diff
+[9]: historical/dwm-5.7.2-pertag.diff
[10]: dwm-5.8.2-pertag.diff
[11]: dwm-5.8.2-pertag_without_bar.diff
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/statuscolors.md
--- a/dwm.suckless.org/patches/statuscolors.md Mon Sep 12 10:45:45 2011 +0100
+++ b/dwm.suckless.org/patches/statuscolors.md Mon Sep 12 12:35:44 2011 +0200
_AT_@ -56,6 +56,6 @@
## Download ##
- * [dwm-5.7.2-statuscolors.diff](dwm-5.7.2-statuscolors.diff)
- * [dwm-5.8.2-statuscolors.diff](dwm-5.8.2-statuscolors.diff)
+ * [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)
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/uselessgap.md
--- a/dwm.suckless.org/patches/uselessgap.md Mon Sep 12 10:45:45 2011 +0100
+++ b/dwm.suckless.org/patches/uselessgap.md Mon Sep 12 12:35:44 2011 +0200
_AT_@ -33,15 +33,15 @@
## Download
- * [dwm-5.9-uselessgap.diff](dwm-5.9-uselessgap.diff) (0.7K) (20110107 updated. Thanks Jordan for your bug report)
+ * [dwm-5.9-uselessgap.diff](dwm-5.9-uselessgap.diff) (1.8k) (20110107 updated. Thanks Jordan for your bug report)
Update to use the new resizeclient() function instead of resize()
- * [dwm-uselessgap-5.8.diff](dwm-uselessgap-5.8.diff) (0.7K) (20100225 updated. Thanks Guillaume for your bug report)
+ * [dwm-uselessgap-5.8.diff](historical/dwm-uselessgap-5.8.diff) (1.7k) (20100225 updated. Thanks Guillaume for your bug report)
Fix floating clients bug and remove all borders in monocle mode.
- * [dwm-gap-5.7.2.diff](dwm-gap-5.7.2.diff) (0.7K) (20091215)
+ * [dwm-gap-5.7.2.diff](historical/dwm-gap-5.7.2.diff) (0.7k) (20091215)
## Author
diff -r 61b77b61c3fb -r 4307e8502725 dwm.suckless.org/patches/warp.md
--- a/dwm.suckless.org/patches/warp.md Mon Sep 12 10:45:45 2011 +0100
+++ b/dwm.suckless.org/patches/warp.md Mon Sep 12 12:35:44 2011 +0200
_AT_@ -21,4 +21,4 @@
Contributor
-----------
-* Moritz Wilhelmy (n0nsense) `<`moritz plus dwm at wzff dot de`>`
+* Moritz Wilhelmy (n0nsense) `<`moritz plus dwm at wzff dot de`>` - did the port to newer dwm
Received on Mon Sep 12 2011 - 12:33:34 CEST
This archive was generated by hypermail 2.3.0 : Thu Sep 13 2012 - 19:31:50 CEST