dwm-movekeyboard-6.4.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
dwm-movekeyboard-6.4.diff (3693B)
---
1 From daf4eab44e319d78cffecf4133f8309c826fe6b9 Mon Sep 17 00:00:00 2001
2 From: mrmine <mrmine1@proton.me>
3 Date: Sun, 11 Dec 2022 23:31:46 +0100
4 Subject: [PATCH] This Patch adds the ability to move floating windows on the x
5 and y axis with the keyboard, instead of only the mouse. This is achieved by
6 adding the two functions "movekeyboard-x" and "movekeyboard-y".
7
8 ---
9 config.def.h | 4 +++
10 dwm.c | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++
11 2 files changed, 92 insertions(+)
12
13 diff --git a/config.def.h b/config.def.h
14 index 9efa774..a1ca89c 100644
15 --- a/config.def.h
16 +++ b/config.def.h
17 @@ -85,6 +85,10 @@ static const Key keys[] = {
18 { MODKEY, XK_period, focusmon, {.i = +1 } },
19 { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
20 { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
21 + { MODKEY|ControlMask, XK_l, movekeyboard_x, {.i = 20}},
22 + { MODKEY|ControlMask, XK_h, movekeyboard_x, {.i = -20}},
23 + { MODKEY|ControlMask, XK_j, movekeyboard_y, {.i = 20}},
24 + { MODKEY|ControlMask, XK_k, movekeyboard_y, {.i = -20}},
25 TAGKEYS( XK_1, 0)
26 TAGKEYS( XK_2, 1)
27 TAGKEYS( XK_3, 2)
28 diff --git a/dwm.c b/dwm.c
29 index 03baf42..e8a9f28 100644
30 --- a/dwm.c
31 +++ b/dwm.c
32 @@ -184,6 +184,8 @@ static void maprequest(XEvent *e);
33 static void monocle(Monitor *m);
34 static void motionnotify(XEvent *e);
35 static void movemouse(const Arg *arg);
36 +static void movekeyboard_x(const Arg *arg);
37 +static void movekeyboard_y(const Arg *arg);
38 static Client *nexttiled(Client *c);
39 static void pop(Client *c);
40 static void propertynotify(XEvent *e);
41 @@ -1203,6 +1205,92 @@ movemouse(const Arg *arg)
42 }
43 }
44
45 +void
46 +movekeyboard_x(const Arg *arg){
47 + int ocx, ocy, nx, ny;
48 + Client *c;
49 + Monitor *m;
50 +
51 + if (!(c = selmon->sel))
52 + return;
53 +
54 + if (c->isfullscreen) /* no support moving fullscreen windows by mouse */
55 + return;
56 +
57 + restack(selmon);
58 +
59 + ocx = c->x;
60 + ocy = c->y;
61 +
62 + nx = ocx + arg->i;
63 + ny = ocy;
64 +
65 + if (abs(selmon->wx - nx) < snap)
66 + nx = selmon->wx;
67 + else if (abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap)
68 + nx = selmon->wx + selmon->ww - WIDTH(c);
69 +
70 + if (abs(selmon->wy - ny) < snap)
71 + ny = selmon->wy;
72 + else if (abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap)
73 + ny = selmon->wy + selmon->wh - HEIGHT(c);
74 +
75 + if (!c->isfloating)
76 + togglefloating(NULL);
77 +
78 + if (!selmon->lt[selmon->sellt]->arrange || c->isfloating)
79 + resize(c, nx, ny, c->w, c->h, 1);
80 +
81 + if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) {
82 + sendmon(c, m);
83 + selmon = m;
84 + focus(NULL);
85 + }
86 +}
87 +
88 +void
89 +movekeyboard_y(const Arg *arg){
90 + int ocx, ocy, nx, ny;
91 + Client *c;
92 + Monitor *m;
93 +
94 + if (!(c = selmon->sel))
95 + return;
96 +
97 + if (c->isfullscreen) /* no support moving fullscreen windows by mouse */
98 + return;
99 +
100 + restack(selmon);
101 +
102 + ocx = c->x;
103 + ocy = c->y;
104 +
105 + nx = ocx;
106 + ny = ocy + arg->i;
107 +
108 + if (abs(selmon->wx - nx) < snap)
109 + nx = selmon->wx;
110 + else if (abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap)
111 + nx = selmon->wx + selmon->ww - WIDTH(c);
112 +
113 + if (abs(selmon->wy - ny) < snap)
114 + ny = selmon->wy;
115 + else if (abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap)
116 + ny = selmon->wy + selmon->wh - HEIGHT(c);
117 +
118 + if (!c->isfloating)
119 + togglefloating(NULL);
120 +
121 + if (!selmon->lt[selmon->sellt]->arrange || c->isfloating)
122 + resize(c, nx, ny, c->w, c->h, 1);
123 +
124 + if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) {
125 + sendmon(c, m);
126 + selmon = m;
127 + focus(NULL);
128 + }
129 +}
130 +
131 Client *
132 nexttiled(Client *c)
133 {
134 --
135 2.38.1
136