aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAryadev Chavali <aryadev@aryadevchavali.com>2024-10-20 16:36:58 +0100
committerAryadev Chavali <aryadev@aryadevchavali.com>2024-10-20 16:36:58 +0100
commit17f5dfa8143adc702d4be59f40da344986cbdecd (patch)
tree2b6467d2e8ace8bc45615c1b6cb3e8304d54ec28
parent84d550ca9b1dd51a0cee4e0f53d3f8c02f2f5636 (diff)
downloaddwm-17f5dfa8143adc702d4be59f40da344986cbdecd.tar.gz
dwm-17f5dfa8143adc702d4be59f40da344986cbdecd.tar.bz2
dwm-17f5dfa8143adc702d4be59f40da344986cbdecd.zip
Added patch to move floating windows via the keyboard
-rw-r--r--config.h4
-rw-r--r--dwm.c88
-rw-r--r--patches/dwm-movekeyboard-6.4.diff136
3 files changed, 228 insertions, 0 deletions
diff --git a/config.h b/config.h
index 54ba029..2f02852 100644
--- a/config.h
+++ b/config.h
@@ -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
diff --git a/dwm.c b/dwm.c
index e2b1929..a109b3d 100644
--- a/dwm.c
+++ b/dwm.c
@@ -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
+