dwm-movethrow-6.2.diff - sites - public wiki contents of suckless.org | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
dwm-movethrow-6.2.diff (3044B) | |
--- | |
1 This patch is heavily inspired by the moveplace patch. It allows to "thr… | |
2 windows in 4 directions, which makes them floating (if not floating alre… | |
3 and then moves them in the chosen direction until they hit the border of… | |
4 screen. Unlike moveplace, the windows get to keep their original size. | |
5 Additionally, there's a "middle direction" defined which simply centers a | |
6 window on the screen. | |
7 | |
8 diff --git a/config.def.h b/config.def.h | |
9 index 1c0b587..cd8b0a7 100644 | |
10 --- a/config.def.h | |
11 +++ b/config.def.h | |
12 @@ -84,6 +84,11 @@ static Key keys[] = { | |
13 { MODKEY, XK_period, focusmon, {.i … | |
14 { MODKEY|ShiftMask, XK_comma, tagmon, {.i … | |
15 { MODKEY|ShiftMask, XK_period, tagmon, {.i … | |
16 + { MODKEY|ShiftMask, XK_Up, movethrow, {.ui… | |
17 + { MODKEY|ShiftMask, XK_Down, movethrow, {.ui… | |
18 + { MODKEY|ShiftMask, XK_Left, movethrow, {.ui… | |
19 + { MODKEY|ShiftMask, XK_Right, movethrow, {.ui… | |
20 + { MODKEY|ShiftMask, XK_m, movethrow, {.ui… | |
21 TAGKEYS( XK_1, 0) | |
22 TAGKEYS( XK_2, 1) | |
23 TAGKEYS( XK_3, 2) | |
24 diff --git a/dwm.c b/dwm.c | |
25 index 4465af1..16f4b08 100644 | |
26 --- a/dwm.c | |
27 +++ b/dwm.c | |
28 @@ -66,6 +66,7 @@ enum { NetSupported, NetWMName, NetWMState, NetWMCheck, | |
29 enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* defaul… | |
30 enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, | |
31 ClkClientWin, ClkRootWin, ClkLast }; /* clicks */ | |
32 +enum { DIR_N, DIR_W, DIR_C, DIR_E, DIR_S, }; /* coordinates for movethr… | |
33 | |
34 typedef union { | |
35 int i; | |
36 @@ -183,6 +184,7 @@ static void maprequest(XEvent *e); | |
37 static void monocle(Monitor *m); | |
38 static void motionnotify(XEvent *e); | |
39 static void movemouse(const Arg *arg); | |
40 +static void movethrow(const Arg *arg); | |
41 static Client *nexttiled(Client *c); | |
42 static void pop(Client *); | |
43 static void propertynotify(XEvent *e); | |
44 @@ -1192,6 +1194,46 @@ movemouse(const Arg *arg) | |
45 } | |
46 } | |
47 | |
48 +void | |
49 +movethrow(const Arg *arg) | |
50 +{ | |
51 + Client *c; | |
52 + int nh, nw, nx, ny; | |
53 + c = selmon->sel; | |
54 + if (!c) | |
55 + return; | |
56 + if (selmon->lt[selmon->sellt]->arrange && !c->isfloating) | |
57 + togglefloating(NULL); | |
58 + nw = c->w; | |
59 + nh = c->h; | |
60 + switch(arg->ui) { | |
61 + case DIR_N: | |
62 + nx = c->x; | |
63 + ny = selmon->wy; | |
64 + break; | |
65 + case DIR_E: | |
66 + nx = selmon->wx + selmon->ww - c->w - c->bw*2; | |
67 + ny = c->y; | |
68 + break; | |
69 + case DIR_S: | |
70 + nx = c->x; | |
71 + ny = selmon->wy + selmon->wh - c->h - c->bw*2; | |
72 + break; | |
73 + case DIR_W: | |
74 + nx = selmon->wx; | |
75 + ny = c->y; | |
76 + break; | |
77 + case DIR_C: | |
78 + nx = selmon->wx + ((selmon->ww - c->w - c->bw*2… | |
79 + ny = selmon->wy + ((selmon->wh - c->h - c->bw*2… | |
80 + break; | |
81 + default: | |
82 + return; | |
83 + } | |
84 + resize(c, nx, ny, nw, nh, True); | |
85 + XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, nw/2, nh/2); | |
86 +} | |
87 + | |
88 Client * | |
89 nexttiled(Client *c) | |
90 { |