sites

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

dwm-xrdb-6.8.diff (7528B)


      1 From f109e898ae8112f5f1f95b42a8cc7ff6837698f2 Mon Sep 17 00:00:00 2001
      2 From: Sourav Nayak <nonameblank007@gmail.com>
      3 Date: Sun, 11 Oct 2026 15:06:37 +0530
      4 Subject: [PATCH] [dwm] update to 6.8 with bug fixes
      5 
      6 ---
      7  config.def.h | 22 +++++++++--------
      8  drw.c        |  2 +-
      9  drw.h        |  2 +-
     10  dwm.c        | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++
     11  4 files changed, 82 insertions(+), 12 deletions(-)
     12 
     13 diff --git a/config.def.h b/config.def.h
     14 index 81c3fc0..42c6ded 100644
     15 --- a/config.def.h
     16 +++ b/config.def.h
     17 @@ -7,15 +7,16 @@ static const int showbar            = 1;        /* 0 means no bar */
     18  static const int topbar             = 1;        /* 0 means bottom bar */
     19  static const char *fonts[]          = { "monospace:size=10" };
     20  static const char dmenufont[]       = "monospace:size=10";
     21 -static const char col_gray1[]       = "#222222";
     22 -static const char col_gray2[]       = "#444444";
     23 -static const char col_gray3[]       = "#bbbbbb";
     24 -static const char col_gray4[]       = "#eeeeee";
     25 -static const char col_cyan[]        = "#005577";
     26 -static const char *colors[][3]      = {
     27 -	/*               fg         bg         border   */
     28 -	[SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
     29 -	[SchemeSel]  = { col_gray4, col_cyan,  col_cyan  },
     30 +static char normbgcolor[]           = "#222222";
     31 +static char normbordercolor[]       = "#444444";
     32 +static char normfgcolor[]           = "#bbbbbb";
     33 +static char selfgcolor[]            = "#eeeeee";
     34 +static char selbordercolor[]        = "#005577";
     35 +static char selbgcolor[]            = "#005577";
     36 +static char *colors[][3] = {
     37 +       /*               fg           bg           border   */
     38 +       [SchemeNorm] = { normfgcolor, normbgcolor, normbordercolor },
     39 +       [SchemeSel]  = { selfgcolor,  selbgcolor,  selbordercolor  },
     40  };
     41  
     42  /* tagging */
     43 @@ -58,7 +59,7 @@ static const Layout layouts[] = {
     44  
     45  /* commands */
     46  static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
     47 -static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
     48 +static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbordercolor, "-sf", selfgcolor, NULL };
     49  static const char *termcmd[]  = { "st", NULL };
     50  
     51  static const Key keys[] = {
     52 @@ -86,6 +87,7 @@ static const Key keys[] = {
     53  	{ MODKEY,                       XK_period, focusmon,       {.i = +1 } },
     54  	{ MODKEY|ShiftMask,             XK_comma,  tagmon,         {.i = -1 } },
     55  	{ MODKEY|ShiftMask,             XK_period, tagmon,         {.i = +1 } },
     56 +	{ MODKEY,                       XK_F5,     xrdb,           {.v = NULL } },
     57  	TAGKEYS(                        XK_1,                      0)
     58  	TAGKEYS(                        XK_2,                      1)
     59  	TAGKEYS(                        XK_3,                      2)
     60 diff --git a/drw.c b/drw.c
     61 index 9fdd1a4..721e463 100644
     62 --- a/drw.c
     63 +++ b/drw.c
     64 @@ -180,7 +180,7 @@ drw_clr_create(Drw *drw, Clr *dest, const char *clrname)
     65  
     66  /* Create color schemes. */
     67  Clr *
     68 -drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount)
     69 +drw_scm_create(Drw *drw, char *clrnames[], size_t clrcount)
     70  {
     71  	size_t i;
     72  	Clr *ret;
     73 diff --git a/drw.h b/drw.h
     74 index bda06f9..fbfec02 100644
     75 --- a/drw.h
     76 +++ b/drw.h
     77 @@ -41,7 +41,7 @@ void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned in
     78  /* Colorscheme abstraction */
     79  void drw_clr_create(Drw *drw, Clr *dest, const char *clrname);
     80  void drw_clr_free(Drw *drw, Clr *c);
     81 -Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount);
     82 +Clr *drw_scm_create(Drw *drw, char *clrnames[], size_t clrcount);
     83  void drw_scm_free(Drw *drw, Clr *scm, size_t clrcount);
     84  
     85  /* Cursor abstraction */
     86 diff --git a/dwm.c b/dwm.c
     87 index ab3a84c..c92953c 100644
     88 --- a/dwm.c
     89 +++ b/dwm.c
     90 @@ -35,6 +35,7 @@
     91  #include <X11/Xatom.h>
     92  #include <X11/Xlib.h>
     93  #include <X11/Xproto.h>
     94 +#include <X11/Xresource.h>
     95  #include <X11/Xutil.h>
     96  #ifdef XINERAMA
     97  #include <X11/extensions/Xinerama.h>
     98 @@ -55,6 +56,21 @@
     99  #define HEIGHT(X)               ((X)->h + 2 * (X)->bw)
    100  #define TAGMASK                 ((1 << LENGTH(tags)) - 1)
    101  #define TEXTW(X)                (drw_fontset_getwidth(drw, (X)) + lrpad)
    102 +#define XRDB_LOAD_COLOR(R,V)    if (XrmGetResource(xrdb, R, NULL, &type, &value) == True) { \
    103 +                                  if (value.addr != NULL && strnlen(value.addr, 8) == 7 && value.addr[0] == '#') { \
    104 +                                    int i = 1; \
    105 +                                    for (; i <= 6; i++) { \
    106 +                                      if (value.addr[i] < 48) break; \
    107 +                                      if (value.addr[i] > 57 && value.addr[i] < 65) break; \
    108 +                                      if (value.addr[i] > 70 && value.addr[i] < 97) break; \
    109 +                                      if (value.addr[i] > 102) break; \
    110 +                                    } \
    111 +                                    if (i == 7) { \
    112 +                                      strncpy(V, value.addr, 7); \
    113 +                                      V[7] = '\0'; \
    114 +                                    } \
    115 +                                  } \
    116 +                                }
    117  
    118  /* enums */
    119  enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
    120 @@ -177,6 +193,7 @@ static void grabkeys(void);
    121  static void incnmaster(const Arg *arg);
    122  static void keypress(XEvent *e);
    123  static void killclient(const Arg *arg);
    124 +static void loadxrdb(void);
    125  static void manage(Window w, XWindowAttributes *wa);
    126  static void mappingnotify(XEvent *e);
    127  static void maprequest(XEvent *e);
    128 @@ -231,6 +248,7 @@ static Monitor *wintomon(Window w);
    129  static int xerror(Display *dpy, XErrorEvent *ee);
    130  static int xerrordummy(Display *dpy, XErrorEvent *ee);
    131  static int xerrorstart(Display *dpy, XErrorEvent *ee);
    132 +static void xrdb(const Arg *arg);
    133  static void zoom(const Arg *arg);
    134  
    135  /* variables */
    136 @@ -1028,6 +1046,41 @@ killclient(const Arg *arg)
    137  	}
    138  }
    139  
    140 +void
    141 +loadxrdb(void)
    142 +{
    143 +	Display *display;
    144 +  	char *resm;
    145 +  	XrmDatabase xrdb;
    146 +  	char *type;
    147 +  	XrmValue value;
    148 +
    149 +  	display = XOpenDisplay(NULL);
    150 +
    151 +  	if (!display) 
    152 +		return;
    153 +
    154 +  	resm = XResourceManagerString(display);
    155 +
    156 +    if (!resm) {
    157 +        XCloseDisplay(display);
    158 +        return;
    159 +    }
    160 +
    161 +    xrdb = XrmGetStringDatabase(resm);
    162 +    if (xrdb != NULL) {
    163 +        XRDB_LOAD_COLOR("dwm.normbordercolor", normbordercolor);
    164 +        XRDB_LOAD_COLOR("dwm.normbgcolor", normbgcolor);
    165 +        XRDB_LOAD_COLOR("dwm.normfgcolor", normfgcolor);
    166 +        XRDB_LOAD_COLOR("dwm.selbordercolor", selbordercolor);
    167 +        XRDB_LOAD_COLOR("dwm.selbgcolor", selbgcolor);
    168 +        XRDB_LOAD_COLOR("dwm.selfgcolor", selfgcolor);
    169 +		XrmDestroyDatabase(xrdb);
    170 +    }
    171 +
    172 +  	XCloseDisplay(display);
    173 +}
    174 +
    175  void
    176  manage(Window w, XWindowAttributes *wa)
    177  {
    178 @@ -2128,6 +2181,19 @@ xerrorstart(Display *dpy, XErrorEvent *ee)
    179  	return -1;
    180  }
    181  
    182 +void
    183 +xrdb(const Arg *arg)
    184 +{
    185 +	loadxrdb();
    186 +  	int i;
    187 +  	for (i = 0; i < LENGTH(colors); i++) {
    188 +		drw_scm_free(drw, scheme[i], 3);
    189 +    	scheme[i] = drw_scm_create(drw, colors[i], 3);
    190 +  	}
    191 +  	focus(NULL);
    192 +  	arrange(NULL);
    193 +}
    194 +
    195  void
    196  zoom(const Arg *arg)
    197  {
    198 @@ -2152,6 +2218,8 @@ main(int argc, char *argv[])
    199  	if (!(dpy = XOpenDisplay(NULL)))
    200  		die("dwm: cannot open display");
    201  	checkotherwm();
    202 +	XrmInitialize();
    203 +	loadxrdb();
    204  	setup();
    205  #ifdef __OpenBSD__
    206  	if (pledge("stdio rpath proc exec", NULL) == -1)
    207 -- 
    208 2.55.0
    209