dwm

my fork of dwm
Index Commits Files Refs README LICENSE
commit 4135e34dfa61d32625ef20e8e38064b465402f4a
parent 846128a498759bfcbf363fc014e50c1bf48bdf0c
Author: Anselm R. Garbe <garbeam@gmail.com>
Date:   Sat,  4 Aug 2007 10:51:39 +0200

I introduced {H,V}RATIO and inc{h,v,}ratio() functions - the default behaves like in dwm-4.3, config.arg.h shows how I prefer the ratio being handled (for the future I plan to change const char *arg into ..., and renaming Client into Win.)
Diffstat:
Mconfig.arg.h | 9++++++---
Mconfig.default.h | 7++++---
Mdwm.h | 4++--
Mlayout.c | 53++++++++++++++++++++++++++++++++---------------------
4 files changed, 44 insertions(+), 29 deletions(-)
diff --git a/config.arg.h b/config.arg.h
@@ -31,7 +31,8 @@ static Layout layout[] = { \
     { "><>",        floating }, \
 };
 #define NMASTER            1    /* clients in master area */
-#define RATIO            .8    /* ratio of tile */
+#define HRATIO            .8    /* horizontal ratio of tile */
+#define VRATIO            .8    /* vertical ratio of tile */
 #define SNAP            32    /* snap pixel */
 
 /* key definitions */
@@ -46,8 +47,10 @@ static Key key[] = { \
         "exec urxvtcd -tr -bg '#222' -fg '#eee' -cr '#eee' +sb -fn '"FONT"'" }, \
     { MODKEY,            XK_space,    setlayout,    NULL }, \
     { MODKEY,            XK_b,        togglebar,    NULL }, \
-    { MODKEY,            XK_h,        incratio,    ".1" }, \
-    { MODKEY,            XK_l,        incratio,    "-.1" }, \
+    { MODKEY,            XK_h,        incvratio,    ".1" }, \
+    { MODKEY,            XK_h,        inchratio,    ".1" }, \
+    { MODKEY,            XK_l,        incvratio,    "-.1" }, \
+    { MODKEY,            XK_l,        inchratio,    "-.1" }, \
     { MODKEY|ShiftMask,        XK_j,        incnmaster,    "1" }, \
     { MODKEY|ShiftMask,        XK_k,        incnmaster,    "-1" }, \
     { MODKEY,            XK_j,        focusclient,    "1" }, \
diff --git a/config.default.h b/config.default.h
@@ -32,7 +32,8 @@ static Layout layout[] = { \
     { "><>",        floating }, \
 };
 #define NMASTER            1    /* clients in master area */
-#define RATIO            .8    /* ratio of tile */
+#define HRATIO            .8    /* horizontal ratio of tile */
+#define VRATIO            1    /* vertical ratio of tile */
 #define SNAP            32    /* snap pixel */
 
 /* key definitions */
