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