----
- config.def.h | 4 ++++
- dwm.c | 38 ++++++++++++++++++++++++++++++++++++++
- 2 files changed, 42 insertions(+)
+This patch is heavily inspired by the moveplace patch. It allows to "throw"
+windows in 4 directions, which makes them floating (if not floating already)
+and then moves them in the chosen direction until they hit the border of the
+screen. Unlike moveplace, the windows get to keep their original size.
+Additionally, there's a "middle direction" defined which simply centers a
+window on the screen.
diff --git a/config.def.h b/config.def.h
-index 1c0b587..e873d28 100644
+index 1c0b587..cd8b0a7 100644
--- a/config.def.h
+++ b/config.def.h
_AT_@ -84,6 +84,11 @@ static Key keys[] = {
{ MODKEY, XK_period, focusmon, {.i = +1 } },
{ MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
{ MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
-+ { MODKEY|ShiftMask, XK_Up, movethrow, {.ui = WIN_N }},
-+ { MODKEY|ShiftMask, XK_Down, movethrow, {.ui = WIN_S }},
-+ { MODKEY|ShiftMask, XK_Left, movethrow, {.ui = WIN_W }},
-+ { MODKEY|ShiftMask, XK_Right, movethrow, {.ui = WIN_E }},
-+ { MODKEY|ShiftMask, XK_m, movethrow, {.ui = WIN_C }},
++ { MODKEY|ShiftMask, XK_Up, movethrow, {.ui = DIR_N }},
++ { MODKEY|ShiftMask, XK_Down, movethrow, {.ui = DIR_S }},
++ { MODKEY|ShiftMask, XK_Left, movethrow, {.ui = DIR_W }},
++ { MODKEY|ShiftMask, XK_Right, movethrow, {.ui = DIR_E }},
++ { MODKEY|ShiftMask, XK_m, movethrow, {.ui = DIR_C }},
TAGKEYS( XK_1, 0)
TAGKEYS( XK_2, 1)
TAGKEYS( XK_3, 2)
diff --git a/dwm.c b/dwm.c
-index 4465af1..df1eb05 100644
+index 4465af1..16f4b08 100644
--- a/dwm.c
+++ b/dwm.c
_AT_@ -66,6 +66,7 @@ enum { NetSupported, NetWMName, NetWMState, NetWMCheck,
_AT_@ -42,7 +33,15 @@ index 4465af1..df1eb05 100644
typedef union {
int i;
-_AT_@ -1192,6 +1193,44 @@ movemouse(const Arg *arg)
+_AT_@ -183,6 +184,7 @@ static void maprequest(XEvent *e);
+ static void monocle(Monitor *m);
+ static void motionnotify(XEvent *e);
+ static void movemouse(const Arg *arg);
++static void movethrow(const Arg *arg);
+ static Client *nexttiled(Client *c);
+ static void pop(Client *);
+ static void propertynotify(XEvent *e);
+_AT_@ -1192,6 +1194,46 @@ movemouse(const Arg *arg)
}
}
_AT_@ -52,41 +51,40 @@ index 4465af1..df1eb05 100644
+ Client *c;
+ int nh, nw, nx, ny;
+ c = selmon->sel;
++ if (!c)
++ return;
+ if (selmon->lt[selmon->sellt]->arrange && !c->isfloating)
+ togglefloating(NULL);
+ nw = c->w;
+ nh = c->h;
-+ switch(arg->ui) {
-+ case DIR_N:
-+ nx = c->x;
-+ ny = selmon->wy;
-+ break;
-+ case DIR_E:
-+ nx = selmon->wx + selmon->ww - c->w - c->bw*2;
-+ ny = c->y;
-+ break;
-+ case DIR_S:
-+ nx = c->x;
-+ ny = selmon->wy + selmon->wh - c->h - c->bw*2;
-+ break;
-+ case DIR_W:
-+ nx = selmon->wx;
-+ ny = c->y;
-+ break;
-+ case DIR_C:
-+ nx = selmon->wx + ((selmon->ww - c->w - c->bw*2) / 2);
-+ ny = selmon->wy + ((selmon->wh - c->h - c->bw*2) / 2);
-+ break;
-+ default:
-+ return;
-+ }
++ switch(arg->ui) {
++ case DIR_N:
++ nx = c->x;
++ ny = selmon->wy;
++ break;
++ case DIR_E:
++ nx = selmon->wx + selmon->ww - c->w - c->bw*2;
++ ny = c->y;
++ break;
++ case DIR_S:
++ nx = c->x;
++ ny = selmon->wy + selmon->wh - c->h - c->bw*2;
++ break;
++ case DIR_W:
++ nx = selmon->wx;
++ ny = c->y;
++ break;
++ case DIR_C:
++ nx = selmon->wx + ((selmon->ww - c->w - c->bw*2) / 2);
++ ny = selmon->wy + ((selmon->wh - c->h - c->bw*2) / 2);
++ break;
++ default:
++ return;
++ }
+ resize(c, nx, ny, nw, nh, True);
-+ XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, nw/2, nh/2);
++ XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, nw/2, nh/2);
+}
+
Client *
nexttiled(Client *c)
{
---
-2.27.0
-
Received on Sat Feb 10 2024 - 21:05:55 CET
This archive was generated by hypermail 2.3.0 : Sat Feb 10 2024 - 21:12:44 CET