81 lines
1.6 KiB
Plaintext
81 lines
1.6 KiB
Plaintext
--- dwm.c
|
|
+++ dwm.c
|
|
@@ -36,6 +36,7 @@
|
|
#include <X11/Xlib.h>
|
|
#include <X11/Xproto.h>
|
|
#include <X11/Xutil.h>
|
|
+#include <X11/Xresource.h>
|
|
#ifdef XINERAMA
|
|
#include <X11/extensions/Xinerama.h>
|
|
#endif /* XINERAMA */
|
|
@@ -2142,6 +2158,60 @@ zoom(const Arg *arg)
|
|
pop(c);
|
|
}
|
|
|
|
+void
|
|
+resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst)
|
|
+{
|
|
+ char *sdst = NULL;
|
|
+ int *idst = NULL;
|
|
+ float *fdst = NULL;
|
|
+
|
|
+ sdst = dst;
|
|
+ idst = dst;
|
|
+ fdst = dst;
|
|
+
|
|
+ char fullname[256];
|
|
+ char *type;
|
|
+ XrmValue ret;
|
|
+
|
|
+ snprintf(fullname, sizeof(fullname), "%s.%s", "dwm", name);
|
|
+ fullname[sizeof(fullname) - 1] = '\0';
|
|
+
|
|
+ XrmGetResource(db, fullname, "*", &type, &ret);
|
|
+ if (!(ret.addr == NULL || strncmp("String", type, 64)))
|
|
+ {
|
|
+ switch (rtype) {
|
|
+ case STRING:
|
|
+ strcpy(sdst, ret.addr);
|
|
+ break;
|
|
+ case INTEGER:
|
|
+ *idst = strtoul(ret.addr, NULL, 10);
|
|
+ break;
|
|
+ case FLOAT:
|
|
+ *fdst = strtof(ret.addr, NULL);
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
+void
|
|
+load_xresources(void)
|
|
+{
|
|
+ Display *display;
|
|
+ char *resm;
|
|
+ XrmDatabase db;
|
|
+ ResourcePref *p;
|
|
+
|
|
+ display = XOpenDisplay(NULL);
|
|
+ resm = XResourceManagerString(display);
|
|
+ if (!resm)
|
|
+ return;
|
|
+
|
|
+ db = XrmGetStringDatabase(resm);
|
|
+ for (p = resources; p < resources + LENGTH(resources); p++)
|
|
+ resource_load(db, p->name, p->type, p->dst);
|
|
+ XCloseDisplay(display);
|
|
+}
|
|
+
|
|
int
|
|
main(int argc, char *argv[])
|
|
{
|
|
@@ -2154,6 +2224,8 @@ main(int argc, char *argv[])
|
|
if (!(dpy = XOpenDisplay(NULL)))
|
|
die("dwm: cannot open display");
|
|
checkotherwm();
|
|
+ XrmInitialize();
|
|
+ load_xresources();
|
|
setup();
|
|
#ifdef __OpenBSD__
|
|
if (pledge("stdio rpath proc exec", NULL) == -1)
|