sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

dwm-setenvvars-6.5.diff (1751B)


      1 From c107bca4d607041850166bebe68e136557749702 Mon Sep 17 00:00:00 2001
      2 From: tch69 <ifa26417@outlook.com.vn>
      3 Date: Sun, 6 Apr 2025 11:46:32 +0700
      4 Subject: [PATCH] allow setting ENV vars inside config.h
      5 
      6 ---
      7  config.def.h |  5 +++++
      8  dwm.c        | 14 ++++++++++++++
      9  2 files changed, 19 insertions(+)
     10 
     11 diff --git a/config.def.h b/config.def.h
     12 index 9efa774..9d93742 100644
     13 --- a/config.def.h
     14 +++ b/config.def.h
     15 @@ -44,6 +44,11 @@ static const Layout layouts[] = {
     16  	{ "[M]",      monocle },
     17  };
     18 
     19 +static const Env envs[] = {
     20 +	/* variable 	value */
     21 +	{ "TERMINAL",	"st" },
     22 +};
     23 +
     24  /* key definitions */
     25  #define MODKEY Mod1Mask
     26  #define TAGKEYS(KEY,TAG) \
     27 diff --git a/dwm.c b/dwm.c
     28 index f1d86b2..30cf88a 100644
     29 --- a/dwm.c
     30 +++ b/dwm.c
     31 @@ -99,6 +99,11 @@ struct Client {
     32  	Window win;
     33  };
     34 
     35 +typedef struct {
     36 +	const char *variable;
     37 +	const char *value;
     38 +} Env;
     39 +
     40  typedef struct {
     41  	unsigned int mod;
     42  	KeySym keysym;
     43 @@ -198,6 +203,7 @@ static void scan(void);
     44  static int sendevent(Client *c, Atom proto);
     45  static void sendmon(Client *c, Monitor *m);
     46  static void setclientstate(Client *c, long state);
     47 +static void setenvvars(void);
     48  static void setfocus(Client *c);
     49  static void setfullscreen(Client *c, int fullscreen);
     50  static void setlayout(const Arg *arg);
     51 @@ -1467,6 +1473,13 @@ sendevent(Client *c, Atom proto)
     52  	return exists;
     53  }
     54 
     55 +static void
     56 +setenvvars(void)
     57 +{
     58 +	for (size_t i = 0; i < LENGTH(envs); i++)
     59 +		setenv(envs[i].variable, envs[i].value, 1);
     60 +}
     61 +
     62  void
     63  setfocus(Client *c)
     64  {
     65 @@ -2152,6 +2165,7 @@ main(int argc, char *argv[])
     66  	if (!(dpy = XOpenDisplay(NULL)))
     67  		die("dwm: cannot open display");
     68  	checkotherwm();
     69 +	setenvvars();
     70  	setup();
     71  #ifdef __OpenBSD__
     72  	if (pledge("stdio rpath proc exec", NULL) == -1)
     73 --
     74 2.48.1
     75