On Mon, Oct 22, 2007 at 09:28:13AM +0200, Anselm R. Garbe wrote:
> Well, just provide me a patch which includes all changes. I will
> think about applying this.

Ok.
diff -r cdd1db1c525b config.def.h
--- a/config.def.h      Fri Oct 19 09:56:51 2007 +0200
+++ b/config.def.h      Mon Oct 22 10:18:45 2007 +0200
@@ -13,6 +13,7 @@
 
 /* tagging */
 const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "www" };
+#define ntags (sizeof tags / sizeof tags[0])
 Rule rules[] = {
        /* class:instance:title regex   tags regex      isfloating */
        { "Firefox",                    "www",          False },
@@ -52,43 +53,43 @@ Key keys[] = { \
        { MODKEY,                       XK_Tab,         viewprevtag,    NULL }, 
\
        { MODKEY|ShiftMask,             XK_space,       togglefloating, NULL }, 
\
        { MODKEY|ShiftMask,             XK_c,           killclient,     NULL }, 
\
-       { MODKEY,                       XK_0,           view,           NULL }, 
\
-       { MODKEY,                       XK_1,           view,           tags[0] 
}, \
-       { MODKEY,                       XK_2,           view,           tags[1] 
}, \
-       { MODKEY,                       XK_3,           view,           tags[2] 
}, \
-       { MODKEY,                       XK_4,           view,           tags[3] 
}, \
-       { MODKEY,                       XK_5,           view,           tags[4] 
}, \
-       { MODKEY,                       XK_6,           view,           tags[5] 
}, \
-       { MODKEY,                       XK_7,           view,           tags[6] 
}, \
-       { MODKEY,                       XK_8,           view,           tags[7] 
}, \
-       { MODKEY,                       XK_9,           view,           tags[8] 
}, \
-       { MODKEY|ControlMask,           XK_1,           toggleview,     tags[0] 
}, \
-       { MODKEY|ControlMask,           XK_2,           toggleview,     tags[1] 
}, \
-       { MODKEY|ControlMask,           XK_3,           toggleview,     tags[2] 
}, \
-       { MODKEY|ControlMask,           XK_4,           toggleview,     tags[3] 
}, \
-       { MODKEY|ControlMask,           XK_5,           toggleview,     tags[4] 
}, \
-       { MODKEY|ControlMask,           XK_6,           toggleview,     tags[5] 
}, \
-       { MODKEY|ControlMask,           XK_7,           toggleview,     tags[6] 
}, \
-       { MODKEY|ControlMask,           XK_8,           toggleview,     tags[7] 
}, \
-       { MODKEY|ControlMask,           XK_9,           toggleview,     tags[8] 
}, \
-       { MODKEY|ShiftMask,             XK_0,           tag,            NULL }, 
\
-       { MODKEY|ShiftMask,             XK_1,           tag,            tags[0] 
}, \
-       { MODKEY|ShiftMask,             XK_2,           tag,            tags[1] 
}, \
-       { MODKEY|ShiftMask,             XK_3,           tag,            tags[2] 
}, \
-       { MODKEY|ShiftMask,             XK_4,           tag,            tags[3] 
}, \
-       { MODKEY|ShiftMask,             XK_5,           tag,            tags[4] 
}, \
-       { MODKEY|ShiftMask,             XK_6,           tag,            tags[5] 
}, \
-       { MODKEY|ShiftMask,             XK_7,           tag,            tags[6] 
}, \
-       { MODKEY|ShiftMask,             XK_8,           tag,            tags[7] 
}, \
-       { MODKEY|ShiftMask,             XK_9,           tag,            tags[8] 
}, \
-       { MODKEY|ControlMask|ShiftMask, XK_1,           toggletag,      tags[0] 
}, \
-       { MODKEY|ControlMask|ShiftMask, XK_2,           toggletag,      tags[1] 
}, \
-       { MODKEY|ControlMask|ShiftMask, XK_3,           toggletag,      tags[2] 
}, \
-       { MODKEY|ControlMask|ShiftMask, XK_4,           toggletag,      tags[3] 
}, \
-       { MODKEY|ControlMask|ShiftMask, XK_5,           toggletag,      tags[4] 
}, \
-       { MODKEY|ControlMask|ShiftMask, XK_6,           toggletag,      tags[5] 
}, \
-       { MODKEY|ControlMask|ShiftMask, XK_7,           toggletag,      tags[6] 
}, \
-       { MODKEY|ControlMask|ShiftMask, XK_8,           toggletag,      tags[7] 
}, \
-       { MODKEY|ControlMask|ShiftMask, XK_9,           toggletag,      tags[8] 
}, \
+       { MODKEY,                       XK_0,           view,           
index_to_tag(ntags) }, \
+       { MODKEY,                       XK_1,           view,           
index_to_tag(0) }, \
+       { MODKEY,                       XK_2,           view,           
index_to_tag(1) }, \
+       { MODKEY,                       XK_3,           view,           
index_to_tag(2) }, \
+       { MODKEY,                       XK_4,           view,           
index_to_tag(3) }, \
+       { MODKEY,                       XK_5,           view,           
index_to_tag(4) }, \
+       { MODKEY,                       XK_6,           view,           
index_to_tag(5) }, \
+       { MODKEY,                       XK_7,           view,           
index_to_tag(6) }, \
+       { MODKEY,                       XK_8,           view,           
index_to_tag(7) }, \
+       { MODKEY,                       XK_9,           view,           
index_to_tag(8) }, \
+       { MODKEY|ControlMask,           XK_1,           toggleview,     
index_to_tag(0) }, \
+       { MODKEY|ControlMask,           XK_2,           toggleview,     
index_to_tag(1) }, \
+       { MODKEY|ControlMask,           XK_3,           toggleview,     
index_to_tag(2) }, \
+       { MODKEY|ControlMask,           XK_4,           toggleview,     
index_to_tag(3) }, \
+       { MODKEY|ControlMask,           XK_5,           toggleview,     
index_to_tag(4) }, \
+       { MODKEY|ControlMask,           XK_6,           toggleview,     
index_to_tag(5) }, \
+       { MODKEY|ControlMask,           XK_7,           toggleview,     
index_to_tag(6) }, \
+       { MODKEY|ControlMask,           XK_8,           toggleview,     
index_to_tag(7) }, \
+       { MODKEY|ControlMask,           XK_9,           toggleview,     
index_to_tag(8) }, \
+       { MODKEY|ShiftMask,             XK_0,           tag,            
index_to_tag(ntags) }, \
+       { MODKEY|ShiftMask,             XK_1,           tag,            
index_to_tag(0) }, \
+       { MODKEY|ShiftMask,             XK_2,           tag,            
index_to_tag(1) }, \
+       { MODKEY|ShiftMask,             XK_3,           tag,            
index_to_tag(2) }, \
+       { MODKEY|ShiftMask,             XK_4,           tag,            
index_to_tag(3) }, \
+       { MODKEY|ShiftMask,             XK_5,           tag,            
index_to_tag(4) }, \
+       { MODKEY|ShiftMask,             XK_6,           tag,            
index_to_tag(5) }, \
+       { MODKEY|ShiftMask,             XK_7,           tag,            
index_to_tag(6) }, \
+       { MODKEY|ShiftMask,             XK_8,           tag,            
index_to_tag(7) }, \
+       { MODKEY|ShiftMask,             XK_9,           tag,            
index_to_tag(8) }, \
+       { MODKEY|ControlMask|ShiftMask, XK_1,           toggletag,      
index_to_tag(0) }, \
+       { MODKEY|ControlMask|ShiftMask, XK_2,           toggletag,      
index_to_tag(1) }, \
+       { MODKEY|ControlMask|ShiftMask, XK_3,           toggletag,      
index_to_tag(2) }, \
+       { MODKEY|ControlMask|ShiftMask, XK_4,           toggletag,      
index_to_tag(3) }, \
+       { MODKEY|ControlMask|ShiftMask, XK_5,           toggletag,      
index_to_tag(4) }, \
+       { MODKEY|ControlMask|ShiftMask, XK_6,           toggletag,      
index_to_tag(5) }, \
+       { MODKEY|ControlMask|ShiftMask, XK_7,           toggletag,      
index_to_tag(6) }, \
+       { MODKEY|ControlMask|ShiftMask, XK_8,           toggletag,      
index_to_tag(7) }, \
+       { MODKEY|ControlMask|ShiftMask, XK_9,           toggletag,      
index_to_tag(8) }, \
        { MODKEY|ShiftMask,             XK_q,           quit,           NULL }, 
\
 };
diff -r cdd1db1c525b dwm.c
--- a/dwm.c     Fri Oct 19 09:56:51 2007 +0200
+++ b/dwm.c     Mon Oct 22 10:18:45 2007 +0200
@@ -143,7 +143,6 @@ long getstate(Window w);
 long getstate(Window w);
 Bool gettextprop(Window w, Atom atom, char *text, unsigned int size);
 void grabbuttons(Client *c, Bool focused);
-unsigned int idxoftag(const char *tag);
 void initfont(const char *fontstr);
 Bool isarrange(void (*func)());
 Bool isoccupied(unsigned int t);
@@ -230,12 +229,13 @@ Regs *regs = NULL;
 Regs *regs = NULL;
 
 /* configuration, allows nested code to access above variables */
+#define index_to_tag(x) ((char const *)(x))
+#define tag_to_index(x) ((unsigned int)(x))
 #include "config.h"
 
 /* statically define the number of tags. */
-unsigned int ntags = sizeof tags / sizeof tags[0];
-Bool seltags[sizeof tags / sizeof tags[0]] = {[0] = True};
-Bool prevtags[sizeof tags / sizeof tags[0]] = {[0] = True};
+Bool seltags[ntags] = {[0] = True};
+Bool prevtags[ntags] = {[0] = True};
 
 /* function implementations */
 void
@@ -318,15 +318,15 @@ buttonpress(XEvent *e) {
                        if(ev->x < x) {
                                if(ev->button == Button1) {
                                        if(ev->state & MODKEY)
-                                               tag(tags[i]);
+                                               tag(index_to_tag(i));
                                        else
-                                               view(tags[i]);
+                                               view(index_to_tag(i));
                                }
                                else if(ev->button == Button3) {
                                        if(ev->state & MODKEY)
-                                               toggletag(tags[i]);
+                                               toggletag(index_to_tag(i));
                                        else
-                                               toggleview(tags[i]);
+                                               toggleview(index_to_tag(i));
                                }
                                return;
                        }
@@ -841,16 +841,6 @@ grabbuttons(Client *c, Bool focused) {
        else
                XGrabButton(dpy, AnyButton, AnyModifier, c->win, False, 
BUTTONMASK,
                                GrabModeAsync, GrabModeSync, None, None);
-}
-
-unsigned int
-idxoftag(const char *tag) {
-       unsigned int i;
-
-       for(i = 0; i < ntags; i++)
-               if(tags[i] == tag)
-                       return i;
-       return 0;
 }
 
 void
@@ -1543,8 +1533,8 @@ tag(const char *arg) {
        if(!sel)
                return;
        for(i = 0; i < ntags; i++)
-               sel->tags[i] = arg == NULL;
-       i = idxoftag(arg);
+               sel->tags[i] = tag_to_index(arg) == ntags;
+       i = tag_to_index(arg);
        if(i >= 0 && i < ntags)
                sel->tags[i] = True;
        arrange();
@@ -1660,7 +1650,7 @@ toggletag(const char *arg) {
 
        if(!sel)
                return;
-       i = idxoftag(arg);
+       i = tag_to_index(arg);
        sel->tags[i] = !sel->tags[i];
        for(j = 0; j < ntags && !sel->tags[j]; j++);
        if(j == ntags)
@@ -1672,7 +1662,7 @@ toggleview(const char *arg) {
 toggleview(const char *arg) {
        unsigned int i, j;
 
-       i = idxoftag(arg);
+       i = tag_to_index(arg);
        seltags[i] = !seltags[i];
        for(j = 0; j < ntags && !seltags[j]; j++);
        if(j == ntags)
@@ -1842,8 +1832,8 @@ view(const char *arg) {
 
        memcpy(prevtags, seltags, sizeof seltags);
        for(i = 0; i < ntags; i++)
-               seltags[i] = arg == NULL;
-       i = idxoftag(arg);
+               seltags[i] = tag_to_index(arg) == ntags;
+       i = tag_to_index(arg);
        if(i >= 0 && i < ntags)
                seltags[i] = True;
        arrange();

Reply via email to