dwm

my fork of dwm
Index Commits Files Refs README LICENSE
commit 19390b1a91da680a502ce5acebd086cfbe32627c
parent 8dc86051df197792d35521743cc2cb72b60a47ff
Author: arg@mig29 <unknown>
Date:   Mon, 27 Nov 2006 13:21:38 +0100

changing Key.func into Key.func[NFUNCS], this allows sequences execution of functions per keypress (avoids implementing useless masterfunctions which call atomic ones)
Diffstat:
Mconfig.arg.h | 63++++++++++++++++++++++++++++++++-------------------------------
Mconfig.default.h | 69+++++++++++++++++++++++++++++++++++----------------------------------
Mevent.c | 9+++++----
3 files changed, 72 insertions(+), 69 deletions(-)
diff --git a/config.arg.h b/config.arg.h
@@ -17,45 +17,46 @@ const char *tags[] = { "dev", "work", "net", "fnord", NULL };
 #define STATUSBGCOLOR        "#222222"
 #define STATUSFGCOLOR        "#99ccff"
 
-#define MASTER            600 /* per thousand */
+#define MASTER            600        /* per thousand */
 #define MODKEY            Mod1Mask
-#define SNAP            40 /* pixel */
+#define NFUNCS            1        /* number of funcs per key */
+#define SNAP            40        /* pixel */
 
 #define KEYS \
 static Key key[] = { \
-    /* modifier            key        function    arguments */ \
-    { MODKEY|ShiftMask,        XK_Return,    spawn, \
+    /* modifier            key        functions        arguments */ \
+    { MODKEY|ShiftMask,        XK_Return,    { spawn }, \
         { .cmd = "exec urxvtc -tr -bg black -fg '#eeeeee' -cr '#eeeeee' +sb -fn '"FONT"'" } }, \
-    { MODKEY,            XK_p,        spawn, \
+    { MODKEY,            XK_p,        { spawn }, \
         { .cmd = "exe=\"$(lsx `echo $PATH | sed 's/:/ /g'` | sort -u " \
             " | dmenu -font '"FONT"' -normbg '"NORMBGCOLOR"' -normfg '"NORMFGCOLOR"' " \
             "-selbg '"SELBGCOLOR"' -selfg '"SELFGCOLOR"')\" && exec $exe" } }, \
-    { MODKEY,            XK_j,        focusnext,    { 0 } }, \
-    { MODKEY,            XK_k,        focusprev,    { 0 } }, \
-    { MODKEY,            XK_Return,    zoom,        { 0 } }, \
-    { MODKEY,            XK_g,        resizemaster,    { .i = 15 } }, \
-    { MODKEY,            XK_s,        resizemaster,    { .i = -15 } }, \
-    { MODKEY|ShiftMask,        XK_1,        tag,        { .i = 0 } }, \
-    { MODKEY|ShiftMask,        XK_2,        tag,        { .i = 1 } }, \
-    { MODKEY|ShiftMask,        XK_3,        tag,        { .i = 2 } }, \
-    { MODKEY|ShiftMask,        XK_4,        tag,        { .i = 3 } }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_1,        toggletag,    { .i = 0 } }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_2,        toggletag,    { .i = 1 } }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_3,        toggletag,    { .i = 2 } }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_4,        toggletag,    { .i = 3 } }, \
-    { MODKEY|ShiftMask,        XK_c,        killclient,    { 0 } }, \
-    { MODKEY,            XK_space,    togglemode,    { 0 } }, \
-    { MODKEY|ShiftMask,        XK_space,    togglefloat,    { 0 } }, \
-    { MODKEY,            XK_0,        viewall,    { 0 } }, \
-    { MODKEY,            XK_1,        view,        { .i = 0 } }, \
-    { MODKEY,            XK_2,        view,        { .i = 1 } }, \
-    { MODKEY,            XK_3,        view,        { .i = 2 } }, \
-    { MODKEY,            XK_4,        view,        { .i = 3 } }, \
-    { MODKEY|ControlMask,        XK_1,        toggleview,    { .i = 0 } }, \
-    { MODKEY|ControlMask,        XK_2,        toggleview,    { .i = 1 } }, \
-    { MODKEY|ControlMask,        XK_3,        toggleview,    { .i = 2 } }, \
-    { MODKEY|ControlMask,        XK_4,        toggleview,    { .i = 3 } }, \
-    { MODKEY|ShiftMask,        XK_q,        quit,        { 0 } }, \
+    { MODKEY,            XK_j,        { focusnext },        { 0 } }, \
+    { MODKEY,            XK_k,        { focusprev },        { 0 } }, \
+    { MODKEY,            XK_Return,    { zoom },        { 0 } }, \
+    { MODKEY,            XK_g,        { resizemaster },    { .i = 15 } }, \
+    { MODKEY,            XK_s,        { resizemaster },    { .i = -15 } }, \
+    { MODKEY|ShiftMask,        XK_1,        { tag },        { .i = 0 } }, \
+    { MODKEY|ShiftMask,        XK_2,        { tag },        { .i = 1 } }, \
+    { MODKEY|ShiftMask,        XK_3,        { tag },        { .i = 2 } }, \
+    { MODKEY|ShiftMask,        XK_4,        { tag },        { .i = 3 } }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_1,        { toggletag },        { .i = 0 } }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_2,        { toggletag },        { .i = 1 } }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_3,        { toggletag },        { .i = 2 } }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_4,        { toggletag },        { .i = 3 } }, \
+    { MODKEY|ShiftMask,        XK_c,        { killclient },        { 0 } }, \
+    { MODKEY,            XK_space,    { togglemode },        { 0 } }, \
+    { MODKEY|ShiftMask,        XK_space,    { togglefloat },    { 0 } }, \
+    { MODKEY,            XK_0,        { viewall },        { 0 } }, \
+    { MODKEY,            XK_1,        { view },        { .i = 0 } }, \
+    { MODKEY,            XK_2,        { view },        { .i = 1 } }, \
+    { MODKEY,            XK_3,        { view },        { .i = 2 } }, \
+    { MODKEY,            XK_4,        { view },        { .i = 3 } }, \
+    { MODKEY|ControlMask,        XK_1,        { toggleview },        { .i = 0 } }, \
+    { MODKEY|ControlMask,        XK_2,        { toggleview },        { .i = 1 } }, \
+    { MODKEY|ControlMask,        XK_3,        { toggleview },        { .i = 2 } }, \
+    { MODKEY|ControlMask,        XK_4,        { toggleview },        { .i = 3 } }, \
+    { MODKEY|ShiftMask,        XK_q,        { quit },        { 0 } }, \
 };
 
 #define RULES \
