# HG changeset patch # User arg@10ksloc.org # Date 1154599946 -7200 # Node ID e848966a1ac626b1b4152cfa2351ec60e01b23fc # Parent e890cee887d1e6d07e56e1ce4c11ea520efbb58a removed TLast tag enum, now tags is simple defined as char *[] array, the rest is calculated correctly, rules take an int array for the tags diff -r e890cee887d1 -r e848966a1ac6 client.c --- a/client.c Thu Aug 03 11:38:26 2006 +0200 +++ b/client.c Thu Aug 03 12:12:26 2006 +0200 @@ -16,7 +16,7 @@ int i; c->tw = 0; - for(i = 0; i < TLast; i++) + for(i = 0; i < ntags; i++) if(c->tags[i]) c->tw += textw(tags[i]); c->tw += textw(c->name); @@ -211,6 +211,7 @@ XSetWindowAttributes twa; c = emallocz(sizeof(Client)); + c->tags = emallocz(ntags * sizeof(Bool)); c->win = w; c->x = c->tx = wa->x; c->y = c->ty = wa->y; @@ -429,6 +430,7 @@ if(!sel) sel = clients; } + free(c->tags); free(c); XSync(dpy, False); diff -r e890cee887d1 -r e848966a1ac6 config.arg.h --- a/config.arg.h Thu Aug 03 11:38:26 2006 +0200 +++ b/config.arg.h Thu Aug 03 12:12:26 2006 +0200 @@ -3,18 +3,11 @@ * See LICENSE file for license details. */ -enum { Tfnord, Tdev, Tnet, Twork, Tmisc, TLast }; #define TAGS \ -const char *tags[TLast] = { \ - [Tfnord] = "fnord", \ - [Tdev] = "dev", \ - [Tnet] = "net", \ - [Twork] = "work", \ - [Tmisc] = "misc", \ -}; +const char *tags[] = { "fnord", "dev", "net", "work", "misc", NULL }; #define DEFMODE dotile /* dofloat */ -#define DEFTAG Tdev +#define DEFTAG 1 /* index */ #define FONT "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*" #define BGCOLOR "#0a2c2d" #define FGCOLOR "#ddeeee" @@ -33,11 +26,11 @@ const char *xlock[] = { "xlock", NULL }; \ static Key key[] = { \ /* modifier key function arguments */ \ - { MODKEY, XK_0, view, { .i = Tfnord } }, \ - { MODKEY, XK_1, view, { .i = Tdev } }, \ - { MODKEY, XK_2, view, { .i = Tnet } }, \ - { MODKEY, XK_3, view, { .i = Twork } }, \ - { MODKEY, XK_4, view, { .i = Tmisc} }, \ + { MODKEY, XK_0, view, { .i = 0 } }, \ + { MODKEY, XK_1, view, { .i = 1 } }, \ + { MODKEY, XK_2, view, { .i = 2 } }, \ + { MODKEY, XK_3, view, { .i = 3 } }, \ + { MODKEY, XK_4, view, { .i = 4 } }, \ { MODKEY, XK_h, viewprev, { 0 } }, \ { MODKEY, XK_j, focusnext, { 0 } }, \ { MODKEY, XK_k, focusprev, { 0 } }, \ @@ -45,16 +38,16 @@ { MODKEY, XK_m, togglemax, { 0 } }, \ { MODKEY, XK_space, togglemode, { 0 } }, \ { MODKEY, XK_Return, zoom, { 0 } }, \ - { MODKEY|ControlMask, XK_0, appendtag, { .i = Tfnord } }, \ - { MODKEY|ControlMask, XK_1, appendtag, { .i = Tdev } }, \ - { MODKEY|ControlMask, XK_2, appendtag, { .i = Tnet } }, \ - { MODKEY|ControlMask, XK_3, appendtag, { .i = Twork } }, \ - { MODKEY|ControlMask, XK_4, appendtag, { .i = Tmisc } }, \ - { MODKEY|ShiftMask, XK_0, replacetag, { .i = Tfnord } }, \ - { MODKEY|ShiftMask, XK_1, replacetag, { .i = Tdev } }, \ - { MODKEY|ShiftMask, XK_2, replacetag, { .i = Tnet } }, \ - { MODKEY|ShiftMask, XK_3, replacetag, { .i = Twork } }, \ - { MODKEY|ShiftMask, XK_4, replacetag, { .i = Tmisc } }, \ + { MODKEY|ControlMask, XK_0, appendtag, { .i = 0 } }, \ + { MODKEY|ControlMask, XK_1, appendtag, { .i = 1 } }, \ + { MODKEY|ControlMask, XK_2, appendtag, { .i = 2 } }, \ + { MODKEY|ControlMask, XK_3, appendtag, { .i = 3 } }, \ + { MODKEY|ControlMask, XK_4, appendtag, { .i = 4 } }, \ + { MODKEY|ShiftMask, XK_0, replacetag, { .i = 0 } }, \ + { MODKEY|ShiftMask, XK_1, replacetag, { .i = 1 } }, \ + { MODKEY|ShiftMask, XK_2, replacetag, { .i = 2 } }, \ + { MODKEY|ShiftMask, XK_3, replacetag, { .i = 3 } }, \ + { MODKEY|ShiftMask, XK_4, replacetag, { .i = 5 } }, \ { MODKEY|ShiftMask, XK_c, killclient, { 0 } }, \ { MODKEY|ShiftMask, XK_q, quit, { 0 } }, \ { MODKEY|ShiftMask, XK_Return, spawn, { .argv = term } }, \ @@ -64,10 +57,11 @@ }; #define RULES \ + const unsigned int firefox[] = { 2 }; \ static Rule rule[] = { \ - /* class:instance tags isfloat */ \ - { "Firefox.*", { [Tnet] = True }, False }, \ - { "Gimp.*", { 0 }, True}, \ - { "MPlayer.*", { 0 }, True}, \ - { "Acroread.*", { 0 }, True}, \ + /* class:instance tags isfloat */ \ + { "Firefox.*", firefox, False }, \ + { "Gimp.*", NULL, True}, \ + { "MPlayer.*", NULL, True}, \ + { "Acroread.*", NULL, True}, \ }; diff -r e890cee887d1 -r e848966a1ac6 config.default.h --- a/config.default.h Thu Aug 03 11:38:26 2006 +0200 +++ b/config.default.h Thu Aug 03 12:12:26 2006 +0200 @@ -3,18 +3,11 @@ * See LICENSE file for license details. */ -enum { Tfnord, Tdev, Tnet, Twork, Tmisc, TLast }; #define TAGS \ -const char *tags[TLast] = { \ - [Tfnord] = "fnord", \ - [Tdev] = "dev", \ - [Tnet] = "net", \ - [Twork] = "work", \ - [Tmisc] = "misc", \ -}; +const char *tags[] = { "0", "1", "2", "3", "4", NULL }; #define DEFMODE dotile /* dofloat */ -#define DEFTAG Tdev +#define DEFTAG 1 /* index */ #define FONT "fixed" #define BGCOLOR "#666699" #define FGCOLOR "#eeeeee" @@ -27,11 +20,11 @@ const char *term[] = { "xterm", NULL }; \ static Key key[] = { \ /* modifier key function arguments */ \ - { MODKEY, XK_0, view, { .i = Tfnord } }, \ - { MODKEY, XK_1, view, { .i = Tdev } }, \ - { MODKEY, XK_2, view, { .i = Tnet } }, \ - { MODKEY, XK_3, view, { .i = Twork } }, \ - { MODKEY, XK_4, view, { .i = Tmisc} }, \ + { MODKEY, XK_0, view, { .i = 0 } }, \ + { MODKEY, XK_1, view, { .i = 1 } }, \ + { MODKEY, XK_2, view, { .i = 2 } }, \ + { MODKEY, XK_3, view, { .i = 3 } }, \ + { MODKEY, XK_4, view, { .i = 4 } }, \ { MODKEY, XK_h, viewprev, { 0 } }, \ { MODKEY, XK_j, focusnext, { 0 } }, \ { MODKEY, XK_k, focusprev, { 0 } }, \ @@ -39,24 +32,25 @@ { MODKEY, XK_m, togglemax, { 0 } }, \ { MODKEY, XK_space, togglemode, { 0 } }, \ { MODKEY, XK_Return, zoom, { 0 } }, \ - { MODKEY|ControlMask, XK_0, appendtag, { .i = Tfnord } }, \ - { MODKEY|ControlMask, XK_1, appendtag, { .i = Tdev } }, \ - { MODKEY|ControlMask, XK_2, appendtag, { .i = Tnet } }, \ - { MODKEY|ControlMask, XK_3, appendtag, { .i = Twork } }, \ - { MODKEY|ControlMask, XK_4, appendtag, { .i = Tmisc } }, \ - { MODKEY|ShiftMask, XK_0, replacetag, { .i = Tfnord } }, \ - { MODKEY|ShiftMask, XK_1, replacetag, { .i = Tdev } }, \ - { MODKEY|ShiftMask, XK_2, replacetag, { .i = Tnet } }, \ - { MODKEY|ShiftMask, XK_3, replacetag, { .i = Twork } }, \ - { MODKEY|ShiftMask, XK_4, replacetag, { .i = Tmisc } }, \ + { MODKEY|ControlMask, XK_0, appendtag, { .i = 0 } }, \ + { MODKEY|ControlMask, XK_1, appendtag, { .i = 1 } }, \ + { MODKEY|ControlMask, XK_2, appendtag, { .i = 2 } }, \ + { MODKEY|ControlMask, XK_3, appendtag, { .i = 3 } }, \ + { MODKEY|ControlMask, XK_4, appendtag, { .i = 4 } }, \ + { MODKEY|ShiftMask, XK_0, replacetag, { .i = 0 } }, \ + { MODKEY|ShiftMask, XK_1, replacetag, { .i = 1 } }, \ + { MODKEY|ShiftMask, XK_2, replacetag, { .i = 2 } }, \ + { MODKEY|ShiftMask, XK_3, replacetag, { .i = 3 } }, \ + { MODKEY|ShiftMask, XK_4, replacetag, { .i = 4 } }, \ { MODKEY|ShiftMask, XK_c, killclient, { 0 } }, \ { MODKEY|ShiftMask, XK_q, quit, { 0 } }, \ { MODKEY|ShiftMask, XK_Return, spawn, { .argv = term } }, \ }; #define RULES \ + const unsigned int firefox[] = { 2 }; \ static Rule rule[] = { \ - /* class:instance tags isfloat */ \ - { "Firefox.*", { [Tnet] = True }, False }, \ - { "Gimp.*", { 0 }, True}, \ + /* class:instance tags isfloat */ \ + { "Firefox.*", firefox, False }, \ + { "Gimp.*", NULL, True}, \ }; diff -r e890cee887d1 -r e848966a1ac6 draw.c --- a/draw.c Thu Aug 03 11:38:26 2006 +0200 +++ b/draw.c Thu Aug 03 12:12:26 2006 +0200 @@ -114,7 +114,7 @@ drawtext(NULL, !istile, False); dc.w = 0; - for(i = 0; i < TLast; i++) { + for(i = 0; i < ntags; i++) { dc.x += dc.w; dc.w = textw(tags[i]); if(istile) @@ -153,7 +153,7 @@ dc.x = dc.y = 0; dc.w = 0; - for(i = 0; i < TLast; i++) { + for(i = 0; i < ntags; i++) { if(c->tags[i]) { dc.x += dc.w; dc.w = textw(tags[i]); diff -r e890cee887d1 -r e848966a1ac6 dwm.h --- a/dwm.h Thu Aug 03 11:38:26 2006 +0200 +++ b/dwm.h Thu Aug 03 12:12:26 2006 +0200 @@ -60,16 +60,17 @@ unsigned int border; Bool isfloat; Bool ismax; - Bool tags[TLast]; + Bool *tags; Client *next; Client *prev; Window win; Window title; }; -extern const char *tags[TLast]; +extern const char *tags[]; extern char stext[1024]; extern int tsel, screen, sx, sy, sw, sh, bx, by, bw, bh, mw; +extern unsigned int ntags; extern void (*handler[LASTEvent])(XEvent *); extern void (*arrange)(Arg *); extern Atom wmatom[WMLast], netatom[NetLast]; diff -r e890cee887d1 -r e848966a1ac6 event.c --- a/event.c Thu Aug 03 11:38:26 2006 +0200 +++ b/event.c Thu Aug 03 12:12:26 2006 +0200 @@ -105,7 +105,7 @@ switch(ev->button) { default: x = 0; - for(a.i = 0; a.i < TLast; a.i++) { + for(a.i = 0; a.i < ntags; a.i++) { x += textw(tags[a.i]); if(ev->x < x) { view(&a); diff -r e890cee887d1 -r e848966a1ac6 main.c --- a/main.c Thu Aug 03 11:38:26 2006 +0200 +++ b/main.c Thu Aug 03 12:12:26 2006 +0200 @@ -85,6 +85,7 @@ char stext[1024]; int tsel = DEFTAG; int screen, sx, sy, sw, sh, bx, by, bw, bh, mw; +unsigned int ntags; Atom wmatom[WMLast], netatom[NetLast]; Bool running = True; Bool issel = True; @@ -210,6 +211,8 @@ grabkeys(); + for(ntags = 0; tags[ntags]; ntags++); + /* style */ dc.bg = getcolor(BGCOLOR); dc.fg = getcolor(FGCOLOR); diff -r e890cee887d1 -r e848966a1ac6 tag.c --- a/tag.c Thu Aug 03 11:38:26 2006 +0200 +++ b/tag.c Thu Aug 03 12:12:26 2006 +0200 @@ -13,7 +13,7 @@ typedef struct { const char *pattern; - Bool tags[TLast]; + const unsigned int *tags; Bool isfloat; } Rule; @@ -145,7 +145,7 @@ if(!sel) return; - for(i = 0; i < TLast; i++) + for(i = 0; i < ntags; i++) sel->tags[i] = False; appendtag(arg); } @@ -155,7 +155,7 @@ { char classinst[256]; static unsigned int len = sizeof(rule) / sizeof(rule[0]); - unsigned int i, j; + unsigned int i, j, n; regex_t regex; regmatch_t tmp; Bool matched = False; @@ -168,10 +168,11 @@ for(i = 0; !matched && i < len; i++) { if(!regcomp(®ex, rule[i].pattern, 0)) { if(!regexec(®ex, classinst, 1, &tmp, 0)) { - for(j = 0; j < TLast; j++) { - if((c->tags[j] = rule[i].tags[j])) - matched = True; - } + n = rule[i].tags ? + sizeof(rule[i].tags) / sizeof(rule[i].tags[0]) : 0; + matched = n != 0; + for(j = 0; j < n; j++) + c->tags[rule[i].tags[j]] = True; c->isfloat = rule[i].isfloat; } regfree(®ex); @@ -204,13 +205,13 @@ void viewnext(Arg *arg) { - arg->i = (tsel < TLast-1) ? tsel+1 : 0; + arg->i = (tsel < ntags-1) ? tsel+1 : 0; view(arg); } void viewprev(Arg *arg) { - arg->i = (tsel > 0) ? tsel-1 : TLast-1; + arg->i = (tsel > 0) ? tsel-1 : ntags-1; view(arg); }