setlayout and setgeom are now togglable again
authorAnselm R Garbe <garbeam@gmail.com>
Mon, 24 Mar 2008 13:49:19 +0000 (13:49 +0000)
committerAnselm R Garbe <garbeam@gmail.com>
Mon, 24 Mar 2008 13:49:19 +0000 (13:49 +0000)
config.def.h
dwm.1
dwm.c

index b62e938..9c15313 100644 (file)
@@ -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
index a2d6767..56cd2ab 100644 (file)
--- 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
index 54d021f..e1c8c20 100644 (file)
--- 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)