about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorarg@mig29 <unknown>2006-11-27 13:21:38 +0100
committerarg@mig29 <unknown>2006-11-27 13:21:38 +0100
commit19390b1a91da680a502ce5acebd086cfbe32627c (patch)
treee068cab66e749c60c352ac6d18ae1abec8466b05
parent8dc86051df197792d35521743cc2cb72b60a47ff (diff)
downloaddwm-19390b1a91da680a502ce5acebd086cfbe32627c.tar.gz
changing Key.func into Key.func[NFUNCS], this allows sequences execution of functions per keypress (avoids implementing useless masterfunctions which call atomic ones)
-rw-r--r--config.arg.h63
-rw-r--r--config.default.h69
-rw-r--r--event.c9
3 files changed, 72 insertions, 69 deletions
diff --git a/config.arg.h b/config.arg.h
index e6ea4ea..ce77572 100644
--- 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
index acacfdc..1e99362 100644
--- 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
index edfcc52..45a21a6 100644
--- 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;
 		}
 	}