I am asking myself why dwm needs to iterate over the array of tags to find the
index of a given tag.  To better clarify my question here is is a little patch
that removes the function `idxoftag()'. Does it break something?

greets,
Gingioerge
diff -r cdd1db1c525b config.def.h
--- a/config.def.h      Fri Oct 19 09:56:51 2007 +0200
+++ b/config.def.h      Sat Oct 20 09:59:00 2007 +0200
@@ -53,42 +53,42 @@ Key keys[] = { \
        { 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,                       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,            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|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     Sat Oct 20 09:59:00 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,6 +229,8 @@ 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. */
@@ -841,16 +842,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
@@ -1544,7 +1535,7 @@ tag(const char *arg) {
                return;
        for(i = 0; i < ntags; i++)
                sel->tags[i] = arg == NULL;
-       i = idxoftag(arg);
+       i = tag_to_index(arg);
        if(i >= 0 && i < ntags)
                sel->tags[i] = True;
        arrange();
@@ -1660,7 +1651,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 +1663,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)
@@ -1843,7 +1834,7 @@ view(const char *arg) {
        memcpy(prevtags, seltags, sizeof seltags);
        for(i = 0; i < ntags; i++)
                seltags[i] = arg == NULL;
-       i = idxoftag(arg);
+       i = tag_to_index(arg);
        if(i >= 0 && i < ntags)
                seltags[i] = True;
        arrange();

Reply via email to