@@ -44,8 +45,8 @@ static Key key[] = { \
     { MODKEY,            XK_p,        spawn,         "exe=`dmenu_path | dmenu` && exec $exe" }, \
     { MODKEY,            XK_space,    setlayout,    NULL }, \
     { MODKEY,            XK_b,        togglebar,    NULL }, \
-    { MODKEY,            XK_h,        incratio,    ".1" }, \
-    { MODKEY,            XK_l,        incratio,    "-.1" }, \
+    { MODKEY,            XK_h,        incvratio,    ".1" }, \
+    { MODKEY,            XK_l,        incvratio,    "-.1" }, \
     { MODKEY|ShiftMask,        XK_j,        incnmaster,    "1" }, \
     { MODKEY|ShiftMask,        XK_k,        incnmaster,    "-1" }, \
     { MODKEY,            XK_j,        focusclient,    "1" }, \
diff --git a/dwm.h b/dwm.h
@@ -44,7 +44,6 @@ enum { WMProtocols, WMDelete, WMState, WMLast };	/* default atoms */
 typedef struct Client Client;
 struct Client {
     char name[256];
-    float scale;
     int x, y, w, h;
     int rx, ry, rw, rh; /* revert geometry */
     int basew, baseh, incw, inch, maxw, maxh, minw, minh;
@@ -123,7 +122,8 @@ void grabkeys(void);			/* grab all keys defined in config.h */
 /* layout.c */
 void floating(void);            /* arranges all windows floating */
 void focusclient(const char *arg);    /* focuses next(1)/previous(-1) visible client */
-void incratio(const char *arg);        /* increments the tile ratio with arg's value */
+void inchratio(const char *arg);    /* increments the horizontal tile ratio with arg's value */
+void incvratio(const char *arg);    /* increments the vertical tile ratio with arg's value */
 void incnmaster(const char *arg);    /* increments nmaster with arg's index value */
 void initlayouts(void);            /* initialize layout array */
 Client *nexttiled(Client *c);        /* returns tiled successor of c */
diff --git a/layout.c b/layout.c
@@ -8,10 +8,29 @@ Layout *lt = NULL;
 
 /* static */
 
-static double ratio = RATIO;
+static double hratio = HRATIO;
+static double vratio = VRATIO;
 static unsigned int nlayouts = 0;
 static unsigned int nmaster = NMASTER;
 
+static void
+incratio(const char *arg, double *ratio, double def) {
+    double delta;
+
+    if(lt->arrange != tile)
+        return;
+    if(!arg)
+        *ratio = def;
+    else {
+        if(1 == sscanf(arg, "%lf", &delta)) {
+            if(delta + (*ratio) < .1 || delta + (*ratio) > 1.9)
+                return;
+            *ratio += delta;
+        }
+    }
+    lt->arrange();
+}
+
 static double /* simple pow() */
 spow(double x, double y)
 {
@@ -31,21 +50,21 @@ tile(void) {
     for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next))
         n++;
 
-    mw = (n <= nmaster) ? waw :  waw / (1 + ratio);
+    mw = (n <= nmaster) ? waw :  waw / (1 + hratio);
     tw = waw - mw;
 
     if(n > 0) {
         if(n < nmaster) {
             for(i = 0; i < n; i++)
-                sum += spow(ratio, i);
+                sum += spow(vratio, i);
             mscale = wah / sum;
         }
         else {
             for(i = 0; i < nmaster; i++)
-                sum += spow(ratio, i);
+                sum += spow(vratio, i);
             mscale = wah / sum;
             for(sum = 0, i = 0; i < (n - nmaster); i++)
-                sum += spow(ratio, i);
+                sum += spow(vratio, i);
             tscale = wah / sum;
         }
     }
@@ -62,7 +81,7 @@ tile(void) {
                 if(i + 1 == n || i + 1 == nmaster)
                     nh = (way + wah) - ny - (2 * c->border);
                 else
-                    nh = (mscale * spow(ratio, i)) - (2 * c->border);
+                    nh = (mscale * spow(vratio, i)) - (2 * c->border);
             }
             else { /* tile window */
                 if(i == nmaster) {
@@ -73,7 +92,7 @@ tile(void) {
                 if(i + 1 == n)
                     nh = (way + wah) - ny - (2 * c->border);
                 else
-                    nh = (tscale * spow(ratio, i - nmaster)) - (2 * c->border);
+                    nh = (tscale * spow(vratio, i - nmaster)) - (2 * c->border);
             }
             if(nh < bh) {
                 nh = bh;
@@ -133,21 +152,13 @@ focusclient(const char *arg) {
 }
 
 void
-incratio(const char *arg) {
-    double delta;
+inchratio(const char *arg) {
+    incratio(arg, &hratio, HRATIO);
+}
 
-    if(lt->arrange != tile)
-        return;
-    if(!arg)
-        ratio = RATIO;
-    else {
-        if(1 == sscanf(arg, "%lf", &delta)) {
-            if(delta + ratio < .1 || delta + ratio > 1.9)
-                return;
-            ratio += delta;
-        }
-    }
-    lt->arrange();
+void
+incvratio(const char *arg) {
+    incratio(arg, &vratio, VRATIO);
 }
 
 void