summaryrefslogtreecommitdiffstats
path: root/dwl-patches/patches/accessnthmon/accessnthmon.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dwl-patches/patches/accessnthmon/accessnthmon.patch')
-rw-r--r--dwl-patches/patches/accessnthmon/accessnthmon.patch122
1 files changed, 122 insertions, 0 deletions
diff --git a/dwl-patches/patches/accessnthmon/accessnthmon.patch b/dwl-patches/patches/accessnthmon/accessnthmon.patch
new file mode 100644
index 0000000..f69f57d
--- /dev/null
+++ b/dwl-patches/patches/accessnthmon/accessnthmon.patch
@@ -0,0 +1,122 @@
+From 5f531bfb1387ded7b8817faf7df760d3b998742b Mon Sep 17 00:00:00 2001
+From: Rutherther <rutherther@proton.me>
+Date: Sat, 27 Apr 2024 21:25:16 +0200
+Subject: [PATCH] feat: access nth monitor
+
+---
+ config.def.h | 4 +++-
+ dwl.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 49 insertions(+), 1 deletion(-)
+
+diff --git a/config.def.h b/config.def.h
+index 8847e58..4709c5d 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -108,7 +108,9 @@ static const enum libinput_config_tap_button_map button_map = LIBINPUT_CONFIG_TA
+ { MODKEY, KEY, view, {.ui = 1 << TAG} }, \
+ { MODKEY|WLR_MODIFIER_CTRL, KEY, toggleview, {.ui = 1 << TAG} }, \
+ { MODKEY|WLR_MODIFIER_SHIFT, SKEY, tag, {.ui = 1 << TAG} }, \
+- { MODKEY|WLR_MODIFIER_CTRL|WLR_MODIFIER_SHIFT,SKEY,toggletag, {.ui = 1 << TAG} }
++ { MODKEY|WLR_MODIFIER_CTRL|WLR_MODIFIER_SHIFT,SKEY,toggletag, {.ui = 1 << TAG} }, \
++ { WLR_MODIFIER_ALT, KEY, focusnthmon, {.ui = TAG} }, \
++ { WLR_MODIFIER_ALT|WLR_MODIFIER_SHIFT, SKEY, tagnthmon, {.ui = TAG} }
+
+ /* helper for spawning shell commands in the pre dwm-5.0 fashion */
+ #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
+diff --git a/dwl.c b/dwl.c
+index bf763df..1d42caf 100644
+--- a/dwl.c
++++ b/dwl.c
+@@ -11,6 +11,7 @@
+ #include <time.h>
+ #include <unistd.h>
+ #include <wayland-server-core.h>
++#include <wayland-util.h>
+ #include <wlr/backend.h>
+ #include <wlr/backend/libinput.h>
+ #include <wlr/render/allocator.h>
+@@ -278,8 +279,10 @@ static void destroypointerconstraint(struct wl_listener *listener, void *data);
+ static void destroysessionlock(struct wl_listener *listener, void *data);
+ static void destroysessionmgr(struct wl_listener *listener, void *data);
+ static Monitor *dirtomon(enum wlr_direction dir);
++static Monitor *numtomon(int num);
+ static void focusclient(Client *c, int lift);
+ static void focusmon(const Arg *arg);
++static void focusnthmon(const Arg *arg);
+ static void focusstack(const Arg *arg);
+ static Client *focustop(Monitor *m);
+ static void fullscreennotify(struct wl_listener *listener, void *data);
+@@ -329,6 +332,7 @@ static void spawn(const Arg *arg);
+ static void startdrag(struct wl_listener *listener, void *data);
+ static void tag(const Arg *arg);
+ static void tagmon(const Arg *arg);
++static void tagnthmon(const Arg *arg);
+ static void tile(Monitor *m);
+ static void togglefloating(const Arg *arg);
+ static void togglefullscreen(const Arg *arg);
+@@ -1233,6 +1237,25 @@ dirtomon(enum wlr_direction dir)
+ return selmon;
+ }
+
++Monitor *
++numtomon(int num)
++{
++ Monitor *m = NULL;
++ int found = 0;
++ int i = 0;
++
++ wl_list_for_each(m, &mons, link) {
++ if (!m->wlr_output->enabled)
++ i--;
++ else if (i == num) {
++ found = true;
++ break;
++ }
++ i++;
++ }
++ return found ? m : NULL;
++}
++
+ void
+ focusclient(Client *c, int lift)
+ {
+@@ -1320,6 +1343,16 @@ focusmon(const Arg *arg)
+ focusclient(focustop(selmon), 1);
+ }
+
++void
++focusnthmon(const Arg *arg)
++{
++ Monitor *m = numtomon(arg->i);
++ if (!m || m == selmon)
++ return;
++ selmon = m;
++ focusclient(focustop(selmon), 1);
++}
++
+ void
+ focusstack(const Arg *arg)
+ {
+@@ -2569,6 +2602,19 @@ tagmon(const Arg *arg)
+ setmon(sel, dirtomon(arg->i), 0);
+ }
+
++void
++tagnthmon(const Arg *arg)
++{
++ Client *sel = focustop(selmon);
++ Monitor *m = numtomon(arg->i);
++ if (!m || !sel)
++ return;
++ setmon(sel, m, 0);
++
++ arrange(selmon);
++ arrange(m);
++}
++
+ void
+ tile(Monitor *m)
+ {
+--
+2.44.0
+