mirror of
https://codeberg.org/dwl/dwl-patches.git
synced 2025-09-07 19:54:50 +00:00

Eliminated wiki. Individual patches have a README.md explanation in their own subdirectory. Simplified submission of new patches and maintenance of existing patches. Instructions page (README.md autodisplayed) is now at https://codeberg.org/dwl/dwl-patches/
72 lines
2.2 KiB
Diff
72 lines
2.2 KiB
Diff
From 9991f8bbf2e379dfca8eb356c03d3d20085255a8 Mon Sep 17 00:00:00 2001
|
|
From: sewn <sewn@disroot.org>
|
|
Date: Sun, 23 Jul 2023 08:13:52 +0300
|
|
Subject: [PATCH] pass window regions to given program as stdin
|
|
|
|
---
|
|
config.def.h | 1 +
|
|
dwl.c | 28 ++++++++++++++++++++++++++++
|
|
2 files changed, 29 insertions(+)
|
|
|
|
diff --git a/config.def.h b/config.def.h
|
|
index 9009517..79d0236 100644
|
|
--- a/config.def.h
|
|
+++ b/config.def.h
|
|
@@ -122,6 +122,7 @@ static const Key keys[] = {
|
|
/* modifier key function argument */
|
|
{ MODKEY, XKB_KEY_p, spawn, {.v = menucmd} },
|
|
{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Return, spawn, {.v = termcmd} },
|
|
+ { MODKEY, XKB_KEY_r, regions, SHCMD("grim -g \"$(slurp)\"") },
|
|
{ MODKEY, XKB_KEY_j, focusstack, {.i = +1} },
|
|
{ MODKEY, XKB_KEY_k, focusstack, {.i = -1} },
|
|
{ MODKEY, XKB_KEY_i, incnmaster, {.i = +1} },
|
|
diff --git a/dwl.c b/dwl.c
|
|
index fa76db2..9588e36 100644
|
|
--- a/dwl.c
|
|
+++ b/dwl.c
|
|
@@ -334,6 +334,7 @@ static Monitor *xytomon(double x, double y);
|
|
static void xytonode(double x, double y, struct wlr_surface **psurface,
|
|
Client **pc, LayerSurface **pl, double *nx, double *ny);
|
|
static void zoom(const Arg *arg);
|
|
+static void regions(const Arg *arg);
|
|
|
|
/* variables */
|
|
static const char broken[] = "broken";
|
|
@@ -2823,6 +2824,33 @@ zoom(const Arg *arg)
|
|
arrange(selmon);
|
|
}
|
|
|
|
+void
|
|
+regions(const Arg *arg)
|
|
+{
|
|
+ int pipefd[2];
|
|
+ Client *c;
|
|
+ Monitor *m;
|
|
+
|
|
+ if (pipe(pipefd) == -1)
|
|
+ return;
|
|
+ if (fork() == 0) {
|
|
+ close(pipefd[1]);
|
|
+ dup2(pipefd[0], STDIN_FILENO);
|
|
+ close(pipefd[0]);
|
|
+ setsid();
|
|
+ execvp(((char **)arg->v)[0], (char **)arg->v);
|
|
+ die("dwl: execvp %s failed:", ((char **)arg->v)[0]);
|
|
+ }
|
|
+
|
|
+ close(pipefd[0]);
|
|
+ wl_list_for_each(m, &mons, link)
|
|
+ wl_list_for_each(c, &clients, link)
|
|
+ if (VISIBLEON(c, m))
|
|
+ dprintf(pipefd[1], "%d,%d %dx%d\n",
|
|
+ c->geom.x, c->geom.y, c->geom.width, c->geom.height);
|
|
+ close(pipefd[1]);
|
|
+}
|
|
+
|
|
#ifdef XWAYLAND
|
|
void
|
|
activatex11(struct wl_listener *listener, void *data)
|
|
--
|
|
2.43.1
|
|
|