summaryrefslogtreecommitdiff
path: root/archive/st/patch/xresources.c
diff options
context:
space:
mode:
authorauric <104602845+ihateamongus@users.noreply.github.com>2025-09-08 21:19:14 -0500
committerauric <104602845+ihateamongus@users.noreply.github.com>2025-09-08 21:19:14 -0500
commite61da07522a060da98fa3a56db3d0360469b26cf (patch)
treec72d276bffa4dafe22ae0e4f694acfadb40b8ca1 /archive/st/patch/xresources.c
parentd11aec86841f77edd6eba3e07aa1e7e591e9da2a (diff)
organize repository layout
Diffstat (limited to 'archive/st/patch/xresources.c')
-rw-r--r--archive/st/patch/xresources.c82
1 files changed, 82 insertions, 0 deletions
diff --git a/archive/st/patch/xresources.c b/archive/st/patch/xresources.c
new file mode 100644
index 0000000..ba3d985
--- /dev/null
+++ b/archive/st/patch/xresources.c
@@ -0,0 +1,82 @@
+int
+resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst)
+{
+ char **sdst = dst;
+ int *idst = dst;
+ float *fdst = dst;
+
+ char fullname[256];
+ char fullclass[256];
+ char *type;
+ XrmValue ret;
+
+ snprintf(fullname, sizeof(fullname), "%s.%s",
+ opt_name ? opt_name : "st", name);
+ snprintf(fullclass, sizeof(fullclass), "%s.%s",
+ opt_class ? opt_class : "St", name);
+ fullname[sizeof(fullname) - 1] = fullclass[sizeof(fullclass) - 1] = '\0';
+
+ XrmGetResource(db, fullname, fullclass, &type, &ret);
+ if (ret.addr == NULL || strncmp("String", type, 64))
+ return 1;
+
+ switch (rtype) {
+ case STRING:
+ *sdst = ret.addr;
+ break;
+ case INTEGER:
+ *idst = strtoul(ret.addr, NULL, 10);
+ break;
+ case FLOAT:
+ *fdst = strtof(ret.addr, NULL);
+ break;
+ }
+ return 0;
+}
+
+void
+config_init(Display *dpy)
+{
+ char *resm;
+ XrmDatabase db;
+ ResourcePref *p;
+
+ XrmInitialize();
+ resm = XResourceManagerString(dpy);
+ if (!resm)
+ return;
+
+ db = XrmGetStringDatabase(resm);
+ for (p = resources; p < resources + LEN(resources); p++)
+ resource_load(db, p->name, p->type, p->dst);
+}
+
+#if XRESOURCES_RELOAD_PATCH
+void
+reload_config(int sig)
+{
+ /* Recreate a Display object to have up to date Xresources entries */
+ Display *dpy;
+ if (!(dpy = XOpenDisplay(NULL)))
+ die("Can't open display\n");
+
+ config_init(dpy);
+ xloadcols();
+
+ /* nearly like zoomabs() */
+ xunloadfonts();
+ xloadfonts(font, 0); /* font <- config_init() */
+ #if FONT2_PATCH
+ xloadsparefonts();
+ #endif // FONT2_PATCH
+ cresize(0, 0);
+ redraw();
+ xhints();
+
+ XCloseDisplay(dpy);
+
+ /* from https://st.suckless.org/patches/xresources-with-reload-signal */
+ /* triggers re-render if we're visible */
+ ttywrite("\033[O", 3, 1);
+}
+#endif // XRESOURCES_RELOAD_PATCH