[hackers] [dwm] Using a new tags definition (const char [][MAXTAGLEN] - thanks go to Szabolcs!

From: Anselm R. Garbe <garbeam_AT_gmail.com>
Date: Sat Nov 10 19:18:57 2007

changeset: 1060:9df583e2c03c
tag: tip
user: Anselm R. Garbe <garbeam_AT_gmail.com>
date: Sat Nov 10 19:16:11 2007 +0100
summary: Using a new tags definition (const char [][MAXTAGLEN] - thanks go to Szabolcs!

diff -r 98d06be63ce5 -r 9df583e2c03c config.def.h
--- a/config.def.h Wed Nov 07 09:49:53 2007 +0100
+++ b/config.def.h Sat Nov 10 19:16:11 2007 +0100
@@ -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 -r 98d06be63ce5 -r 9df583e2c03c dwm.c
--- a/dwm.c Wed Nov 07 09:49:53 2007 +0100
+++ b/dwm.c Sat Nov 10 19:16:11 2007 +0100
@@ -44,8 +44,9 @@
 /* macros */
 #define BUTTONMASK (ButtonPressMask | ButtonReleaseMask)
 #define CLEANMASK(mask) (mask & ~(numlockmask | LockMask))
+#define LENGTH(x) (sizeof x / sizeof x[0])
+#define MAXTAGLEN 16
 #define MOUSEMASK (BUTTONMASK | PointerMotionMask)
-#define LENGTH(x) (sizeof x / sizeof x[0])
 
 
 /* enums */
@@ -143,6 +144,7 @@ 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);
+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();
Received on Sat Nov 10 2007 - 19:18:57 UTC

This archive was generated by hypermail 2.2.0 : Sun Jul 13 2008 - 15:58:45 UTC