st-xresources-signal-reloading-20220407-ef05519.diff (3685B)
1 From b2a9c96cc3c9152c4e8188f341606c914741cb50 Mon Sep 17 00:00:00 2001 2 From: wael <40663@protonmail.com> 3 Date: Thu, 7 Apr 2022 17:14:02 +0300 4 Subject: [PATCH] fix xresources with signal reloading removing arg.h and st.h 5 & remove unneccesary xresources variables(?) 6 7 --- 8 x.c | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 9 1 file changed, 115 insertions(+) 10 11 diff --git a/x.c b/x.c 12 index 2a3bd38..e8fe7ad 100644 13 --- a/x.c 14 +++ b/x.c 15 @@ -14,6 +14,7 @@ 16 #include <X11/keysym.h> 17 #include <X11/Xft/Xft.h> 18 #include <X11/XKBlib.h> 19 +#include <X11/Xresource.h> 20 21 char *argv0; 22 #include "arg.h" 23 @@ -2011,6 +2012,118 @@ run(void) 24 } 25 } 26 27 + 28 +#define XRESOURCE_LOAD_META(NAME) \ 29 + if(!XrmGetResource(xrdb, "st." NAME, "st." NAME, &type, &ret)) \ 30 + XrmGetResource(xrdb, "*." NAME, "*." NAME, &type, &ret); \ 31 + if (ret.addr != NULL && !strncmp("String", type, 64)) 32 + 33 +#define XRESOURCE_LOAD_STRING(NAME, DST) \ 34 + XRESOURCE_LOAD_META(NAME) \ 35 + DST = ret.addr; 36 + 37 +#define XRESOURCE_LOAD_CHAR(NAME, DST) \ 38 + XRESOURCE_LOAD_META(NAME) \ 39 + DST = ret.addr[0]; 40 + 41 +#define XRESOURCE_LOAD_INTEGER(NAME, DST) \ 42 + XRESOURCE_LOAD_META(NAME) \ 43 + DST = strtoul(ret.addr, NULL, 10); 44 + 45 +#define XRESOURCE_LOAD_FLOAT(NAME, DST) \ 46 + XRESOURCE_LOAD_META(NAME) \ 47 + DST = strtof(ret.addr, NULL); 48 + 49 +void 50 +xrdb_load(void) 51 +{ 52 + /* XXX */ 53 + char *xrm; 54 + char *type; 55 + XrmDatabase xrdb; 56 + XrmValue ret; 57 + Display *dpy; 58 + 59 + if(!(dpy = XOpenDisplay(NULL))) 60 + die("Can't open display\n"); 61 + 62 + XrmInitialize(); 63 + xrm = XResourceManagerString(dpy); 64 + 65 + if (xrm != NULL) { 66 + xrdb = XrmGetStringDatabase(xrm); 67 + 68 + /* handling colors here without macros to do via loop. */ 69 + int i = 0; 70 + char loadValue[12] = ""; 71 + for (i = 0; i < 256; i++) 72 + { 73 + sprintf(loadValue, "%s%d", "st.color", i); 74 + 75 + if(!XrmGetResource(xrdb, loadValue, loadValue, &type, &ret)) 76 + { 77 + sprintf(loadValue, "%s%d", "*.color", i); 78 + if (!XrmGetResource(xrdb, loadValue, loadValue, &type, &ret)) 79 + /* reset if not found (unless in range for defaults). */ 80 + if (i > 15) 81 + colorname[i] = NULL; 82 + } 83 + 84 + if (ret.addr != NULL && !strncmp("String", type, 64)) 85 + colorname[i] = ret.addr; 86 + } 87 + 88 + XRESOURCE_LOAD_STRING("foreground", colorname[defaultfg]); 89 + XRESOURCE_LOAD_STRING("background", colorname[defaultbg]); 90 + XRESOURCE_LOAD_STRING("cursorColor", colorname[defaultcs]) 91 + else { 92 + // this looks confusing because we are chaining off of the if 93 + // in the macro. probably we should be wrapping everything blocks 94 + // so this isn't possible... 95 + defaultcs = defaultfg; 96 + } 97 + XRESOURCE_LOAD_STRING("reverse-cursor", colorname[defaultrcs]) 98 + else { 99 + // see above. 100 + defaultrcs = defaultbg; 101 + } 102 + 103 + XRESOURCE_LOAD_STRING("font", font); 104 + XRESOURCE_LOAD_STRING("termname", termname); 105 + 106 + XRESOURCE_LOAD_INTEGER("blinktimeout", blinktimeout); 107 + XRESOURCE_LOAD_INTEGER("bellvolume", bellvolume); 108 + XRESOURCE_LOAD_INTEGER("borderpx", borderpx); 109 + XRESOURCE_LOAD_INTEGER("cursorshape", cursorshape); 110 + 111 + XRESOURCE_LOAD_FLOAT("cwscale", cwscale); 112 + XRESOURCE_LOAD_FLOAT("chscale", chscale); 113 + } 114 + XFlush(dpy); 115 +} 116 + 117 +void 118 +reload(int sig) 119 +{ 120 + xrdb_load(); 121 + 122 + /* colors, fonts */ 123 + xloadcols(); 124 + xunloadfonts(); 125 + xloadfonts(font, 0); 126 + 127 + /* pretend the window just got resized */ 128 + cresize(win.w, win.h); 129 + 130 + redraw(); 131 + 132 + /* triggers re-render if we're visible. */ 133 + ttywrite("\033[O", 3, 1); 134 + 135 + signal(SIGUSR1, reload); 136 +} 137 + 138 + 139 void 140 usage(void) 141 { 142 @@ -2084,6 +2197,8 @@ run: 143 144 setlocale(LC_CTYPE, ""); 145 XSetLocaleModifiers(""); 146 + xrdb_load(); 147 + signal(SIGUSR1, reload); 148 cols = MAX(cols, 1); 149 rows = MAX(rows, 1); 150 tnew(cols, rows); 151 -- 152 2.35.1 153