On Fri 24-08-2007 20:56, Alessandro Dotti Contra wrote:

> On Fri, Aug 24, 2007 at 08:44:03PM +0200, pancake wrote:  |There's
> a patch called moveresize that allows you to do this: here's if you
> |can't find't anywhere. but i think it's in the kiwi.

I've attached the current version of moveresize and another patch to
do vertical/horziontal maximization of a window.
-- 
Jan Christoph Ebersbach
Have you ever read God's love letter to you? http://www.gottkennen.com/
diff -r 45ab12331044 config.default.h
--- a/config.default.h	Wed Aug 22 21:35:22 2007 +0200
+++ b/config.default.h	Wed Aug 22 21:50:15 2007 +0200
@@ -103,6 +103,10 @@ Key keys[] = { \
 	{ MODKEY|ShiftMask,		XK_l,		moveresize,		"0x 0y 25w 0h" }, \
 	{ MODKEY|ShiftMask,		XK_j,		moveresize,		"0x 0y 0w 25h" }, \
 	{ MODKEY|ShiftMask,		XK_k,		moveresize,		"0x 0y 0w -25h" }, \
+	{ MODKEY|ControlMask|ShiftMask,			XK_h,		togglehorizontalmax,	NULL }, \
+	{ MODKEY|ControlMask|ShiftMask,			XK_l,		togglehorizontalmax,	NULL }, \
+	{ MODKEY|ControlMask|ShiftMask,			XK_j,		toggleverticalmax,	NULL }, \
+	{ MODKEY|ControlMask|ShiftMask,			XK_k,		toggleverticalmax,	NULL }, \
 	{ MODKEY|ShiftMask,		XK_F1,		tagall,		"F1" }, \
 	{ MODKEY|ShiftMask,		XK_F2,		tagall,		"F2" }, \
 	{ MODKEY|ShiftMask,		XK_F3,		tagall,		"F3" }, \
diff -r 45ab12331044 dwm.h
--- a/dwm.h	Wed Aug 22 21:35:22 2007 +0200
+++ b/dwm.h	Wed Aug 22 21:50:16 2007 +0200
@@ -141,6 +141,8 @@ void togglebar(const char *arg);	/* show
 void togglebar(const char *arg);	/* shows/hides the bar */
 void togglefloating(const char *arg);	/* toggles sel between floating/tiled state */
 void togglemax(const char *arg);	/* toggles maximization of floating client */
+void togglehorizontalmax(const char *arg);		/* toggles horizontal maximization of floating client */
+void toggleverticalmax(const char *arg);		/* toggles vertical maximization of floating client */
 void toggletag(const char *arg);	/* toggles sel tags with arg's index */
 void toggleview(const char *arg);	/* toggles the tag with arg's index (in)visible */
 void updatebarpos(void);		/* updates the bar position */
diff -r 45ab12331044 screen.c
--- a/screen.c	Wed Aug 22 21:35:22 2007 +0200
+++ b/screen.c	Wed Aug 22 21:50:16 2007 +0200
@@ -293,7 +293,7 @@ togglefloating(const char *arg) {
 }
 
 void
-togglemax(const char *arg) {
+maximize(int x, int y, int w, int h) {
 	XEvent ev;
 
 	if(!sel || (!isfloating() && !sel->isfloating) || sel->isfixed)
@@ -303,12 +303,29 @@ togglemax(const char *arg) {
 		sel->ry = sel->y;
 		sel->rw = sel->w;
 		sel->rh = sel->h;
-		resize(sel, wax, way, waw - 2 * sel->border, wah - 2 * sel->border, True);
+		resize(sel, x, y, w, h, True);
 	}
 	else
 		resize(sel, sel->rx, sel->ry, sel->rw, sel->rh, True);
 	drawstatus();
 	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
+}
+
+void
+togglemax(const char *arg) {
+	maximize(wax, way, waw - 2 * BORDERPX, wah - 2 * BORDERPX);
+}
+
+void
+toggleverticalmax(const char *arg) {
+	if (sel)
+		maximize(sel->x, way, sel->w, wah - 2 * BORDERPX);
+}
+
+void
+togglehorizontalmax(const char *arg) {
+	if (sel)
+		maximize(wax, sel->y, waw - 2 * BORDERPX, sel->h);
 }
 
 void
diff -r bfa2c4d3298f client.c
--- a/client.c	Fri Aug 24 11:09:28 2007 +0200
+++ b/client.c	Fri Aug 24 11:17:58 2007 +0200
@@ -1,5 +1,6 @@
 /* See LICENSE file for copyright and license details. */
 #include "dwm.h"
+#include <stdio.h>
 #include <stdlib.h>
 #include <X11/Xutil.h>
 
@@ -383,3 +384,36 @@ updatetitle(Client *c) {
 	if(!gettextprop(c->win, netatom[NetWMName], c->name, sizeof c->name))
 		gettextprop(c->win, wmatom[WMName], c->name, sizeof c->name);
 }
+
+void
+moveresize(const char *arg) {
+	int x, y, w, h, nx, ny, nw, nh, ox, oy, ow, oh;
+	char xAbs, yAbs, wAbs, hAbs;
+	int mx, my, dx, dy, nmx, nmy;
+	unsigned int dui;
+	Window dummy;
+
+	if (!isfloating())
+		if (!sel || !sel->isfloating || !arg)
+			return;
+	if(sscanf(arg, "%d%c %d%c %d%c %d%c", &x, &xAbs, &y, &yAbs, &w, &wAbs, &h, &hAbs) != 8)
+		return;
+	nx = xAbs == 'X' ? x : sel->x + x;
+	ny = yAbs == 'Y' ? y : sel->y + y;
+	nw = wAbs == 'W' ? w : sel->w + w;
+	nh = hAbs == 'H' ? h : sel->h + h;
+
+	ox = sel->x;
+	oy = sel->y;
+	ow = sel->w;
+	oh = sel->h;
+
+	Bool xqp = XQueryPointer(dpy, root, &dummy, &dummy, &mx, &my, &dx, &dy, &dui);
+	resize(sel, nx, ny, nw, nh, True);
+	if (xqp && ox <= mx && (ox + ow) >= mx && oy <= my && (oy + oh) >= my)
+	{
+		nmx = mx-ox+sel->w-ow-1 < 0 ? 0 : mx-ox+sel->w-ow-1;
+		nmy = my-oy+sel->h-oh-1 < 0 ? 0 : my-oy+sel->h-oh-1;
+		XWarpPointer(dpy, None, sel->win, 0, 0, 0, 0, nmx, nmy);
+	}
+}
diff -r bfa2c4d3298f config.default.h
--- a/config.default.h	Fri Aug 24 11:09:28 2007 +0200
+++ b/config.default.h	Fri Aug 24 11:17:58 2007 +0200
@@ -44,10 +44,10 @@ Key keys[] = { \
 	{ MODKEY,			XK_p,		spawn, 		"exe=`dmenu_path | dmenu` && exec $exe" }, \
 	{ MODKEY,			XK_space,	setlayout,	NULL }, \
 	{ MODKEY,			XK_b,		togglebar,	NULL }, \
-	{ MODKEY,			XK_j,		focusnext,	NULL }, \
-	{ MODKEY,			XK_k,		focusprev,	NULL }, \
-	{ MODKEY,			XK_h,		setmwfact,	"-0.05" }, \
-	{ MODKEY,			XK_l,		setmwfact,	"+0.05" }, \
+	{ MODKEY,			XK_n,		focusnext,	NULL }, \
+	{ MODKEY,			XK_p,		focusprev,	NULL }, \
+	{ MODKEY,			XK_s,		setmwfact,	"-0.05" }, \
+	{ MODKEY,			XK_g,		setmwfact,	"+0.05" }, \
 	{ MODKEY,			XK_m,		togglemax,	NULL }, \
 	{ MODKEY,			XK_Return,	zoom,		NULL }, \
 	{ MODKEY|ShiftMask,		XK_space,	togglefloating,	NULL }, \
@@ -91,4 +91,16 @@ Key keys[] = { \
 	{ MODKEY|ControlMask|ShiftMask,	XK_8,		toggletag,	tags[7] }, \
 	{ MODKEY|ControlMask|ShiftMask,	XK_9,		toggletag,	tags[8] }, \
 	{ MODKEY|ShiftMask,		XK_q,		quit,		NULL }, \
+	{ MODKEY,			XK_h,		moveresize,		"-25x 0y 0w 0h" }, \
+	{ MODKEY,			XK_l,		moveresize,		"25x 0y 0w 0h" }, \
+	{ MODKEY,			XK_j,		moveresize,		"0x 25y 0w 0h" }, \
+	{ MODKEY,			XK_k,		moveresize,		"0x -25y 0w 0h" }, \
+	{ MODKEY|ControlMask,		XK_h,		moveresize,		"0X 0y 0w 0h" }, \
+	{ MODKEY|ControlMask,		XK_l,		moveresize,		"9000X 0y 0w 0h" }, \
+	{ MODKEY|ControlMask,		XK_j,		moveresize,		"0x 9000Y 0w 0h" }, \
+	{ MODKEY|ControlMask,		XK_k,		moveresize,		"0x 15Y 0w 0h" }, \
+	{ MODKEY|ShiftMask,		XK_h,		moveresize,		"0x 0y -25w 0h" }, \
+	{ MODKEY|ShiftMask,		XK_l,		moveresize,		"0x 0y 25w 0h" }, \
+	{ MODKEY|ShiftMask,		XK_j,		moveresize,		"0x 0y 0w 25h" }, \
+	{ MODKEY|ShiftMask,		XK_k,		moveresize,		"0x 0y 0w -25h" }, \
 };
diff -r bfa2c4d3298f dwm.h
--- a/dwm.h	Fri Aug 24 11:09:28 2007 +0200
+++ b/dwm.h	Fri Aug 24 11:17:58 2007 +0200
@@ -102,6 +102,7 @@ void unmanage(Client *c);		/* unmanage c
 void unmanage(Client *c);		/* unmanage c */
 void updatesizehints(Client *c);	/* update the size hint variables of c */
 void updatetitle(Client *c);		/* update the name of c */
+void moveresize(const char *arg);		/* move or resize client */
 
 /* draw.c */
 void drawstatus(void);			/* draw the bar */
diff -r bfa2c4d3298f event.c
--- a/event.c	Fri Aug 24 11:09:28 2007 +0200
+++ b/event.c	Fri Aug 24 11:17:58 2007 +0200
@@ -37,7 +37,6 @@ movemouse(Client *c) {
 	if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
 			None, cursor[CurMove], CurrentTime) != GrabSuccess)
 		return;
-	c->ismax = False;
 	XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui);
 	for(;;) {
 		XMaskEvent(dpy, MOUSEMASK | ExposureMask | SubstructureRedirectMask, &ev);

Attachment: signature.asc
Description: Digital signature

Reply via email to