st-xresources-20200204-cfdf3f0.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
st-xresources-20200204-cfdf3f0.diff (5555B)
---
1 From cfdf3f0fcd81c3fe29bf4717d3276e078efc5787 Mon Sep 17 00:00:00 2001
2 From: Malcolm VanOrder <mvanorder1390@gmail.com>
3 Date: Tue, 4 Feb 2020 00:29:16 -0500
4 Subject: [PATCH] Apply modified xresources patch to version 0.8.2
5
6 Modified verion of https://git.suckless.org/sites/file/st.suckless.org/patches/xresources/st-xresources-20190105-3be4cf1.diff.html
7
8 * Add doc strings for new functions
9 * Moved XOpenDisplay back into xinit
10 * Rename config_init to xresources_init and call it in xinit after
11 XOpenDisplay.
12
13 Signed-off-by: Malcolm VanOrder <mvanorder1390@gmail.com>
14 ---
15 config.def.h | 36 +++++++++++++++++++++
16 x.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++--
17 2 files changed, 124 insertions(+), 2 deletions(-)
18
19 diff --git a/config.def.h b/config.def.h
20 index 546edda..e1457af 100644
21 --- a/config.def.h
22 +++ b/config.def.h
23 @@ -150,6 +150,42 @@ static unsigned int mousebg = 0;
24 */
25 static unsigned int defaultattr = 11;
26
27 +/*
28 + * Xresources preferences to load at startup
29 + */
30 +ResourcePref resources[] = {
31 + { "font", STRING, &font },
32 + { "color0", STRING, &colorname[0] },
33 + { "color1", STRING, &colorname[1] },
34 + { "color2", STRING, &colorname[2] },
35 + { "color3", STRING, &colorname[3] },
36 + { "color4", STRING, &colorname[4] },
37 + { "color5", STRING, &colorname[5] },
38 + { "color6", STRING, &colorname[6] },
39 + { "color7", STRING, &colorname[7] },
40 + { "color8", STRING, &colorname[8] },
41 + { "color9", STRING, &colorname[9] },
42 + { "color10", STRING, &colorname[10] },
43 + { "color11", STRING, &colorname[11] },
44 + { "color12", STRING, &colorname[12] },
45 + { "color13", STRING, &colorname[13] },
46 + { "color14", STRING, &colorname[14] },
47 + { "color15", STRING, &colorname[15] },
48 + { "background", STRING, &colorname[256] },
49 + { "foreground", STRING, &colorname[257] },
50 + { "cursorColor", STRING, &colorname[258] },
51 + { "termname", STRING, &termname },
52 + { "shell", STRING, &shell },
53 + { "xfps", INTEGER, &xfps },
54 + { "actionfps", INTEGER, &actionfps },
55 + { "blinktimeout", INTEGER, &blinktimeout },
56 + { "bellvolume", INTEGER, &bellvolume },
57 + { "tabspaces", INTEGER, &tabspaces },
58 + { "borderpx", INTEGER, &borderpx },
59 + { "cwscale", FLOAT, &cwscale },
60 + { "chscale", FLOAT, &chscale },
61 +};
62 +
63 /*
64 * Force mouse select/shortcuts while mask is active (when MODE_MOUSE is set).
65 * Note that if you want to use ShiftMask with selmasks, set this to an other
66 diff --git a/x.c b/x.c
67 index 1f62129..8ccaf58 100644
68 --- a/x.c
69 +++ b/x.c
70 @@ -14,6 +14,7 @@
71 #include <X11/keysym.h>
72 #include <X11/Xft/Xft.h>
73 #include <X11/XKBlib.h>
74 +#include <X11/Xresource.h>
75
76 static char *argv0;
77 #include "arg.h"
78 @@ -45,6 +46,19 @@ typedef struct {
79 signed char appcursor; /* application cursor */
80 } Key;
81
82 +/* Xresources preferences */
83 +enum resource_type {
84 + STRING = 0,
85 + INTEGER = 1,
86 + FLOAT = 2
87 +};
88 +
89 +typedef struct {
90 + char *name;
91 + enum resource_type type;
92 + void *dst;
93 +} ResourcePref;
94 +
95 /* X modifiers */
96 #define XK_ANY_MOD UINT_MAX
97 #define XK_NO_MOD 0
98 @@ -813,8 +827,8 @@ xclear(int x1, int y1, int x2, int y2)
99 void
100 xhints(void)
101 {
102 - XClassHint class = {opt_name ? opt_name : termname,
103 - opt_class ? opt_class : termname};
104 + XClassHint class = {opt_name ? opt_name : "st",
105 + opt_class ? opt_class : "St"};
106 XWMHints wm = {.flags = InputHint, .input = 1};
107 XSizeHints *sizeh;
108
109 @@ -1081,6 +1095,77 @@ xicdestroy(XIC xim, XPointer client, XPointer call)
110 return 1;
111 }
112
113 +/*
114 + * Function: resource_load
115 + * -----------------------
116 + * Load the value of a resource from the provided db
117 + *
118 + * db: XrmDatabase to load from
119 + * name: name of the resource to load
120 + * rtype: type for resource being loaded
121 + * dst: pointer to destination for loaded value
122 + *
123 + * returns: 1 if no value returned or resource's type is not "String"
124 + * 0 on success
125 + */
126 +int
127 +resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst)
128 +{
129 + char **sdst = dst;
130 + int *idst = dst;
131 + float *fdst = dst;
132 +
133 + char fullname[256];
134 + char fullclass[256];
135 + char *type;
136 + XrmValue ret;
137 +
138 + snprintf(fullname, sizeof(fullname), "%s.%s",
139 + opt_name ? opt_name : "st", name);
140 + snprintf(fullclass, sizeof(fullclass), "%s.%s",
141 + opt_class ? opt_class : "St", name);
142 + fullname[sizeof(fullname) - 1] = fullclass[sizeof(fullclass) - 1] = '\0';
143 +
144 + XrmGetResource(db, fullname, fullclass, &type, &ret);
145 + if (ret.addr == NULL || strncmp("String", type, 64))
146 + return 1;
147 +
148 + switch (rtype) {
149 + case STRING:
150 + *sdst = ret.addr;
151 + break;
152 + case INTEGER:
153 + *idst = strtoul(ret.addr, NULL, 10);
154 + break;
155 + case FLOAT:
156 + *fdst = strtof(ret.addr, NULL);
157 + break;
158 + }
159 + return 0;
160 +}
161 +
162 +/*
163 + * Function: xresources_init
164 + * -------------------------
165 + * Initializes xresources values defined in resources
166 + */
167 +void
168 +xresources_init(void)
169 +{
170 + char *resm;
171 + XrmDatabase db;
172 + ResourcePref *p;
173 +
174 + XrmInitialize();
175 + resm = XResourceManagerString(xw.dpy);
176 + if (!resm)
177 + return;
178 +
179 + db = XrmGetStringDatabase(resm);
180 + for (p = resources; p < resources + LEN(resources); p++)
181 + resource_load(db, p->name, p->type, p->dst);
182 +}
183 +
184 void
185 xinit(int cols, int rows)
186 {
187 @@ -1092,6 +1177,7 @@ xinit(int cols, int rows)
188
189 if (!(xw.dpy = XOpenDisplay(NULL)))
190 die("can't open display\n");
191 + xresources_init();
192 xw.scr = XDefaultScreen(xw.dpy);
193 xw.vis = XDefaultVisual(xw.dpy, xw.scr);
194
195 --
196 2.25.0
197