[wiki] [sites] [dwm] xrdb patch (load colors from .Xresources) || Petr Schmied

From: <git_AT_suckless.org>
Date: Tue, 04 Sep 2018 13:58:31 +0200

commit af463df202bf60b580c62c3dd047a85b573c5b4e
Author: Petr Schmied <7877707+JBlackN_AT_users.noreply.github.com>
Date: Tue Sep 4 13:55:25 2018 +0200

    [dwm] xrdb patch (load colors from .Xresources)

diff --git a/dwm.suckless.org/patches/xrdb/dwm-xrdb-6.1.diff b/dwm.suckless.org/patches/xrdb/dwm-xrdb-6.1.diff
new file mode 100644
index 00000000..2b49f93a
--- /dev/null
+++ b/dwm.suckless.org/patches/xrdb/dwm-xrdb-6.1.diff
_AT_@ -0,0 +1,154 @@
+From 920617a80d3009fe01843f1f7d36d3a92d19c2fa Mon Sep 17 00:00:00 2001
+From: Petr Schmied
+Date: Tue, 28 Aug 2018 21:08:53 +0200
+Subject: [PATCH] XRDB
+
+---
+ config.def.h | 14 ++++++++------
+ dwm.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 60 insertions(+), 6 deletions(-)
+
+diff --git a/config.def.h b/config.def.h
+index 7054c06..e2f2634 100644
+--- a/config.def.h
++++ b/config.def.h
+_AT_@ -5,12 +5,12 @@ static const char *fonts[] = {
+ "monospace:size=10"
+ };
+ static const char dmenufont[] = "monospace:size=10";
+-static const char normbordercolor[] = "#444444";
+-static const char normbgcolor[] = "#222222";
+-static const char normfgcolor[] = "#bbbbbb";
+-static const char selbordercolor[] = "#005577";
+-static const char selbgcolor[] = "#005577";
+-static const char selfgcolor[] = "#eeeeee";
++static char normbordercolor[] = "#444444";
++static char normbgcolor[] = "#222222";
++static char normfgcolor[] = "#bbbbbb";
++static char selbordercolor[] = "#005577";
++static char selbgcolor[] = "#005577";
++static char selfgcolor[] = "#eeeeee";
+ static const unsigned int borderpx = 1; /* border pixel of windows */
+ static const unsigned int snap = 32; /* snap pixel */
+ static const int showbar = 1; /* 0 means no bar */
+_AT_@ -82,6 +82,7 @@ static Key keys[] = {
+ { MODKEY, XK_period, focusmon, {.i = +1 } },
+ { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
+ { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
++ { MODKEY, XK_F5, xrdb, {.v = NULL } },
+ TAGKEYS( XK_1, 0)
+ TAGKEYS( XK_2, 1)
+ TAGKEYS( XK_3, 2)
+_AT_@ -111,3 +112,4 @@ static Button buttons[] = {
+ { ClkTagBar, MODKEY, Button3, toggletag, {0} },
+ };
+
++static const char *xres = "/home/USERNAME/.Xresources";
+diff --git a/dwm.c b/dwm.c
+index 0362114..0f257ec 100644
+--- a/dwm.c
++++ b/dwm.c
+_AT_@ -35,6 +35,7 @@
+ #include <X11/Xatom.h>
+ #include <X11/Xlib.h>
+ #include <X11/Xproto.h>
++#include <X11/Xresource.h>
+ #include <X11/Xutil.h>
+ #ifdef XINERAMA
+ #include <X11/extensions/Xinerama.h>
+_AT_@ -56,6 +57,21 @@
+ #define HEIGHT(X) ((X)->h + 2 * (X)->bw)
+ #define TAGMASK ((1 << LENGTH(tags)) - 1)
+ #define TEXTW(X) (drw_text(drw, 0, 0, 0, 0, (X), 0) + drw->fonts[0]->h)
++#define XRDB_LOAD_COLOR(R,V) if (XrmGetResource(xrdb, R, NULL, &type, &value) == True) { \
++ if (value.addr != NULL && strnlen(value.addr, 8) == 7 && value.addr[0] == '#') { \
++ int i = 1; \
++ for (; i <= 6; i++) { \
++ if (value.addr[i] < 48) break; \
++ if (value.addr[i] > 57 && value.addr[i] < 65) break; \
++ if (value.addr[i] > 70 && value.addr[i] < 97) break; \
++ if (value.addr[i] > 102) break; \
++ } \
++ if (i == 7) { \
++ strncpy(V, value.addr, 7); \
++ V[7] = '++ } \
++ } \
++ }
+
+ /* enums */
+ enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
+_AT_@ -178,6 +194,7 @@ static void grabkeys(void);
+ static void incnmaster(const Arg *arg);
+ static void keypress(XEvent *e);
+ static void killclient(const Arg *arg);
++static void loadxrdb(void);
+ static void manage(Window w, XWindowAttributes *wa);
+ static void mappingnotify(XEvent *e);
+ static void maprequest(XEvent *e);
+_AT_@ -232,6 +249,7 @@ static Monitor *wintomon(Window w);
+ static int xerror(Display *dpy, XErrorEvent *ee);
+ static int xerrordummy(Display *dpy, XErrorEvent *ee);
+ static int xerrorstart(Display *dpy, XErrorEvent *ee);
++static void xrdb(const Arg *arg);
+ static void zoom(const Arg *arg);
+
+ /* variables */
+_AT_@ -1029,6 +1047,23 @@ killclient(const Arg *arg)
+ }
+ }
+
++void
++loadxrdb()
++{
++ XrmDatabase xrdb = XrmGetFileDatabase(xres);
++ if (xrdb != NULL) {
++ char *type;
++ XrmValue value;
++
++ XRDB_LOAD_COLOR("dwm.normbordercolor", normbordercolor);
++ XRDB_LOAD_COLOR("dwm.normbgcolor", normbgcolor);
++ XRDB_LOAD_COLOR("dwm.normfgcolor", normfgcolor);
++ XRDB_LOAD_COLOR("dwm.selbordercolor", selbordercolor);
++ XRDB_LOAD_COLOR("dwm.selbgcolor", selbgcolor);
++ XRDB_LOAD_COLOR("dwm.selfgcolor", selfgcolor);
++ }
++}
++
+ void
+ manage(Window w, XWindowAttributes *wa)
+ {
+_AT_@ -2106,6 +2141,22 @@ xerrorstart(Display *dpy, XErrorEvent *ee)
+ return -1;
+ }
+
++void
++xrdb(const Arg *arg)
++{
++ loadxrdb();
++
++ scheme[SchemeNorm].border = drw_clr_create(drw, normbordercolor);
++ scheme[SchemeNorm].bg = drw_clr_create(drw, normbgcolor);
++ scheme[SchemeNorm].fg = drw_clr_create(drw, normfgcolor);
++ scheme[SchemeSel].border = drw_clr_create(drw, selbordercolor);
++ scheme[SchemeSel].bg = drw_clr_create(drw, selbgcolor);
++ scheme[SchemeSel].fg = drw_clr_create(drw, selfgcolor);
++
++ focus(NULL);
++ arrange(NULL);
++}
++
+ void
+ zoom(const Arg *arg)
+ {
+_AT_@ -2132,6 +2183,7 @@ main(int argc, char *argv[])
+ if (!(dpy = XOpenDisplay(NULL)))
+ die("dwm: cannot open display
");
+ checkotherwm();
++ loadxrdb();
+ setup();
+ scan();
+ run();
+--
+2.16.4
+
diff --git a/dwm.suckless.org/patches/xrdb/index.md b/dwm.suckless.org/patches/xrdb/index.md
new file mode 100644
index 00000000..fa396945
--- /dev/null
+++ b/dwm.suckless.org/patches/xrdb/index.md
_AT_@ -0,0 +1,30 @@
+xrdb
+====
+
+Description
+-----------
+
+Allows dwm to read colors from `.Xresources` at run time.
+
+After applying the patch, don't forget to update your `config.h` file and fill in path to your `.Xresources` there (`xres` variable).
+
+X resources used:
+
+ dwm.normbordercolor
+ dwm.normbgcolor
+ dwm.normfgcolor
+ dwm.selbordercolor
+ dwm.selbgcolor
+ dwm.selfgcolor
+
+Default key to reload is `Mod+F5`.
+
+Download
+--------
+
+ * [dwm-xrdb-6.1.diff](dwm-xrdb-6.1.diff)
+
+Authors
+-------
+
+ * Petr Schmied - <https://github.com/JBlackN/dwm-xrdb>
Received on Tue Sep 04 2018 - 13:58:31 CEST

This archive was generated by hypermail 2.3.0 : Tue Sep 04 2018 - 14:00:29 CEST