diff --git a/_STALE_PATCHES/regions.md b/_STALE_PATCHES/regions.md deleted file mode 100644 index d6eae71..0000000 --- a/_STALE_PATCHES/regions.md +++ /dev/null @@ -1,10 +0,0 @@ -### Description -This patch will allow for a program to be used and have the current window regions on all monitors to be passed to the program as standard input. - -example is `grim -g "$(slurp)"` - -### Download -- [2023-07-23](https://github.com/djpohly/dwl/compare/main...apprehensions:dwl:regions.patch) - -### Authors -- [sewn](https://github.com/apprehensions) \ No newline at end of file diff --git a/regions/regions.patch b/regions/regions.patch new file mode 100644 index 0000000..207c0bd --- /dev/null +++ b/regions/regions.patch @@ -0,0 +1,71 @@ +From 9991f8bbf2e379dfca8eb356c03d3d20085255a8 Mon Sep 17 00:00:00 2001 +From: sewn +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 +