Introduction
Introduction Statistics Contact Development Disclaimer Help
st-xresources-20181018-g30ec9a3.diff - sites - public wiki contents of suckless…
git clone git://git.suckless.org/sites
Log
Files
Refs
---
st-xresources-20181018-g30ec9a3.diff (4391B)
---
1 diff --git a/config.def.h b/config.def.h
2 index 823e79f..2c07b07 100644
3 --- a/config.def.h
4 +++ b/config.def.h
5 @@ -150,6 +150,41 @@ static unsigned int mousebg = 0;
6 */
7 static unsigned int defaultattr = 11;
8
9 +/*
10 + * Xresources preferences to load at startup
11 + */
12 +ResourcePref resources[] = {
13 + { "font", STRING, &font },
14 + { "color0", STRING, &colorname[0] },
15 + { "color1", STRING, &colorname[1] },
16 + { "color2", STRING, &colorname[2] },
17 + { "color3", STRING, &colorname[3] },
18 + { "color4", STRING, &colorname[4] },
19 + { "color5", STRING, &colorname[5] },
20 + { "color6", STRING, &colorname[6] },
21 + { "color7", STRING, &colorname[7] },
22 + { "color8", STRING, &colorname[8] },
23 + { "color9", STRING, &colorname[9] },
24 + { "color10", STRING, &colorname[10] },
25 + { "color11", STRING, &colorname[11] },
26 + { "color12", STRING, &colorname[12] },
27 + { "color13", STRING, &colorname[13] },
28 + { "color14", STRING, &colorname[14] },
29 + { "color15", STRING, &colorname[15] },
30 + { "background", STRING, &colorname[256] },
31 + { "foreground", STRING, &colorname[257] },
32 + { "cursorColor", STRING, &colorname[258] },
33 + { "termname", STRING, &termname },
34 + { "shell", STRING, &shell },
35 + { "xfps", INTEGER, &xfps },
36 + { "actionfps", INTEGER, &actionfps },
37 + { "blinktimeout", INTEGER, &blinktimeout },
38 + { "bellvolume", INTEGER, &bellvolume },
39 + { "tabspaces", INTEGER, &tabspaces },
40 + { "cwscale", FLOAT, &cwscale },
41 + { "chscale", FLOAT, &chscale },
42 +};
43 +
44 /*
45 * Internal mouse shortcuts.
46 * Beware that overloading Button1 will disable the selection.
47 diff --git a/x.c b/x.c
48 index 00cb6b1..3652979 100644
49 --- a/x.c
50 +++ b/x.c
51 @@ -14,6 +14,7 @@
52 #include <X11/keysym.h>
53 #include <X11/Xft/Xft.h>
54 #include <X11/XKBlib.h>
55 +#include <X11/Xresource.h>
56
57 static char *argv0;
58 #include "arg.h"
59 @@ -43,6 +44,19 @@ typedef struct {
60 signed char appcursor; /* application cursor */
61 } Key;
62
63 +/* Xresources preferences */
64 +enum resource_type {
65 + STRING = 0,
66 + INTEGER = 1,
67 + FLOAT = 2
68 +};
69 +
70 +typedef struct {
71 + char *name;
72 + enum resource_type type;
73 + void *dst;
74 +} ResourcePref;
75 +
76 /* X modifiers */
77 #define XK_ANY_MOD UINT_MAX
78 #define XK_NO_MOD 0
79 @@ -783,8 +797,8 @@ xclear(int x1, int y1, int x2, int y2)
80 void
81 xhints(void)
82 {
83 - XClassHint class = {opt_name ? opt_name : termname,
84 - opt_class ? opt_class : termname};
85 + XClassHint class = {opt_name ? opt_name : "st",
86 + opt_class ? opt_class : "St"};
87 XWMHints wm = {.flags = InputHint, .input = 1};
88 XSizeHints *sizeh;
89
90 @@ -1005,8 +1019,6 @@ xinit(int cols, int rows)
91 pid_t thispid = getpid();
92 XColor xmousefg, xmousebg;
93
94 - if (!(xw.dpy = XOpenDisplay(NULL)))
95 - die("can't open display\n");
96 xw.scr = XDefaultScreen(xw.dpy);
97 xw.vis = XDefaultVisual(xw.dpy, xw.scr);
98
99 @@ -1870,6 +1882,59 @@ run(void)
100 }
101 }
102
103 +int
104 +resource_load(XrmDatabase db, char *name, enum resource_type rtype, voi…
105 +{
106 + char **sdst = dst;
107 + int *idst = dst;
108 + float *fdst = dst;
109 +
110 + char fullname[256];
111 + char fullclass[256];
112 + char *type;
113 + XrmValue ret;
114 +
115 + snprintf(fullname, sizeof(fullname), "%s.%s",
116 + opt_name ? opt_name : "st", name);
117 + snprintf(fullclass, sizeof(fullclass), "%s.%s",
118 + opt_class ? opt_class : "St", name);
119 + fullname[sizeof(fullname) - 1] = fullclass[sizeof(fullclass) - …
120 +
121 + XrmGetResource(db, fullname, fullclass, &type, &ret);
122 + if (ret.addr == NULL || strncmp("String", type, 64))
123 + return 1;
124 +
125 + switch (rtype) {
126 + case STRING:
127 + *sdst = ret.addr;
128 + break;
129 + case INTEGER:
130 + *idst = strtoul(ret.addr, NULL, 10);
131 + break;
132 + case FLOAT:
133 + *fdst = strtof(ret.addr, NULL);
134 + break;
135 + }
136 + return 0;
137 +}
138 +
139 +void
140 +config_init(void)
141 +{
142 + char *resm;
143 + XrmDatabase db;
144 + ResourcePref *p;
145 +
146 + XrmInitialize();
147 + resm = XResourceManagerString(xw.dpy);
148 + if (!resm)
149 + return;
150 +
151 + db = XrmGetStringDatabase(resm);
152 + for (p = resources; p < resources + LEN(resources); p++)
153 + resource_load(db, p->name, p->type, p->dst);
154 +}
155 +
156 void
157 usage(void)
158 {
159 @@ -1943,6 +2008,11 @@ run:
160
161 setlocale(LC_CTYPE, "");
162 XSetLocaleModifiers("");
163 +
164 + if(!(xw.dpy = XOpenDisplay(NULL)))
165 + die("Can't open display\n");
166 +
167 + config_init();
168 cols = MAX(cols, 1);
169 rows = MAX(rows, 1);
170 tnew(cols, rows);
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.