mirror of
				https://codeberg.org/dwl/dwl-patches.git
				synced 2025-10-30 19:44:21 +00:00 
			
		
		
		
	 9c5d5d85f3
			
		
	
	
		9c5d5d85f3
		
			
		
	
	
	
	
		
			
			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
 | |
| 
 |