st-xresources-20230320-45a15676.diff (4853B)
1 From 6315407196933ec86be2b3c74f89bee746353e32 Mon Sep 17 00:00:00 2001 2 From: harishnkr <hari2menon1234@gmail.com> 3 Date: Mon, 20 Mar 2023 14:27:07 +0530 4 Subject: [PATCH] Fix xresources bgcolour fgcolour and cscolour definitions 5 6 --- 7 config.def.h | 36 ++++++++++++++++++++++++ 8 x.c | 78 +++++++++++++++++++++++++++++++++++++++++++++++++--- 9 2 files changed, 110 insertions(+), 4 deletions(-) 10 11 diff --git a/config.def.h b/config.def.h 12 index 91ab8ca..f11db58 100644 13 --- a/config.def.h 14 +++ b/config.def.h 15 @@ -170,6 +170,42 @@ static unsigned int defaultattr = 11; 16 */ 17 static uint forcemousemod = ShiftMask; 18 19 +/* 20 + * Xresources preferences to load at startup 21 + */ 22 +ResourcePref resources[] = { 23 + { "font", STRING, &font }, 24 + { "color0", STRING, &colorname[0] }, 25 + { "color1", STRING, &colorname[1] }, 26 + { "color2", STRING, &colorname[2] }, 27 + { "color3", STRING, &colorname[3] }, 28 + { "color4", STRING, &colorname[4] }, 29 + { "color5", STRING, &colorname[5] }, 30 + { "color6", STRING, &colorname[6] }, 31 + { "color7", STRING, &colorname[7] }, 32 + { "color8", STRING, &colorname[8] }, 33 + { "color9", STRING, &colorname[9] }, 34 + { "color10", STRING, &colorname[10] }, 35 + { "color11", STRING, &colorname[11] }, 36 + { "color12", STRING, &colorname[12] }, 37 + { "color13", STRING, &colorname[13] }, 38 + { "color14", STRING, &colorname[14] }, 39 + { "color15", STRING, &colorname[15] }, 40 + { "background", STRING, &colorname[259] }, 41 + { "foreground", STRING, &colorname[258] }, 42 + { "cursorColor", STRING, &colorname[256] }, 43 + { "termname", STRING, &termname }, 44 + { "shell", STRING, &shell }, 45 + { "minlatency", INTEGER, &minlatency }, 46 + { "maxlatency", INTEGER, &maxlatency }, 47 + { "blinktimeout", INTEGER, &blinktimeout }, 48 + { "bellvolume", INTEGER, &bellvolume }, 49 + { "tabspaces", INTEGER, &tabspaces }, 50 + { "borderpx", INTEGER, &borderpx }, 51 + { "cwscale", FLOAT, &cwscale }, 52 + { "chscale", FLOAT, &chscale }, 53 +}; 54 + 55 /* 56 * Internal mouse shortcuts. 57 * Beware that overloading Button1 will disable the selection. 58 diff --git a/x.c b/x.c 59 index aa09997..ab10269 100644 60 --- a/x.c 61 +++ b/x.c 62 @@ -14,6 +14,7 @@ 63 #include <X11/keysym.h> 64 #include <X11/Xft/Xft.h> 65 #include <X11/XKBlib.h> 66 +#include <X11/Xresource.h> 67 68 char *argv0; 69 #include "arg.h" 70 @@ -45,6 +46,19 @@ typedef struct { 71 signed char appcursor; /* application cursor */ 72 } Key; 73 74 +/* Xresources preferences */ 75 +enum resource_type { 76 + STRING = 0, 77 + INTEGER = 1, 78 + FLOAT = 2 79 +}; 80 + 81 +typedef struct { 82 + char *name; 83 + enum resource_type type; 84 + void *dst; 85 +} ResourcePref; 86 + 87 /* X modifiers */ 88 #define XK_ANY_MOD UINT_MAX 89 #define XK_NO_MOD 0 90 @@ -859,8 +873,8 @@ xclear(int x1, int y1, int x2, int y2) 91 void 92 xhints(void) 93 { 94 - XClassHint class = {opt_name ? opt_name : termname, 95 - opt_class ? opt_class : termname}; 96 + XClassHint class = {opt_name ? opt_name : "st", 97 + opt_class ? opt_class : "St"}; 98 XWMHints wm = {.flags = InputHint, .input = 1}; 99 XSizeHints *sizeh; 100 101 @@ -1135,8 +1149,6 @@ xinit(int cols, int rows) 102 pid_t thispid = getpid(); 103 XColor xmousefg, xmousebg; 104 105 - if (!(xw.dpy = XOpenDisplay(NULL))) 106 - die("can't open display\n"); 107 xw.scr = XDefaultScreen(xw.dpy); 108 xw.vis = XDefaultVisual(xw.dpy, xw.scr); 109 110 @@ -2014,6 +2026,59 @@ run(void) 111 } 112 } 113 114 +int 115 +resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst) 116 +{ 117 + char **sdst = dst; 118 + int *idst = dst; 119 + float *fdst = dst; 120 + 121 + char fullname[256]; 122 + char fullclass[256]; 123 + char *type; 124 + XrmValue ret; 125 + 126 + snprintf(fullname, sizeof(fullname), "%s.%s", 127 + opt_name ? opt_name : "st", name); 128 + snprintf(fullclass, sizeof(fullclass), "%s.%s", 129 + opt_class ? opt_class : "St", name); 130 + fullname[sizeof(fullname) - 1] = fullclass[sizeof(fullclass) - 1] = '\0'; 131 + 132 + XrmGetResource(db, fullname, fullclass, &type, &ret); 133 + if (ret.addr == NULL || strncmp("String", type, 64)) 134 + return 1; 135 + 136 + switch (rtype) { 137 + case STRING: 138 + *sdst = ret.addr; 139 + break; 140 + case INTEGER: 141 + *idst = strtoul(ret.addr, NULL, 10); 142 + break; 143 + case FLOAT: 144 + *fdst = strtof(ret.addr, NULL); 145 + break; 146 + } 147 + return 0; 148 +} 149 + 150 +void 151 +config_init(void) 152 +{ 153 + char *resm; 154 + XrmDatabase db; 155 + ResourcePref *p; 156 + 157 + XrmInitialize(); 158 + resm = XResourceManagerString(xw.dpy); 159 + if (!resm) 160 + return; 161 + 162 + db = XrmGetStringDatabase(resm); 163 + for (p = resources; p < resources + LEN(resources); p++) 164 + resource_load(db, p->name, p->type, p->dst); 165 +} 166 + 167 void 168 usage(void) 169 { 170 @@ -2087,6 +2152,11 @@ run: 171 172 setlocale(LC_CTYPE, ""); 173 XSetLocaleModifiers(""); 174 + 175 + if(!(xw.dpy = XOpenDisplay(NULL))) 176 + die("Can't open display\n"); 177 + 178 + config_init(); 179 cols = MAX(cols, 1); 180 rows = MAX(rows, 1); 181 tnew(cols, rows); 182 -- 183 2.39.2 184