about summary refs log tree commit diff
diff options
context:
space:
mode:
authorokan <okan>2020-04-16 13:32:35 +0000
committerokan <okan>2020-04-16 13:32:35 +0000
commit6407eb9bc1380d879f354c0331dbb5ea5302fe51 (patch)
tree7d49473b40db245157831e6b0a8df3fc995e3ded
parent6afdd483c774925dacc39dcc2b290d3bbfacdf21 (diff)
downloadcwm-6407eb9bc1380d879f354c0331dbb5ea5302fe51.tar.gz
cwm-6407eb9bc1380d879f354c0331dbb5ea5302fe51.tar.xz
cwm-6407eb9bc1380d879f354c0331dbb5ea5302fe51.zip
Allow configuring a percentage window size of the master window during
htile/vtile actions. From Uwe Werler, with a few manpage tweaks.
-rw-r--r--calmwm.h2
-rw-r--r--client.c6
-rw-r--r--conf.c2
-rw-r--r--cwmrc.522
-rw-r--r--parse.y18
5 files changed, 45 insertions, 5 deletions
diff --git a/calmwm.h b/calmwm.h
index 6fa5906..9ae2afe 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -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;
diff --git a/client.c b/client.c
index 61b2cf4..cfdd048 100644
--- a/client.c
+++ b/client.c
@@ -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);
diff --git a/conf.c b/conf.c
index bd06294..a3026cf 100644
--- a/conf.c
+++ b/conf.c
@@ -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;
diff --git a/cwmrc.5 b/cwmrc.5
index fb07e2e..ab70d25 100644
--- a/cwmrc.5
+++ b/cwmrc.5
@@ -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 + border honored).
 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.
diff --git a/parse.y b/parse.y
index 04e7bd4..0138fdb 100644
--- a/parse.y
+++ b/parse.y
@@ -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}
 	};