JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
changing Key.func into Key.func[NFUNCS], this allows sequences execution of functions...
authorarg@mig29 <unknown>
Mon, 27 Nov 2006 12:21:38 +0000 (13:21 +0100)
committerarg@mig29 <unknown>
Mon, 27 Nov 2006 12:21:38 +0000 (13:21 +0100)
config.arg.h
config.default.h
event.c

index e6ea4ea..ce77572 100644 (file)
@@ -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 \
index acacfdc..1e99362 100644 (file)
@@ -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
index edfcc52..45a21a6 100644 (file)
--- 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;
                }
        }