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