dwm

my fork of dwm
Index Commits Files Refs README LICENSE
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)