diff options
-rw-r--r-- | config.h | 4 | ||||
-rw-r--r-- | dwm.c | 88 | ||||
-rw-r--r-- | patches/dwm-movekeyboard-6.4.diff | 136 |
3 files changed, 228 insertions, 0 deletions
@@ -118,6 +118,10 @@ static const Key keys[] = { { MODKEY|ShiftMask, XK_j, inplacerotate, {.i = -1} }, { MODKEY|ShiftMask, XK_h, inplacerotate, {.i = -2} }, { MODKEY|ShiftMask, XK_l, inplacerotate, {.i = +2} }, + { MODKEY|ControlMask, XK_l, movekeyboard_x, {.i = 20}}, + { MODKEY|ControlMask, XK_h, movekeyboard_x, {.i = -20}}, + { MODKEY|ControlMask, XK_j, movekeyboard_y, {.i = 20}}, + { MODKEY|ControlMask, XK_k, movekeyboard_y, {.i = -20}}, { MODKEY|ControlMask, XK_s, togglesticky, {0} }, { MODKEY, XK_c, zoom, {0} }, { MODKEY|ShiftMask, XK_t, setlayout, {.v = &layouts[0]} }, //tiling @@ -190,6 +190,8 @@ static void maprequest(XEvent *e); static void monocle(Monitor *m); static void motionnotify(XEvent *e); static void movemouse(const Arg *arg); +static void movekeyboard_x(const Arg *arg); +static void movekeyboard_y(const Arg *arg); static Client *nexttiled(Client *c); static void pop(Client *c); static void propertynotify(XEvent *e); @@ -1339,6 +1341,92 @@ movemouse(const Arg *arg) } } +void +movekeyboard_x(const Arg *arg){ + int ocx, ocy, nx, ny; + Client *c; + Monitor *m; + + if (!(c = selmon->sel)) + return; + + if (c->isfullscreen) /* no support moving fullscreen windows by mouse */ + return; + + restack(selmon); + + ocx = c->x; + ocy = c->y; + + nx = ocx + arg->i; + ny = ocy; + + if (abs(selmon->wx - nx) < snap) + nx = selmon->wx; + else if (abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap) + nx = selmon->wx + selmon->ww - WIDTH(c); + + if (abs(selmon->wy - ny) < snap) + ny = selmon->wy; + else if (abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap) + ny = selmon->wy + selmon->wh - HEIGHT(c); + + if (!c->isfloating) + togglefloating(NULL); + + if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) + resize(c, nx, ny, c->w, c->h, 1); + + if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) { + sendmon(c, m); + selmon = m; + focus(NULL); + } +} + +void +movekeyboard_y(const Arg *arg){ + int ocx, ocy, nx, ny; + Client *c; + Monitor *m; + + if (!(c = selmon->sel)) + return; + + if (c->isfullscreen) /* no support moving fullscreen windows by mouse */ + return; + + restack(selmon); + + ocx = c->x; + ocy = c->y; + + nx = ocx; + ny = ocy + arg->i; + + if (abs(selmon->wx - nx) < snap) + nx = selmon->wx; + else if (abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap) + nx = selmon->wx + selmon->ww - WIDTH(c); + + if (abs(selmon->wy - ny) < snap) + ny = selmon->wy; + else if (abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap) + ny = selmon->wy + selmon->wh - HEIGHT(c); + + if (!c->isfloating) + togglefloating(NULL); + + if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) + resize(c, nx, ny, c->w, c->h, 1); + + if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) { + sendmon(c, m); + selmon = m; + focus(NULL); + } +} + Client * nexttiled(Client *c) { diff --git a/patches/dwm-movekeyboard-6.4.diff b/patches/dwm-movekeyboard-6.4.diff new file mode 100644 index 0000000..677ed45 --- /dev/null +++ b/patches/dwm-movekeyboard-6.4.diff @@ -0,0 +1,136 @@ +From daf4eab44e319d78cffecf4133f8309c826fe6b9 Mon Sep 17 00:00:00 2001 +From: mrmine <mrmine1@proton.me> +Date: Sun, 11 Dec 2022 23:31:46 +0100 +Subject: [PATCH] This Patch adds the ability to move floating windows on the x + and y axis with the keyboard, instead of only the mouse. This is achieved by + adding the two functions "movekeyboard-x" and "movekeyboard-y". + +--- + config.def.h | 4 +++ + dwm.c | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 92 insertions(+) + +diff --git a/config.def.h b/config.def.h +index 9efa774..a1ca89c 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -85,6 +85,10 @@ static const Key keys[] = { + { MODKEY, XK_period, focusmon, {.i = +1 } }, + { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } }, + { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } }, ++ { MODKEY|ControlMask, XK_l, movekeyboard_x, {.i = 20}}, ++ { MODKEY|ControlMask, XK_h, movekeyboard_x, {.i = -20}}, ++ { MODKEY|ControlMask, XK_j, movekeyboard_y, {.i = 20}}, ++ { MODKEY|ControlMask, XK_k, movekeyboard_y, {.i = -20}}, + TAGKEYS( XK_1, 0) + TAGKEYS( XK_2, 1) + TAGKEYS( XK_3, 2) +diff --git a/dwm.c b/dwm.c +index 03baf42..e8a9f28 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -184,6 +184,8 @@ static void maprequest(XEvent *e); + static void monocle(Monitor *m); + static void motionnotify(XEvent *e); + static void movemouse(const Arg *arg); ++static void movekeyboard_x(const Arg *arg); ++static void movekeyboard_y(const Arg *arg); + static Client *nexttiled(Client *c); + static void pop(Client *c); + static void propertynotify(XEvent *e); +@@ -1203,6 +1205,92 @@ movemouse(const Arg *arg) + } + } + ++void ++movekeyboard_x(const Arg *arg){ ++ int ocx, ocy, nx, ny; ++ Client *c; ++ Monitor *m; ++ ++ if (!(c = selmon->sel)) ++ return; ++ ++ if (c->isfullscreen) /* no support moving fullscreen windows by mouse */ ++ return; ++ ++ restack(selmon); ++ ++ ocx = c->x; ++ ocy = c->y; ++ ++ nx = ocx + arg->i; ++ ny = ocy; ++ ++ if (abs(selmon->wx - nx) < snap) ++ nx = selmon->wx; ++ else if (abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap) ++ nx = selmon->wx + selmon->ww - WIDTH(c); ++ ++ if (abs(selmon->wy - ny) < snap) ++ ny = selmon->wy; ++ else if (abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap) ++ ny = selmon->wy + selmon->wh - HEIGHT(c); ++ ++ if (!c->isfloating) ++ togglefloating(NULL); ++ ++ if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) ++ resize(c, nx, ny, c->w, c->h, 1); ++ ++ if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) { ++ sendmon(c, m); ++ selmon = m; ++ focus(NULL); ++ } ++} ++ ++void ++movekeyboard_y(const Arg *arg){ ++ int ocx, ocy, nx, ny; ++ Client *c; ++ Monitor *m; ++ ++ if (!(c = selmon->sel)) ++ return; ++ ++ if (c->isfullscreen) /* no support moving fullscreen windows by mouse */ ++ return; ++ ++ restack(selmon); ++ ++ ocx = c->x; ++ ocy = c->y; ++ ++ nx = ocx; ++ ny = ocy + arg->i; ++ ++ if (abs(selmon->wx - nx) < snap) ++ nx = selmon->wx; ++ else if (abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap) ++ nx = selmon->wx + selmon->ww - WIDTH(c); ++ ++ if (abs(selmon->wy - ny) < snap) ++ ny = selmon->wy; ++ else if (abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap) ++ ny = selmon->wy + selmon->wh - HEIGHT(c); ++ ++ if (!c->isfloating) ++ togglefloating(NULL); ++ ++ if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) ++ resize(c, nx, ny, c->w, c->h, 1); ++ ++ if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) { ++ sendmon(c, m); ++ selmon = m; ++ focus(NULL); ++ } ++} ++ + Client * + nexttiled(Client *c) + { +-- +2.38.1 + |