commit 20cd3360876f551c0f3b4c9c5a827a64b829e6ef
parent a6a216f28cbc49afaace269c2662382a351fda24
Author: Anselm R Garbe <garbeam@gmail.com>
Date:   Mon, 24 Mar 2008 13:49:19 +0000

setlayout and setgeom are now togglable again
Diffstat:
Mconfig.def.h | 20++++++--------------
Mdwm.1 | 14++++----------
Mdwm.c | 46++++++++++++++++++++++++++++------------------
3 files changed, 38 insertions(+), 42 deletions(-)

diff --git a/config.def.h b/config.def.h @@ -22,15 +22,11 @@ Rule rules[] = { /* func name bx by bw wx wy ww wh mx my mw mh tx ty tw th mox moy mow moh */ DEFGEOM(single, 0, 0, sw, 0, bh, sw, sh-bh, wx, wy, 0.55*sw, wh, mx+mw, wy, ww-mw, wh, wx, wy, ww, wh) DEFGEOM(dual, 0, 0,1280, 0, bh, ww, wh-bh, wx, wy, 1280,800-bh, 1280, 0, ww-mw, sh, mx, my, mw, mh) -/* DEFGEOM(growmaster, bx, by, bw, wx, wy, ww, wh, mx, my, mw+20, mh, mx+mw, ty, tw-20, th, mox, moy, mow, moh) */ -/* DEFGEOM(shrinkmaster, bx, by, bw, wx, wy, ww, wh, mx, my, mw-20, mh, mx+mw, ty, tw+20, th, mox, moy, mow, moh) */ Geom geoms[] = { /* symbol function */ - { "<>", single }, /* first entry is default */ - { ")(", dual }, -/* { "+|", growmaster },*/ -/* { "|-", shrinkmaster },*/ + { "[]", single }, /* first entry is default */ + { "[][]", dual }, }; /* layout(s) */ @@ -49,22 +45,18 @@ Layout layouts[] = { #define MODKEY Mod1Mask Key keys[] = { /* modifier key function argument */ - { MODKEY, XK_a, setgeom, ")(" }, - { MODKEY, XK_d, setgeom, "<>" }, { MODKEY, XK_p, spawn, "exec dmenu_run -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"' -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'" }, - { MODKEY|ShiftMask, XK_Return, spawn, "exec uxterm" }, + { MODKEY|ShiftMask, XK_Return, spawn, "exec uxterm" }, { MODKEY, XK_j, focusnext, NULL }, { MODKEY, XK_k, focusprev, NULL }, { MODKEY, XK_r, reapply, NULL }, { MODKEY, XK_Return, zoom, NULL }, { MODKEY, XK_Tab, viewprevtag, NULL }, - { MODKEY, XK_m, setlayout, "[M]" }, - { MODKEY, XK_f, setlayout, "><>" }, - { MODKEY, XK_v, setlayout, "[]=" }, - { MODKEY, XK_h, setlayout, "[]|" }, - { MODKEY|ShiftMask, XK_space, togglefloating, NULL }, { MODKEY|ShiftMask, XK_c, killclient, NULL }, + { MODKEY, XK_space, setlayout, NULL }, + { MODKEY|ShiftMask, XK_space, togglefloating, NULL }, + { MODKEY|ControlMask, XK_space, setgeom, NULL }, { MODKEY, XK_0, view, NULL }, { MODKEY, XK_1, view, tags[0] }, { MODKEY, XK_2, view, tags[1] }, diff --git a/dwm.1 b/dwm.1 @@ -57,17 +57,11 @@ click on a tag label adds/removes that tag to/from the focused window. Start .BR xterm. .TP -.B Mod1\-f -Applies floating layout. +.B Mod1\-space +Toggles between layouts. .TP -.B Mod1\-m -Applies monocle layout. -.TP -.B Mod1\-v -Applies vertical tiled layout. -.TP -.B Mod1\-h -Applies horizontal tiled layout. +.B Mod1\-Control\-space +Toggles between geometries. .TP .B Mod1\-j Focus next window. diff --git a/dwm.c b/dwm.c @@ -322,6 +322,10 @@ buttonpress(XEvent *e) { XButtonPressedEvent *ev = &e->xbutton; if(ev->window == barwin) { + if((ev->x < bgw) && ev->button == Button1) { + setgeom(NULL); + return; + } x = bgw; for(i = 0; i < LENGTH(tags); i++) { x += textw(tags[i]); @@ -341,6 +345,8 @@ buttonpress(XEvent *e) { return; } } + if((ev->x < x + blw) && ev->button == Button1) + setlayout(NULL); } else if((c = getclient(ev->window))) { focus(c); @@ -426,7 +432,7 @@ configurenotify(XEvent *e) { if(ev->window == root && (ev->width != sw || ev->height != sh)) { sw = ev->width; sh = ev->height; - setgeom(NULL); + setgeom(geom->symbol); } } @@ -1417,12 +1423,18 @@ void setgeom(const char *arg) { unsigned int i; - for(i = 0; arg && i < LENGTH(geoms); i++) - if(!strcmp(geoms[i].symbol, arg)) - break; - if(i == LENGTH(geoms)) - return; - geom = &geoms[i]; + if(!arg) { + if(++geom == &geoms[LENGTH(geoms)]) + geom = &geoms[0]; + } + else { + for(i = 0; i < LENGTH(geoms); i++) + if(!strcmp(geoms[i].symbol, arg)) + break; + if(i == LENGTH(geoms)) + return; + geom = &geoms[i]; + } geom->apply(); updatebarpos(); arrange(); @@ -1430,20 +1442,18 @@ setgeom(const char *arg) { void setlayout(const char *arg) { - static Layout *revert = 0; unsigned int i; - if(!arg) - return; - for(i = 0; i < LENGTH(layouts); i++) - if(!strcmp(arg, layouts[i].symbol)) - break; - if(i == LENGTH(layouts)) - return; - if(revert && &layouts[i] == lt) - lt = revert; + if(!arg) { + if(++lt == &layouts[LENGTH(layouts)]) + lt = &layouts[0]; + } else { - revert = lt; + for(i = 0; i < LENGTH(layouts); i++) + if(!strcmp(arg, layouts[i].symbol)) + break; + if(i == LENGTH(layouts)) + return; lt = &layouts[i]; } if(sel)