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);
signature.asc
Description: Digital signature
