On Fri 2020.03.27 at 00:30 +0000, Uwe Werler wrote:
> Hello @tech,
> 
> with this diff https://marc.info/?l=openbsd-tech&m=149192690925713&w=2 the
> behaviour of cwm changed so vtile and htile always use 50% of the screen.
> 
> This is a reasonable default but sometimes I want to have the master windows
> be bigger.
> 
> Inspired by this patch https://marc.info/?l=openbsd-tech&m=154887686615696&w=2
> I suggest the following diff.
> 
> This adds two new config options "htile percent" and "vtile percent" which
> define how much of the screen the current windows should occupy as the master
> window. If set to "0" then the old behaviour is restored where the current
> vertical or horizontal size of the window defines the size of the master
> window. If unset the current behaviour is unchaged that means the master
> windows uses half of the screen size.
> 
> For example in .cwmrc:
> 
> htile 66
> vtile 0
> 
> For window-htile the master window will occupy 66% of the screen high or for
> window-vtile the current window width defines the screen width of the master
> window.
> 
> Any thoughts?

I'm not a tiling user, but I have no real objection. Not a fan of the config
option, but I can't think of anything else off the top of my head. That said,
outside of a spacing fixes, I did re-word the cwmrc.5 bits as such (if it reads
well to other tile users):

     htile percent
             Set the percentage of screen the master window should occupy
             after calling window-htile.  If set to 0, the horizontal size of
             the master window will remain unchanged.  The default is 50.

     vtile percent
             Set the percentage of screen the master window should occupy
             after calling window-vtile.  If set to 0, the vertical size of
             the master window will remain unchanged.  The default is 50.


