From 8dc86051df197792d35521743cc2cb72b60a47ff Mon Sep 17 00:00:00 2001 From: "arg@mig29" Date: Mon, 27 Nov 2006 11:05:47 +0100 Subject: [PATCH 01/16] added man page entry --- dwm.1 | 3 +++ dwm.h | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/dwm.1 b/dwm.1 index aafce8f..81a447e 100644 --- a/dwm.1 +++ b/dwm.1 @@ -86,6 +86,9 @@ Close focused window. .B Mod1-space Toggle between tiling and floating mode (affects all windows). .TP +.B Mod1-Shift-space +Toggle focused window between floating and non-floating state. +.TP .B Mod1-[1..n] View all windows with .BR nth diff --git a/dwm.h b/dwm.h index 1f7dfe8..2f3ce74 100644 --- a/dwm.h +++ b/dwm.h @@ -164,7 +164,7 @@ extern void focusprev(Arg *arg); /* focuses previous visible client, arg is ign extern Bool isvisible(Client *c); /* returns True if client is visible */ extern void resizemaster(Arg *arg); /* resizes the master percent with arg's index value */ extern void restack(void); /* restores z layers of all clients */ -extern void togglefloat(Arg *arg); /* toggles selected client floating/tiled resp. */ +extern void togglefloat(Arg *arg); /* toggles focusesd client between floating/non-floating state */ extern void togglemode(Arg *arg); /* toggles global arrange function (dotile/dofloat) */ extern void toggleview(Arg *arg); /* toggles the tag with arg's index (in)visible */ extern void view(Arg *arg); /* views the tag with arg's index */ -- 2.20.1 From 19390b1a91da680a502ce5acebd086cfbe32627c Mon Sep 17 00:00:00 2001 From: "arg@mig29" Date: Mon, 27 Nov 2006 13:21:38 +0100 Subject: [PATCH 02/16] changing Key.func into Key.func[NFUNCS], this allows sequences execution of functions per keypress (avoids implementing useless masterfunctions which call atomic ones) --- config.arg.h | 63 +++++++++++++++++++++---------------------- config.default.h | 69 ++++++++++++++++++++++++------------------------ event.c | 9 ++++--- 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; } } -- 2.20.1 From 0c97b21b6120137858f390f061d17f065b41d26e Mon Sep 17 00:00:00 2001 From: "arg@mig29" Date: Mon, 27 Nov 2006 17:30:06 +0100 Subject: [PATCH 03/16] applied patch by Jukka --- view.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/view.c b/view.c index 21e7bbd..5c65148 100644 --- a/view.c +++ b/view.c @@ -91,7 +91,7 @@ dotile(void) { c->h = wah - 2 * BORDERPX; } else if(i == 0) { /* master window */ - c->w = waw - stackw - 2 * BORDERPX; + c->w = mpx - 2 * BORDERPX; c->h = wah - 2 * BORDERPX; th = wah / (n - 1); } -- 2.20.1 From d2a4952956aa21a48ac40d7f650036682cb9d97d Mon Sep 17 00:00:00 2001 From: "arg@mig29" Date: Mon, 27 Nov 2006 17:46:02 +0100 Subject: [PATCH 04/16] applied Szabolcs Nagy's patch (thank you!) --- view.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/view.c b/view.c index 5c65148..167a1c4 100644 --- a/view.c +++ b/view.c @@ -99,7 +99,7 @@ dotile(void) { c->x += mpx; c->w = stackw - 2 * BORDERPX; if(th > bh) { - c->y = way + (i - 1) * th; + c->y += (i - 1) * th; c->h = th - 2 * BORDERPX; } else /* fallback if th < bh */ -- 2.20.1 From 19dcbc5717bdcef4bcb5be6966be7d86f88152d6 Mon Sep 17 00:00:00 2001 From: "arg@mig29" Date: Mon, 27 Nov 2006 17:49:58 +0100 Subject: [PATCH 05/16] returning to old Key struct --- config.arg.h | 59 +++++++++++++++++++++---------------------- config.default.h | 65 ++++++++++++++++++++++++------------------------ event.c | 9 +++---- 3 files changed, 65 insertions(+), 68 deletions(-) diff --git a/config.arg.h b/config.arg.h index ce77572..ee63eb1 100644 --- a/config.arg.h +++ b/config.arg.h @@ -19,44 +19,43 @@ const char *tags[] = { "dev", "work", "net", "fnord", NULL }; #define MASTER 600 /* per thousand */ #define MODKEY Mod1Mask -#define NFUNCS 1 /* number of funcs per key */ #define SNAP 40 /* pixel */ #define KEYS \ static Key key[] = { \ - /* modifier key functions arguments */ \ - { MODKEY|ShiftMask, XK_Return, { spawn }, \ + /* modifier key function argument */ \ + { 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 1e99362..077c337 100644 --- a/config.default.h +++ b/config.default.h @@ -19,43 +19,42 @@ const char *tags[] = { "1", "2", "3", "4", "5", NULL }; #define MASTER 600 /* per thousand */ #define MODKEY Mod1Mask -#define NFUNCS 1 /* number of funcs per key */ #define SNAP 20 /* pixel */ #define KEYS \ static Key key[] = { \ - /* 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 } }, \ + /* modifier key function argument */ \ + { 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 45a21a6..edfcc52 100644 --- a/event.c +++ b/event.c @@ -11,7 +11,7 @@ typedef struct { unsigned long mod; KeySym keysym; - void (*func[NFUNCS])(Arg *arg); + void (*func)(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, j; + unsigned int i; KeySym keysym; XKeyEvent *ev = &e->xkey; @@ -254,9 +254,8 @@ keypress(XEvent *e) { if(keysym == key[i].keysym && CLEANMASK(key[i].mod) == CLEANMASK(ev->state)) { - for(j = 0; j < NFUNCS; j++) - if(key[i].func[j]) - key[i].func[j](&key[i].arg); + if(key[i].func) + key[i].func(&key[i].arg); return; } } -- 2.20.1 From 0a915eba8fedeaf6ab5c3a1808962f5467aa8c5e Mon Sep 17 00:00:00 2001 From: "arg@mig29" Date: Mon, 27 Nov 2006 17:51:50 +0100 Subject: [PATCH 06/16] applied Alex Elide's tricky patch, thanks! --- event.c | 1 - 1 file changed, 1 deletion(-) diff --git a/event.c b/event.c index edfcc52..4e11552 100644 --- a/event.c +++ b/event.c @@ -256,7 +256,6 @@ keypress(XEvent *e) { { if(key[i].func) key[i].func(&key[i].arg); - return; } } } -- 2.20.1 From 3aff96177cff61b61509540eb02cc38c4a59eb1e Mon Sep 17 00:00:00 2001 From: "arg@mig29" Date: Tue, 28 Nov 2006 17:35:31 +0100 Subject: [PATCH 07/16] togglefloat should only work in dotile mode (thanks to Sander for this hint) --- view.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/view.c b/view.c index 167a1c4..c11e349 100644 --- a/view.c +++ b/view.c @@ -202,7 +202,7 @@ restack(void) { void togglefloat(Arg *arg) { - if (!sel) + if (!sel || arrange == dofloat) return; sel->isfloat = !sel->isfloat; arrange(); -- 2.20.1 From 683dabe5e61ab0111ef72e0b12e69a637ebadb05 Mon Sep 17 00:00:00 2001 From: "arg@mig29" Date: Tue, 28 Nov 2006 17:36:00 +0100 Subject: [PATCH 08/16] extended dwm.1 with last change --- dwm.1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dwm.1 b/dwm.1 index 81a447e..298585e 100644 --- a/dwm.1 +++ b/dwm.1 @@ -87,7 +87,7 @@ Close focused window. Toggle between tiling and floating mode (affects all windows). .TP .B Mod1-Shift-space -Toggle focused window between floating and non-floating state. +Toggle focused window between floating and non-floating state (tiling mode only). .TP .B Mod1-[1..n] View all windows with -- 2.20.1 From e06447ee88154a4acdde518299a32b083e3fbcba Mon Sep 17 00:00:00 2001 From: "arg@mig29" Date: Thu, 30 Nov 2006 09:19:52 +0100 Subject: [PATCH 09/16] Added tag 2.4 for changeset 32b246925086910d63147483160281a91a47479f --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 7d5cfda..3ef5ae8 100644 --- a/.hgtags +++ b/.hgtags @@ -22,3 +22,4 @@ a5567a0d30112822db2627a04a2e7aa3b6c38148 1.9 a2c465098a3b972bbed00feda9804b6aae1e9531 2.1 7e92f58754ae6edb3225f26d754bd89c1ff458cf 2.2 719b37b37b0df829d7cf017ac70e353088fe5849 2.3 +32b246925086910d63147483160281a91a47479f 2.4 -- 2.20.1 From 42fd392e05d54db441ecbf534cfd67d20473aac0 Mon Sep 17 00:00:00 2001 From: "arg@mig29" Date: Thu, 30 Nov 2006 15:27:43 +0100 Subject: [PATCH 10/16] removed viewall(), replaced with view(-1); added tag(-1) to tag a client with all tags (new key combo MODKEY-Shift-0) --- config.arg.h | 3 ++- config.default.h | 3 ++- dwm.1 | 3 +++ tag.c | 2 +- view.c | 11 +---------- 5 files changed, 9 insertions(+), 13 deletions(-) diff --git a/config.arg.h b/config.arg.h index ee63eb1..7c05dcb 100644 --- a/config.arg.h +++ b/config.arg.h @@ -35,6 +35,7 @@ static Key key[] = { \ { MODKEY, XK_Return, zoom, { 0 } }, \ { MODKEY, XK_g, resizemaster, { .i = 15 } }, \ { MODKEY, XK_s, resizemaster, { .i = -15 } }, \ + { MODKEY|ShiftMask, XK_0, tag, { .i = -1 } }, \ { MODKEY|ShiftMask, XK_1, tag, { .i = 0 } }, \ { MODKEY|ShiftMask, XK_2, tag, { .i = 1 } }, \ { MODKEY|ShiftMask, XK_3, tag, { .i = 2 } }, \ @@ -46,7 +47,7 @@ static Key key[] = { \ { MODKEY|ShiftMask, XK_c, killclient, { 0 } }, \ { MODKEY, XK_space, togglemode, { 0 } }, \ { MODKEY|ShiftMask, XK_space, togglefloat, { 0 } }, \ - { MODKEY, XK_0, viewall, { 0 } }, \ + { MODKEY, XK_0, view, { .i = -1 } }, \ { MODKEY, XK_1, view, { .i = 0 } }, \ { MODKEY, XK_2, view, { .i = 1 } }, \ { MODKEY, XK_3, view, { .i = 2 } }, \ diff --git a/config.default.h b/config.default.h index 077c337..091b52e 100644 --- a/config.default.h +++ b/config.default.h @@ -30,6 +30,7 @@ static Key key[] = { \ { MODKEY, XK_Return, zoom, { 0 } }, \ { MODKEY, XK_g, resizemaster, { .i = 15 } }, \ { MODKEY, XK_s, resizemaster, { .i = -15 } }, \ + { MODKEY|ShiftMask, XK_0, tag, { .i = -1 } }, \ { MODKEY|ShiftMask, XK_1, tag, { .i = 0 } }, \ { MODKEY|ShiftMask, XK_2, tag, { .i = 1 } }, \ { MODKEY|ShiftMask, XK_3, tag, { .i = 2 } }, \ @@ -43,7 +44,7 @@ static Key key[] = { \ { MODKEY|ShiftMask, XK_c, killclient, { 0 } }, \ { MODKEY, XK_space, togglemode, { 0 } }, \ { MODKEY|ShiftMask, XK_space, togglefloat, { 0 } }, \ - { MODKEY, XK_0, viewall, { 0 } }, \ + { MODKEY, XK_0, view, { .i = -1 } }, \ { MODKEY, XK_1, view, { .i = 0 } }, \ { MODKEY, XK_2, view, { .i = 1 } }, \ { MODKEY, XK_3, view, { .i = 2 } }, \ diff --git a/dwm.1 b/dwm.1 index 298585e..19e881f 100644 --- a/dwm.1 +++ b/dwm.1 @@ -75,6 +75,9 @@ Apply .RB nth tag to current window. .TP +.B Mod1-Shift-0 +Apply all tags to current window. +.TP .B Mod1-Control-Shift-[1..n] Add/remove .B nth diff --git a/tag.c b/tag.c index b1a2eb9..20a0a17 100644 --- a/tag.c +++ b/tag.c @@ -113,7 +113,7 @@ tag(Arg *arg) { if(!sel) return; for(i = 0; i < ntags; i++) - sel->tags[i] = False; + sel->tags[i] = (arg->i == -1) ? True : False; sel->tags[arg->i] = True; arrange(); } diff --git a/view.c b/view.c index c11e349..14cfc1d 100644 --- a/view.c +++ b/view.c @@ -233,20 +233,11 @@ view(Arg *arg) { unsigned int i; for(i = 0; i < ntags; i++) - seltag[i] = False; + seltag[i] = (arg->i == -1) ? True : False; seltag[arg->i] = True; arrange(); } -void -viewall(Arg *arg) { - unsigned int i; - - for(i = 0; i < ntags; i++) - seltag[i] = True; - arrange(); -} - void zoom(Arg *arg) { unsigned int n; -- 2.20.1 From c2ed26b711f0501ecbeac80b67909611ae008ee9 Mon Sep 17 00:00:00 2001 From: "arg@mig29" Date: Thu, 30 Nov 2006 15:51:26 +0100 Subject: [PATCH 11/16] next version will be 2.5 --- config.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.mk b/config.mk index 1392692..a2ca771 100644 --- a/config.mk +++ b/config.mk @@ -1,5 +1,5 @@ # dwm version -VERSION = 2.4 +VERSION = 2.5 # Customize below to fit your system -- 2.20.1 From 89e1acb0bbea5969bf2f360467386cb1d58fd1e0 Mon Sep 17 00:00:00 2001 From: "arg@mig29" Date: Thu, 30 Nov 2006 17:01:39 +0100 Subject: [PATCH 12/16] removed viewall signature from dwm.h --- dwm.h | 1 - 1 file changed, 1 deletion(-) diff --git a/dwm.h b/dwm.h index 2f3ce74..2def8f2 100644 --- a/dwm.h +++ b/dwm.h @@ -168,5 +168,4 @@ extern void togglefloat(Arg *arg); /* toggles focusesd client between floating/ extern void togglemode(Arg *arg); /* toggles global arrange function (dotile/dofloat) */ extern void toggleview(Arg *arg); /* toggles the tag with arg's index (in)visible */ extern void view(Arg *arg); /* views the tag with arg's index */ -extern void viewall(Arg *arg); /* views all tags, arg is ignored */ extern void zoom(Arg *arg); /* zooms the focused client to master area, arg is ignored */ -- 2.20.1 From 0c9d9a3d949c0c0c3fb24417b54fca8182f54cb6 Mon Sep 17 00:00:00 2001 From: "arg@mig29" Date: Fri, 1 Dec 2006 09:52:15 +0100 Subject: [PATCH 13/16] improved tag indicator --- draw.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/draw.c b/draw.c index 671062c..f5f9556 100644 --- a/draw.c +++ b/draw.c @@ -30,12 +30,13 @@ textnw(const char *text, unsigned int len) { } static void -drawtext(const char *text, unsigned long col[ColLast], Bool ldot, Bool rdot) { +drawtext(const char *text, unsigned long col[ColLast], Bool border, Bool ldot) { int x, y, w, h; static char buf[256]; unsigned int len, olen; XGCValues gcv; XRectangle r = { dc.x, dc.y, dc.w, dc.h }; + XPoint pt[5]; XSetForeground(dpy, dc.gc, col[ColBG]); XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); @@ -79,11 +80,18 @@ drawtext(const char *text, unsigned long col[ColLast], Bool ldot, Bool rdot) { r.width = r.height = (h + 2) / 4; XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); } - if(rdot) { - r.width = r.height = (h + 2) / 4; - r.x = dc.x + dc.w - r.width - 2; - r.y = dc.y + dc.h - r.height - 2; - XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); + if(border) { + pt[0].x = dc.x; + pt[0].y = dc.y; + pt[1].x = dc.w - 1; + pt[1].y = 0; + pt[2].x = 0; + pt[2].y = dc.h - 1; + pt[3].x = -(dc.w - 1); + pt[3].y = 0; + pt[4].x = 0; + pt[4].y = -(dc.h - 1); + XDrawLines(dpy, dc.drawable, dc.gc, pt, 5, CoordModePrevious); } } -- 2.20.1 From 49f0ee329daecb1ad321cca4716bcfe854a74b14 Mon Sep 17 00:00:00 2001 From: "arg@mig29" Date: Fri, 1 Dec 2006 10:16:10 +0100 Subject: [PATCH 14/16] changed things like I described in last mail --- draw.c | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/draw.c b/draw.c index f5f9556..151207a 100644 --- a/draw.c +++ b/draw.c @@ -30,13 +30,13 @@ textnw(const char *text, unsigned int len) { } static void -drawtext(const char *text, unsigned long col[ColLast], Bool border, Bool ldot) { +drawtext(const char *text, unsigned long col[ColLast], Bool dot, Bool border) { int x, y, w, h; static char buf[256]; unsigned int len, olen; XGCValues gcv; XRectangle r = { dc.x, dc.y, dc.w, dc.h }; - XPoint pt[5]; + XPoint pt[3]; XSetForeground(dpy, dc.gc, col[ColBG]); XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); @@ -74,24 +74,20 @@ drawtext(const char *text, unsigned long col[ColLast], Bool border, Bool ldot) { XChangeGC(dpy, dc.gc, GCForeground | GCFont, &gcv); XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len); } - if(ldot) { - r.x = dc.x + 2; - r.y = dc.y + 2; + if(dot) { r.width = r.height = (h + 2) / 4; + r.x = dc.x + dc.w - r.width - 2; + r.y = dc.y + dc.h - r.height - 2; XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); } if(border) { pt[0].x = dc.x; - pt[0].y = dc.y; - pt[1].x = dc.w - 1; - pt[1].y = 0; - pt[2].x = 0; - pt[2].y = dc.h - 1; - pt[3].x = -(dc.w - 1); - pt[3].y = 0; - pt[4].x = 0; - pt[4].y = -(dc.h - 1); - XDrawLines(dpy, dc.drawable, dc.gc, pt, 5, CoordModePrevious); + pt[0].y = dc.y + dc.h - 1; + pt[1].x = 0; + pt[1].y = -(dc.h - 1); + pt[2].x = dc.w - 1; + pt[2].y = 0; + XDrawLines(dpy, dc.drawable, dc.gc, pt, 3, CoordModePrevious); } } -- 2.20.1 From a678ee636547c8a7a2651250960277629c33c4c3 Mon Sep 17 00:00:00 2001 From: "arg@mig29" Date: Fri, 1 Dec 2006 12:25:23 +0100 Subject: [PATCH 15/16] final indicators --- draw.c | 4 ++-- dwm.1 | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/draw.c b/draw.c index 151207a..bec0157 100644 --- a/draw.c +++ b/draw.c @@ -75,9 +75,9 @@ drawtext(const char *text, unsigned long col[ColLast], Bool dot, Bool border) { XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len); } if(dot) { + r.x = dc.x + 2; + r.y = dc.y + 2; r.width = r.height = (h + 2) / 4; - r.x = dc.x + dc.w - r.width - 2; - r.y = dc.y + dc.h - r.height - 2; XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); } if(border) { diff --git a/dwm.1 b/dwm.1 index 19e881f..fda4072 100644 --- a/dwm.1 +++ b/dwm.1 @@ -22,8 +22,7 @@ dwm contains a small status bar which displays all available tags, the mode, the title of the focused window, and the text read from standard input. The selected tags are indicated with a different color. The tags of the focused window are indicated with a small point in the top left corner. The tags which -are applied to one or more clients are indicated with a small point in the bottom -right corner. +are applied to one or more clients are indicated with a pseudo-3d border. .P dwm draws a 1-pixel border around windows to indicate the focus state. Unfocused windows contain a small bar in front of them displaying their title. -- 2.20.1 From c34e4e4b39a8c014e0798e47844b22f470ab9092 Mon Sep 17 00:00:00 2001 From: "arg@mig29" Date: Fri, 1 Dec 2006 12:39:13 +0100 Subject: [PATCH 16/16] removing the -1 on final indicators, looks cleaner --- draw.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/draw.c b/draw.c index bec0157..c60df6d 100644 --- a/draw.c +++ b/draw.c @@ -82,10 +82,10 @@ drawtext(const char *text, unsigned long col[ColLast], Bool dot, Bool border) { } if(border) { pt[0].x = dc.x; - pt[0].y = dc.y + dc.h - 1; + pt[0].y = dc.y + dc.h; pt[1].x = 0; - pt[1].y = -(dc.h - 1); - pt[2].x = dc.w - 1; + pt[1].y = -dc.h; + pt[2].x = dc.w; pt[2].y = 0; XDrawLines(dpy, dc.drawable, dc.gc, pt, 3, CoordModePrevious); } -- 2.20.1