Introduction
Introduction Statistics Contact Development Disclaimer Help
st-xresources-signal-reloading-20220309-1bb14b1.diff - sites - public wiki cont…
git clone git://git.suckless.org/sites
Log
Files
Refs
---
st-xresources-signal-reloading-20220309-1bb14b1.diff (10331B)
---
1 From 1bb14b1cd5b394fb6e777fce1316d5f788b20bea Mon Sep 17 00:00:00 2001
2 From: MahdiMirzadeh <[email protected]>
3 Date: Wed, 9 Mar 2022 17:19:12 +0330
4 Subject: [PATCH] handle st settings from Xresources + reload all st inst…
5 by running 'pidof st | xargs kill -s USR1'
6
7 ---
8 arg.h | 50 -----------------------
9 st.h | 128 ----------------------------------------------------------
10 win.h | 40 ------------------
11 x.c | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12 4 files changed, 126 insertions(+), 218 deletions(-)
13 delete mode 100644 arg.h
14 delete mode 100644 st.h
15 delete mode 100644 win.h
16
17 diff --git a/arg.h b/arg.h
18 deleted file mode 100644
19 index a22e019..0000000
20 --- a/arg.h
21 +++ /dev/null
22 @@ -1,50 +0,0 @@
23 -/*
24 - * Copy me if you can.
25 - * by 20h
26 - */
27 -
28 -#ifndef ARG_H__
29 -#define ARG_H__
30 -
31 -extern char *argv0;
32 -
33 -/* use main(int argc, char *argv[]) */
34 -#define ARGBEGIN for (argv0 = *argv, argv++, argc--;\
35 - argv[0] && argv[0][0] == '-'\
36 - && argv[0][1];\
37 - argc--, argv++) {\
38 - char argc_;\
39 - char **argv_;\
40 - int brk_;\
41 - if (argv[0][1] == '-' && argv[0][2] == …
42 - argv++;\
43 - argc--;\
44 - break;\
45 - }\
46 - int i_;\
47 - for (i_ = 1, brk_ = 0, argv_ = argv;\
48 - argv[0][i_] && !brk_;\
49 - i_++) {\
50 - if (argv_ != argv)\
51 - break;\
52 - argc_ = argv[0][i_];\
53 - switch (argc_)
54 -
55 -#define ARGEND }\
56 - }
57 -
58 -#define ARGC() argc_
59 -
60 -#define EARGF(x) ((argv[0][i_+1] == '\0' && argv[1] == NULL)?\
61 - ((x), abort(), (char *)0) :\
62 - (brk_ = 1, (argv[0][i_+1] != '\0')?\
63 - (&argv[0][i_+1]) :\
64 - (argc--, argv++, argv[0])))
65 -
66 -#define ARGF() ((argv[0][i_+1] == '\0' && argv[1] == NUL…
67 - (char *)0 :\
68 - (brk_ = 1, (argv[0][i_+1] != '\0')?\
69 - (&argv[0][i_+1]) :\
70 - (argc--, argv++, argv[0])))
71 -
72 -#endif
73 diff --git a/st.h b/st.h
74 deleted file mode 100644
75 index 519b9bd..0000000
76 --- a/st.h
77 +++ /dev/null
78 @@ -1,128 +0,0 @@
79 -/* See LICENSE for license details. */
80 -
81 -#include <stdint.h>
82 -#include <sys/types.h>
83 -
84 -/* macros */
85 -#define MIN(a, b) ((a) < (b) ? (a) : (b))
86 -#define MAX(a, b) ((a) < (b) ? (b) : (a))
87 -#define LEN(a) (sizeof(a) / sizeof(a)[0])
88 -#define BETWEEN(x, a, b) ((a) <= (x) && (x) <= (b))
89 -#define DIVCEIL(n, d) (((n) + ((d) - 1)) / (d))
90 -#define DEFAULT(a, b) (a) = (a) ? (a) : (b)
91 -#define LIMIT(x, a, b) (x) = (x) < (a) ? (a) : (x) > (b)…
92 -#define ATTRCMP(a, b) ((a).mode != (b).mode || (a).fg !=…
93 - (a).bg != (b).bg)
94 -#define TIMEDIFF(t1, t2) ((t1.tv_sec-t2.tv_sec)*1000 + \
95 - (t1.tv_nsec-t2.tv_nsec)/1E6)
96 -#define MODBIT(x, set, bit) ((set) ? ((x) |= (bit)) : ((x) &= ~(…
97 -
98 -#define TRUECOLOR(r,g,b) (1 << 24 | (r) << 16 | (g) << 8 | (b))
99 -#define IS_TRUECOL(x) (1 << 24 & (x))
100 -
101 -enum glyph_attribute {
102 - ATTR_NULL = 0,
103 - ATTR_BOLD = 1 << 0,
104 - ATTR_FAINT = 1 << 1,
105 - ATTR_ITALIC = 1 << 2,
106 - ATTR_UNDERLINE = 1 << 3,
107 - ATTR_BLINK = 1 << 4,
108 - ATTR_REVERSE = 1 << 5,
109 - ATTR_INVISIBLE = 1 << 6,
110 - ATTR_STRUCK = 1 << 7,
111 - ATTR_WRAP = 1 << 8,
112 - ATTR_WIDE = 1 << 9,
113 - ATTR_WDUMMY = 1 << 10,
114 - ATTR_BOLD_FAINT = ATTR_BOLD | ATTR_FAINT,
115 -};
116 -
117 -enum selection_mode {
118 - SEL_IDLE = 0,
119 - SEL_EMPTY = 1,
120 - SEL_READY = 2
121 -};
122 -
123 -enum selection_type {
124 - SEL_REGULAR = 1,
125 - SEL_RECTANGULAR = 2
126 -};
127 -
128 -enum selection_snap {
129 - SNAP_WORD = 1,
130 - SNAP_LINE = 2
131 -};
132 -
133 -typedef unsigned char uchar;
134 -typedef unsigned int uint;
135 -typedef unsigned long ulong;
136 -typedef unsigned short ushort;
137 -
138 -typedef uint_least32_t Rune;
139 -
140 -#define Glyph Glyph_
141 -typedef struct {
142 - Rune u; /* character code */
143 - ushort mode; /* attribute flags */
144 - uint32_t fg; /* foreground */
145 - uint32_t bg; /* background */
146 -} Glyph;
147 -
148 -typedef Glyph *Line;
149 -
150 -typedef union {
151 - int i;
152 - uint ui;
153 - float f;
154 - const void *v;
155 - const char *s;
156 -} Arg;
157 -
158 -void die(const char *, ...);
159 -void redraw(void);
160 -void draw(void);
161 -
162 -void printscreen(const Arg *);
163 -void printsel(const Arg *);
164 -void sendbreak(const Arg *);
165 -void toggleprinter(const Arg *);
166 -
167 -int tattrset(int);
168 -void tnew(int, int);
169 -void tresize(int, int);
170 -void tsetdirtattr(int);
171 -void ttyhangup(void);
172 -int ttynew(const char *, char *, const char *, char **);
173 -size_t ttyread(void);
174 -void ttyresize(int, int);
175 -void ttywrite(const char *, size_t, int);
176 -
177 -void resettitle(void);
178 -
179 -void selclear(void);
180 -void selinit(void);
181 -void selstart(int, int, int);
182 -void selextend(int, int, int, int);
183 -int selected(int, int);
184 -char *getsel(void);
185 -
186 -size_t utf8encode(Rune, char *);
187 -
188 -void *xmalloc(size_t);
189 -void *xrealloc(void *, size_t);
190 -char *xstrdup(const char *);
191 -
192 -int xgetcolor(int x, unsigned char *r, unsigned char *g, unsigned char …
193 -
194 -/* config.h globals */
195 -extern char *utmp;
196 -extern char *scroll;
197 -extern char *stty_args;
198 -extern char *vtiden;
199 -extern wchar_t *worddelimiters;
200 -extern int allowaltscreen;
201 -extern int allowwindowops;
202 -extern char *termname;
203 -extern unsigned int tabspaces;
204 -extern unsigned int defaultfg;
205 -extern unsigned int defaultbg;
206 -extern unsigned int defaultcs;
207 diff --git a/win.h b/win.h
208 deleted file mode 100644
209 index e6e4369..0000000
210 --- a/win.h
211 +++ /dev/null
212 @@ -1,40 +0,0 @@
213 -/* See LICENSE for license details. */
214 -
215 -enum win_mode {
216 - MODE_VISIBLE = 1 << 0,
217 - MODE_FOCUSED = 1 << 1,
218 - MODE_APPKEYPAD = 1 << 2,
219 - MODE_MOUSEBTN = 1 << 3,
220 - MODE_MOUSEMOTION = 1 << 4,
221 - MODE_REVERSE = 1 << 5,
222 - MODE_KBDLOCK = 1 << 6,
223 - MODE_HIDE = 1 << 7,
224 - MODE_APPCURSOR = 1 << 8,
225 - MODE_MOUSESGR = 1 << 9,
226 - MODE_8BIT = 1 << 10,
227 - MODE_BLINK = 1 << 11,
228 - MODE_FBLINK = 1 << 12,
229 - MODE_FOCUS = 1 << 13,
230 - MODE_MOUSEX10 = 1 << 14,
231 - MODE_MOUSEMANY = 1 << 15,
232 - MODE_BRCKTPASTE = 1 << 16,
233 - MODE_NUMLOCK = 1 << 17,
234 - MODE_MOUSE = MODE_MOUSEBTN|MODE_MOUSEMOTION|MODE_MOUSEX10\
235 - |MODE_MOUSEMANY,
236 -};
237 -
238 -void xbell(void);
239 -void xclipcopy(void);
240 -void xdrawcursor(int, int, Glyph, int, int, Glyph);
241 -void xdrawline(Line, int, int, int);
242 -void xfinishdraw(void);
243 -void xloadcols(void);
244 -int xsetcolorname(int, const char *);
245 -void xseticontitle(char *);
246 -void xsettitle(char *);
247 -int xsetcursor(int);
248 -void xsetmode(int, unsigned int);
249 -void xsetpointermotion(int);
250 -void xsetsel(char *);
251 -int xstartdraw(void);
252 -void xximspot(int, int);
253 diff --git a/x.c b/x.c
254 index cd96575..2771033 100644
255 --- a/x.c
256 +++ b/x.c
257 @@ -14,6 +14,7 @@
258 #include <X11/keysym.h>
259 #include <X11/Xft/Xft.h>
260 #include <X11/XKBlib.h>
261 +#include <X11/Xresource.h>
262
263 char *argv0;
264 #include "arg.h"
265 @@ -2011,6 +2012,129 @@ run(void)
266 }
267 }
268
269 +#define XRESOURCE_LOAD_META(NAME) …
270 + if(!XrmGetResource(xrdb, "st." NAME, "st." NAME, &type, &ret)) …
271 + XrmGetResource(xrdb, "*." NAME, "*." NAME, &type, &ret)…
272 + if (ret.addr != NULL && !strncmp("String", type, 64))
273 +
274 +#define XRESOURCE_LOAD_STRING(NAME, DST) \
275 + XRESOURCE_LOAD_META(NAME) \
276 + DST = ret.addr;
277 +
278 +#define XRESOURCE_LOAD_CHAR(NAME, DST) \
279 + XRESOURCE_LOAD_META(NAME) \
280 + DST = ret.addr[0];
281 +
282 +#define XRESOURCE_LOAD_INTEGER(NAME, DST) \
283 + XRESOURCE_LOAD_META(NAME) \
284 + DST = strtoul(ret.addr, NULL, 10);
285 +
286 +#define XRESOURCE_LOAD_FLOAT(NAME, DST) \
287 + XRESOURCE_LOAD_META(NAME) \
288 + DST = strtof(ret.addr, NULL);
289 +
290 +void
291 +xrdb_load(void)
292 +{
293 + /* XXX */
294 + char *xrm;
295 + char *type;
296 + XrmDatabase xrdb;
297 + XrmValue ret;
298 + Display *dpy;
299 +
300 + if(!(dpy = XOpenDisplay(NULL)))
301 + die("Can't open display\n");
302 +
303 + XrmInitialize();
304 + xrm = XResourceManagerString(dpy);
305 +
306 + if (xrm != NULL) {
307 + xrdb = XrmGetStringDatabase(xrm);
308 +
309 + /* handling colors here without macros to do via loop. …
310 + int i = 0;
311 + char loadValue[12] = "";
312 + for (i = 0; i < 256; i++)
313 + {
314 + sprintf(loadValue, "%s%d", "st.color", i);
315 +
316 + if(!XrmGetResource(xrdb, loadValue, loadValue, …
317 + {
318 + sprintf(loadValue, "%s%d", "*.color", i…
319 + if (!XrmGetResource(xrdb, loadValue, lo…
320 + /* reset if not found (unless i…
321 + if (i > 15)
322 + colorname[i] = NULL;
323 + }
324 +
325 + if (ret.addr != NULL && !strncmp("String", type…
326 + colorname[i] = ret.addr;
327 + }
328 +
329 + XRESOURCE_LOAD_STRING("foreground", colorname[defaultfg…
330 + XRESOURCE_LOAD_STRING("background", colorname[defaultbg…
331 + XRESOURCE_LOAD_STRING("cursorfg", colorname[defaultcs])
332 + else {
333 + // this looks confusing because we are chaining off o…
334 + // in the macro. probably we should be wrapping every…
335 + // so this isn't possible...
336 + defaultcs = defaultfg;
337 + }
338 + XRESOURCE_LOAD_STRING("reverse-cursor", colorname[defau…
339 + else {
340 + // see above.
341 + defaultrcs = defaultbg;
342 + }
343 +
344 + XRESOURCE_LOAD_STRING("font", font);
345 + XRESOURCE_LOAD_STRING("termname", termname);
346 +
347 + /* XRESOURCE_LOAD_INTEGER("xfps", xfps); */
348 + /* XRESOURCE_LOAD_INTEGER("actionfps", actionfps); */
349 + XRESOURCE_LOAD_INTEGER("blinktimeout", blinktimeout);
350 + XRESOURCE_LOAD_INTEGER("bellvolume", bellvolume);
351 + XRESOURCE_LOAD_INTEGER("borderpx", borderpx);
352 + /* XRESOURCE_LOAD_INTEGER("borderless", borderless); */
353 + XRESOURCE_LOAD_INTEGER("cursorshape", cursorshape);
354 +
355 + /* cursorblinkstate = 1; // in case if cursor shape was…
356 + /* XRESOURCE_LOAD_INTEGER("cursorthickness", cursorthic…
357 + /* XRESOURCE_LOAD_INTEGER("cursorblinkstyle", cursorbli…
358 + /* XRESOURCE_LOAD_INTEGER("cursorblinkontype", cursorbl…
359 +
360 + /* todo: https://github.com/gnotclub/xst/commit/1e82647…
361 + /* XRESOURCE_LOAD_INTEGER("mouseScrollLines", mousescro…
362 +
363 + XRESOURCE_LOAD_FLOAT("cwscale", cwscale);
364 + XRESOURCE_LOAD_FLOAT("chscale", chscale);
365 +
366 + /* XRESOURCE_LOAD_CHAR("prompt_char", prompt_char); */
367 + }
368 + XFlush(dpy);
369 +}
370 +
371 +void
372 +reload(int sig)
373 +{
374 + xrdb_load();
375 +
376 + /* colors, fonts */
377 + xloadcols();
378 + xunloadfonts();
379 + xloadfonts(font, 0);
380 +
381 + /* pretend the window just got resized */
382 + cresize(win.w, win.h);
383 +
384 + redraw();
385 +
386 + /* triggers re-render if we're visible. */
387 + ttywrite("\033[O", 3, 1);
388 +
389 + signal(SIGUSR1, reload);
390 +}
391 +
392 void
393 usage(void)
394 {
395 @@ -2084,6 +2208,8 @@ run:
396
397 setlocale(LC_CTYPE, "");
398 XSetLocaleModifiers("");
399 + xrdb_load();
400 + signal(SIGUSR1, reload);
401 cols = MAX(cols, 1);
402 rows = MAX(rows, 1);
403 tnew(cols, rows);
404 --
405 2.35.1
406
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.