Index: calmwm.h
===================================================================
RCS file: /home/open/cvs/xenocara/app/cwm/calmwm.h,v
retrieving revision 1.374
diff -u -p -r1.374 calmwm.h
--- calmwm.h    24 Mar 2020 14:47:29 -0000      1.374
+++ calmwm.h    31 Mar 2020 12:04:21 -0000
@@ -291,6 +291,8 @@ struct conf {
        int                      bwidth;
        int                      mamount;
        int                      snapdist;
+       int                      htile;
+       int                      vtile;
        struct gap               gap;
        char                    *color[CWM_COLOR_NITEMS];
        char                    *font;
Index: client.c
===================================================================
RCS file: /home/open/cvs/xenocara/app/cwm/client.c,v
retrieving revision 1.262
diff -u -p -r1.262 client.c
--- client.c    24 Mar 2020 14:47:29 -0000      1.262
+++ client.c    31 Mar 2020 12:05:51 -0000
@@ -940,7 +940,8 @@ client_htile(struct client_ctx *cc)
        cc->geom.x = area.x;
        cc->geom.y = area.y;
        cc->geom.w = area.w - (cc->bwidth * 2);
-       cc->geom.h = (area.h - (cc->bwidth * 2)) / 2;
+       if (Conf.htile > 0)
+               cc->geom.h = ((area.h - (cc->bwidth * 2)) * Conf.htile) / 100;
        client_resize(cc, 1);
        client_ptr_warp(cc);
 
@@ -1007,7 +1008,8 @@ client_vtile(struct client_ctx *cc)
        cc->flags &= ~CLIENT_VMAXIMIZED;
        cc->geom.x = area.x;
        cc->geom.y = area.y;
-       cc->geom.w = (area.w - (cc->bwidth * 2)) / 2;
+       if (Conf.vtile > 0)
+               cc->geom.w = ((area.w - (cc->bwidth * 2)) * Conf.vtile) / 100;
        cc->geom.h = area.h - (cc->bwidth * 2);
        client_resize(cc, 1);
        client_ptr_warp(cc);
Index: conf.c
===================================================================
RCS file: /home/open/cvs/xenocara/app/cwm/conf.c,v
retrieving revision 1.251
diff -u -p -r1.251 conf.c
--- conf.c      27 Feb 2020 14:56:39 -0000      1.251
+++ conf.c      31 Mar 2020 12:04:21 -0000
@@ -281,6 +281,8 @@ conf_init(struct conf *c)
        c->stickygroups = 0;
        c->bwidth = 1;
        c->mamount = 1;
+       c->htile = 50;
+       c->vtile = 50;
        c->snapdist = 0;
        c->ngroups = 0;
        c->nameqlen = 5;
Index: cwmrc.5
===================================================================
RCS file: /home/open/cvs/xenocara/app/cwm/cwmrc.5,v
retrieving revision 1.75
diff -u -p -r1.75 cwmrc.5
--- cwmrc.5     13 Mar 2020 20:50:07 -0000      1.75
+++ cwmrc.5     31 Mar 2020 12:31:46 -0000
@@ -183,6 +183,13 @@ This
 can be used for applications such as
 .Xr xclock 1 ,
 where the user may wish to remain visible.
+.It Ic htile Ar percent
+Set the percentage of screen the master window should occupy
+after calling
+.Ic window-htile .
+If set to 0, the horizontal size of the master window will
+remain unchanged.
+The default is 50.
 .It Ic ignore Ar windowname
 Ignore, and do not warp to, windows with the name
 .Ar windowname
@@ -216,6 +223,13 @@ A special
 keyword
 .Dq all
 can be used to unbind all buttons.
+.It Ic vtile Ar percent
+Set the percentage of screen the master window should occupy
+after calling
+.Ic window-vtile .
+If set to 0, the vertical size of the master window will
+remain unchanged.
+The default is 50.
 .It Ic wm Ar name path
 Every
 .Ar name
@@ -303,11 +317,15 @@ Vertically maximize current window (gap 
 Horizontally maximize current window (gap + border honored).
 .It window-htile
 Current window is placed at the top of the screen, maximized
-horizontally and resized to half of the vertical screen space.
+horizontally and resized to
+.Ar htile
+(default half) of the vertical screen space.
 Other windows in its group share remaining screen space.
 .It window-vtile
 Current window is placed on the left of the screen, maximized vertically
-and resized to half of the horizontal screen space.
+and resized to
+.Ar vtile
+(default half) of the horizontal screen space.
 Other windows in its group share remaining screen space.
 .It window-move
 Move current window.
Index: parse.y
===================================================================
RCS file: /home/open/cvs/xenocara/app/cwm/parse.y,v
retrieving revision 1.72
diff -u -p -r1.72 parse.y
--- parse.y     9 Nov 2018 16:00:54 -0000       1.72
+++ parse.y     31 Mar 2020 12:04:21 -0000
@@ -71,7 +71,7 @@ typedef struct {
 %token BINDKEY UNBINDKEY BINDMOUSE UNBINDMOUSE
 %token FONTNAME STICKY GAP
 %token AUTOGROUP COMMAND IGNORE WM
-%token YES NO BORDERWIDTH MOVEAMOUNT
+%token YES NO BORDERWIDTH MOVEAMOUNT HTILE VTILE
 %token COLOR SNAPDIST
 %token ACTIVEBORDER INACTIVEBORDER URGENCYBORDER
 %token GROUPBORDER UNGROUPBORDER
@@ -122,6 +122,20 @@ main               : FONTNAME STRING               {
                        }
                        conf->bwidth = $2;
                }
+               | HTILE NUMBER {
+                       if ($2 < 0 || $2 > 99) {
+                               yyerror("invalid htile percent");
+                               YYERROR;
+                       }
+                       conf->htile = $2;
+               }
+               | VTILE NUMBER {
+                       if ($2 < 0 || $2 > 99) {
+                               yyerror("invalid vtile percent");
+                               YYERROR;
+                       }
+                       conf->vtile = $2;
+               }
                | MOVEAMOUNT NUMBER {
                        if ($2 < 0 || $2 > INT_MAX) {
                                yyerror("invalid movemount");
@@ -316,6 +330,7 @@ lookup(char *s)
                { "fontname",           FONTNAME},
                { "gap",                GAP},
                { "groupborder",        GROUPBORDER},
+               { "htile",              HTILE},
                { "ignore",             IGNORE},
                { "inactiveborder",     INACTIVEBORDER},
                { "menubg",             MENUBG},
@@ -329,6 +344,7 @@ lookup(char *s)
                { "unbind-mouse",       UNBINDMOUSE},
                { "ungroupborder",      UNGROUPBORDER},
                { "urgencyborder",      URGENCYBORDER},
+               { "vtile",              VTILE},
                { "wm",                 WM},
                { "yes",                YES}
        };

Reply via email to