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();