-- - 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 dwmReceived 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