Using a new tags definition (const char [][MAXTAGLEN] - thanks go to Szabolcs!
authorAnselm R. Garbe <garbeam@gmail.com>
Sat, 10 Nov 2007 18:16:11 +0000 (19:16 +0100)
committerAnselm R. Garbe <garbeam@gmail.com>
Sat, 10 Nov 2007 18:16:11 +0000 (19:16 +0100)
config.def.h
dwm.c

index b437a0e..169aeec 100644 (file)
@@ -12,7 +12,7 @@
 #define SELFGCOLOR             "#ffffff"
 
 /* tagging */
-const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "www" };
+const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "www" };
 Bool seltags[LENGTH(tags)] = {[0] = True};
 Rule rules[] = {
        /* class:instance:title regex   tags regex      isfloating */
@@ -34,61 +34,60 @@ Layout layouts[] = {
 
 /* key definitions */
 #define MODKEY                 Mod1Mask
-#define KEYS \
-Key keys[] = { \
-       /* modifier                     key             function        argument */ \
-       { MODKEY,                       XK_p,           spawn, \
-               "exe=`dmenu_path | dmenu -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"'" \
-               " -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'` && exec $exe" }, \
-       { MODKEY|ShiftMask,             XK_Return,      spawn, "exec uxterm" }, \
-       { MODKEY,                       XK_space,       setlayout,      NULL }, \
-       { MODKEY,                       XK_b,           togglebar,      NULL }, \
-       { MODKEY,                       XK_j,           focusnext,      NULL }, \
-       { MODKEY,                       XK_k,           focusprev,      NULL }, \
-       { MODKEY,                       XK_h,           setmwfact,      "-0.05" }, \
-       { MODKEY,                       XK_l,           setmwfact,      "+0.05" }, \
-       { MODKEY,                       XK_m,           togglemax,      NULL }, \
-       { MODKEY,                       XK_Return,      zoom,           NULL }, \
-       { 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|ShiftMask,             XK_q,           quit,           NULL }, \
+Key keys[] = {
+       /* modifier                     key             function        argument */
+       { MODKEY,                       XK_p,           spawn,
+               "exe=`dmenu_path | dmenu -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"'"
+               " -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'` && exec $exe" },
+       { MODKEY|ShiftMask,             XK_Return,      spawn, "exec uxterm" },
+       { MODKEY,                       XK_space,       setlayout,      NULL },
+       { MODKEY,                       XK_b,           togglebar,      NULL },
+       { MODKEY,                       XK_j,           focusnext,      NULL },
+       { MODKEY,                       XK_k,           focusprev,      NULL },
+       { MODKEY,                       XK_h,           setmwfact,      "-0.05" },
+       { MODKEY,                       XK_l,           setmwfact,      "+0.05" },
+       { MODKEY,                       XK_m,           togglemax,      NULL },
+       { MODKEY,                       XK_Return,      zoom,           NULL },
+       { 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|ShiftMask,             XK_q,           quit,           NULL },
 };
diff --git a/dwm.c b/dwm.c
index f0dd14b..bd7ffe3 100644 (file)
--- a/dwm.c
+++ b/dwm.c
@@ -44,8 +44,9 @@
 /* macros */
 #define BUTTONMASK             (ButtonPressMask | ButtonReleaseMask)
 #define CLEANMASK(mask)                (mask & ~(numlockmask | LockMask))
-#define MOUSEMASK              (BUTTONMASK | PointerMotionMask)
 #define LENGTH(x)              (sizeof x / sizeof x[0])
+#define MAXTAGLEN              16
+#define MOUSEMASK              (BUTTONMASK | PointerMotionMask)
 
 
 /* enums */
@@ -143,6 +144,7 @@ unsigned long getcolor(const char *colstr);
 long getstate(Window w);
 Bool gettextprop(Window w, Atom atom, char *text, unsigned int size);
 void grabbuttons(Client *c, Bool focused);
+void grabkeys(void);
 unsigned int idxoftag(const char *tag);
 void initfont(const char *fontstr);
 Bool isoccupied(unsigned int t);
@@ -838,6 +840,25 @@ grabbuttons(Client *c, Bool focused) {
                                GrabModeAsync, GrabModeSync, None, None);
 }
 
+void
+grabkeys(void)  {
+       unsigned int i;
+       KeyCode code;
+
+       XUngrabKey(dpy, AnyKey, AnyModifier, root);
+       for(i = 0; i < LENGTH(keys); i++) {
+               code = XKeysymToKeycode(dpy, keys[i].keysym);
+               XGrabKey(dpy, code, keys[i].mod, root, True,
+                               GrabModeAsync, GrabModeAsync);
+               XGrabKey(dpy, code, keys[i].mod | LockMask, root, True,
+                               GrabModeAsync, GrabModeAsync);
+               XGrabKey(dpy, code, keys[i].mod | numlockmask, root, True,
+                               GrabModeAsync, GrabModeAsync);
+               XGrabKey(dpy, code, keys[i].mod | numlockmask | LockMask, root, True,
+                               GrabModeAsync, GrabModeAsync);
+       }
+}
+
 unsigned int
 idxoftag(const char *tag) {
        unsigned int i;
@@ -925,27 +946,10 @@ isvisible(Client *c) {
 
 void
 keypress(XEvent *e) {
-       KEYS
        unsigned int i;
-       KeyCode code;
        KeySym keysym;
        XKeyEvent *ev;
 
-       if(!e) { /* grabkeys */
-               XUngrabKey(dpy, AnyKey, AnyModifier, root);
-               for(i = 0; i < LENGTH(keys); i++) {
-                       code = XKeysymToKeycode(dpy, keys[i].keysym);
-                       XGrabKey(dpy, code, keys[i].mod, root, True,
-                                       GrabModeAsync, GrabModeAsync);
-                       XGrabKey(dpy, code, keys[i].mod | LockMask, root, True,
-                                       GrabModeAsync, GrabModeAsync);
-                       XGrabKey(dpy, code, keys[i].mod | numlockmask, root, True,
-                                       GrabModeAsync, GrabModeAsync);
-                       XGrabKey(dpy, code, keys[i].mod | numlockmask | LockMask, root, True,
-                                       GrabModeAsync, GrabModeAsync);
-               }
-               return;
-       }
        ev = &e->xkey;
        keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
        for(i = 0; i < LENGTH(keys); i++)
@@ -1048,7 +1052,7 @@ mappingnotify(XEvent *e) {
 
        XRefreshKeyboardMapping(ev);
        if(ev->request == MappingKeyboard)
-               keypress(NULL);
+               grabkeys();
 }
 
 void
@@ -1460,7 +1464,7 @@ setup(void) {
        XSelectInput(dpy, root, wa.event_mask);
 
        /* grab keys */
-       keypress(NULL);
+       grabkeys();
 
        /* init tags */
        compileregs();