commit e7b79242613cd2f6af9e191aee6deeaef3971845
parent db9bcf402ef83cc1fffbc0ba1ceeb873048ef534
Author: jameel-sawafta <jameelhsawafta@gmail.com>
Date: Sat, 10 May 2025 18:12:01 +0300
[dwm][patches][swapwindows] Added patch
Diffstat:
2 files changed, 123 insertions(+), 0 deletions(-)
diff --git a/dwm.suckless.org/patches/swapwindows/dwm-swapwindows-20250510-cfb8627.diff b/dwm.suckless.org/patches/swapwindows/dwm-swapwindows-20250510-cfb8627.diff
@@ -0,0 +1,90 @@
+From 00ea4c4e2d221c7f2979bcf403e4c23abf4b3f79 Mon Sep 17 00:00:00 2001
+From: jameel-sawafta <jameelhsawafta@gmail.com>
+Date: Fri, 9 May 2025 22:51:56 +0300
+Subject: [PATCH] dwm: add swapwindow function to swap focused clients between
+ monitors
+
+---
+ config.def.h | 1 +
+ dwm.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 47 insertions(+)
+
+diff --git a/config.def.h b/config.def.h
+index 9efa774..ec0a706 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -85,6 +85,7 @@ 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|ShiftMask, XK_slash, swapwindow, {0} },
+ TAGKEYS( XK_1, 0)
+ TAGKEYS( XK_2, 1)
+ TAGKEYS( XK_3, 2)
+diff --git a/dwm.c b/dwm.c
+index 1443802..ee7658f 100644
+--- a/dwm.c
++++ b/dwm.c
+@@ -232,6 +232,7 @@ static int xerror(Display *dpy, XErrorEvent *ee);
+ static int xerrordummy(Display *dpy, XErrorEvent *ee);
+ static int xerrorstart(Display *dpy, XErrorEvent *ee);
+ static void zoom(const Arg *arg);
++static void swapwindow(const Arg *arg);
+
+ /* variables */
+ static const char broken[] = "broken";
+@@ -2139,6 +2140,51 @@ zoom(const Arg *arg)
+ pop(c);
+ }
+
++void
++swapwindow(const Arg *arg)
++{
++ if (!selmon || !selmon->sel || !mons->next)
++ return;
++
++ Monitor *m1 = selmon;
++ Monitor *m2 = dirtomon(+1);
++
++ Client *c1 = m1->sel;
++ Client *c2 = m2->sel;
++
++ if (!c2) {
++ detach(c1);
++ detachstack(c1);
++ c1->mon = m2;
++ attach(c1);
++ attachstack(c1);
++ focus(c1);
++ selmon = m2;
++ arrange(m1);
++ arrange(m2);
++ return;
++ }
++
++ detach(c1);
++ detachstack(c1);
++ detach(c2);
++ detachstack(c2);
++
++ c1->mon = m2;
++ attach(c1);
++ attachstack(c1);
++ focus(c1);
++
++ c2->mon = m1;
++ attach(c2);
++ attachstack(c2);
++ focus(c2);
++
++ selmon = m1;
++ arrange(m1);
++ arrange(m2);
++}
++
+ int
+ main(int argc, char *argv[])
+ {
+--
+2.49.0
+
diff --git a/dwm.suckless.org/patches/swapwindows/index.md b/dwm.suckless.org/patches/swapwindows/index.md
@@ -0,0 +1,33 @@
+# swapwindows
+
+## Description
+
+This patch allows swapping the selected client (window) with the selected window
+on the other monitor. Useful for moving a window to the other monitor while
+preserving the window focus and order.
+
+## Usage
+
+After applying the patch, the following key binding will be available by default:
+
+MODKEY + Shift + /
+
+This keybinding will:
+
+- Swap the currently focused window with the focused window on the next monitor (if any).
+- If the other monitor has no selected client, it will just move the current focused window to it.
+- Rearrange and refocus appropriately after the operation.
+
+> You can customize this keybinding in your `config.def.h`:
+>
+> ```c
+> { MODKEY|ShiftMask, XK_slash, swapwindow, {0} },
+> ```
+
+## Download
+
+- [dwm-swapwindows-20250510-cfb8627.diff](dwm-swapwindows-20250510-cfb8627.diff)
+
+## Author
+
+Jameel Sawafta <jameelhsawafta@gmail.com>