diff --git a/config.default.h b/config.default.h
@@ -17,44 +17,45 @@ const char *tags[] = { "1", "2", "3", "4", "5", NULL };
 #define STATUSBGCOLOR        "#dddddd"
 #define STATUSFGCOLOR        "#222222"
 
-#define MASTER            600 /* per thousand */
+#define MASTER            600        /* per thousand */
 #define MODKEY            Mod1Mask
-#define SNAP            20 /* pixel */
+#define NFUNCS            1        /* number of funcs per key */
+#define SNAP            20        /* pixel */
 
 #define KEYS \
 static Key key[] = { \
-    /* modifier            key        function    arguments */ \
-    { MODKEY|ShiftMask,        XK_Return,    spawn,        { .cmd = "exec xterm" } }, \
-    { MODKEY,            XK_Tab,        focusnext,    { 0 } }, \
-    { MODKEY|ShiftMask,        XK_Tab,        focusprev,    { 0 } }, \
-    { MODKEY,            XK_Return,    zoom,        { 0 } }, \
-    { MODKEY,            XK_g,        resizemaster,    { .i = 15 } }, \
-    { MODKEY,            XK_s,        resizemaster,    { .i = -15 } }, \
-    { MODKEY|ShiftMask,        XK_1,        tag,        { .i = 0 } }, \
-    { MODKEY|ShiftMask,        XK_2,        tag,        { .i = 1 } }, \
-    { MODKEY|ShiftMask,        XK_3,        tag,        { .i = 2 } }, \
-    { MODKEY|ShiftMask,        XK_4,        tag,        { .i = 3 } }, \
-    { MODKEY|ShiftMask,        XK_5,        tag,        { .i = 4 } }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_1,        toggletag,    { .i = 0 } }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_2,        toggletag,    { .i = 1 } }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_3,        toggletag,    { .i = 2 } }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_4,        toggletag,    { .i = 3 } }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_5,        toggletag,    { .i = 4 } }, \
-    { MODKEY|ShiftMask,        XK_c,        killclient,    { 0 } }, \
-    { MODKEY,            XK_space,    togglemode,    { 0 } }, \
-    { MODKEY|ShiftMask,        XK_space,    togglefloat,    { 0 } }, \
-    { MODKEY,            XK_0,        viewall,    { 0 } }, \
-    { MODKEY,            XK_1,        view,        { .i = 0 } }, \
-    { MODKEY,            XK_2,        view,        { .i = 1 } }, \
-    { MODKEY,            XK_3,        view,        { .i = 2 } }, \
-    { MODKEY,            XK_4,        view,        { .i = 3 } }, \
-    { MODKEY,            XK_5,        view,        { .i = 4 } }, \
-    { MODKEY|ControlMask,        XK_1,        toggleview,    { .i = 0 } }, \
-    { MODKEY|ControlMask,        XK_2,        toggleview,    { .i = 1 } }, \
-    { MODKEY|ControlMask,        XK_3,        toggleview,    { .i = 2 } }, \
-    { MODKEY|ControlMask,        XK_4,        toggleview,    { .i = 3 } }, \
-    { MODKEY|ControlMask,        XK_5,        toggleview,    { .i = 4 } }, \
-    { MODKEY|ShiftMask,        XK_q,        quit,        { 0 } }, \
+    /* modifier            key        functions        arguments */ \
+    { MODKEY|ShiftMask,        XK_Return,    { spawn },        { .cmd = "exec xterm" } }, \
+    { MODKEY,            XK_Tab,        { focusnext },        { 0 } }, \
+    { MODKEY|ShiftMask,        XK_Tab,        { focusprev },        { 0 } }, \
+    { MODKEY,            XK_Return,    { zoom },        { 0 } }, \
+    { MODKEY,            XK_g,        { resizemaster },    { .i = 15 } }, \
+    { MODKEY,            XK_s,        { resizemaster },    { .i = -15 } }, \
+    { MODKEY|ShiftMask,        XK_1,        { tag },        { .i = 0 } }, \
+    { MODKEY|ShiftMask,        XK_2,        { tag },        { .i = 1 } }, \
+    { MODKEY|ShiftMask,        XK_3,        { tag },        { .i = 2 } }, \
+    { MODKEY|ShiftMask,        XK_4,        { tag },        { .i = 3 } }, \
+    { MODKEY|ShiftMask,        XK_5,        { tag },        { .i = 4 } }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_1,        { toggletag },        { .i = 0 } }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_2,        { toggletag },        { .i = 1 } }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_3,        { toggletag },        { .i = 2 } }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_4,        { toggletag },        { .i = 3 } }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_5,        { toggletag },        { .i = 4 } }, \
+    { MODKEY|ShiftMask,        XK_c,        { killclient },        { 0 } }, \
+    { MODKEY,            XK_space,    { togglemode },        { 0 } }, \
+    { MODKEY|ShiftMask,        XK_space,    { togglefloat },    { 0 } }, \
+    { MODKEY,            XK_0,        { viewall },        { 0 } }, \
+    { MODKEY,            XK_1,        { view },        { .i = 0 } }, \
+    { MODKEY,            XK_2,        { view },        { .i = 1 } }, \
+    { MODKEY,            XK_3,        { view },        { .i = 2 } }, \
+    { MODKEY,            XK_4,        { view },        { .i = 3 } }, \
+    { MODKEY,            XK_5,        { view },        { .i = 4 } }, \
+    { MODKEY|ControlMask,        XK_1,        { toggleview },        { .i = 0 } }, \
+    { MODKEY|ControlMask,        XK_2,        { toggleview },        { .i = 1 } }, \
+    { MODKEY|ControlMask,        XK_3,        { toggleview },        { .i = 2 } }, \
+    { MODKEY|ControlMask,        XK_4,        { toggleview },        { .i = 3 } }, \
+    { MODKEY|ControlMask,        XK_5,        { toggleview },        { .i = 4 } }, \
+    { MODKEY|ShiftMask,        XK_q,        { quit },        { 0 } }, \
 };
 
 /* Query class:instance:title for regex matching info with following command:
diff --git a/event.c b/event.c
@@ -11,7 +11,7 @@
 typedef struct {
     unsigned long mod;
     KeySym keysym;
-    void (*func)(Arg *arg);
+    void (*func[NFUNCS])(Arg *arg);
     Arg arg;
 } Key;
 
@@ -245,7 +245,7 @@ expose(XEvent *e) {
 static void
 keypress(XEvent *e) {
     static unsigned int len = sizeof key / sizeof key[0];
-    unsigned int i;
+    unsigned int i, j;
     KeySym keysym;
     XKeyEvent *ev = &e->xkey;
 
@@ -254,8 +254,9 @@ keypress(XEvent *e) {
         if(keysym == key[i].keysym
             && CLEANMASK(key[i].mod) == CLEANMASK(ev->state))
         {
-            if(key[i].func)
-                key[i].func(&key[i].arg);
+            for(j = 0; j < NFUNCS; j++)
+                if(key[i].func[j])
+                    key[i].func[j](&key[i].arg);
             return;
         }
     }