tabbed-xresources-signal-reloading-20220622-014eabf.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
tabbed-xresources-signal-reloading-20220622-014eabf.diff (3895B)
---
1 From 014eabf578fb7d4b37c368c6e110e99897b6013d Mon Sep 17 00:00:00 2001
2 From: Mahdi Mirzadeh <mahdi@mirzadeh.pro>
3 Date: Wed, 22 Jun 2022 04:26:22 +0430
4 Subject: [PATCH] handle tabbed settings from Xresources + reload all tabbed
5 instances by running 'pidof tabbed | xargs kill -s USR1'
6
7 ---
8 config.def.h | 2 +-
9 tabbed.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++
10 2 files changed, 68 insertions(+), 1 deletion(-)
11
12 diff --git a/config.def.h b/config.def.h
13 index defa426..f6d59b2 100644
14 --- a/config.def.h
15 +++ b/config.def.h
16 @@ -1,7 +1,7 @@
17 /* See LICENSE file for copyright and license details. */
18
19 /* appearance */
20 -static const char font[] = "monospace:size=9";
21 +static const char* font = "monospace:size=9";
22 static const char* normbgcolor = "#222222";
23 static const char* normfgcolor = "#cccccc";
24 static const char* selbgcolor = "#555555";
25 diff --git a/tabbed.c b/tabbed.c
26 index eafe28a..829c58b 100644
27 --- a/tabbed.c
28 +++ b/tabbed.c
29 @@ -16,6 +16,7 @@
30 #include <X11/Xutil.h>
31 #include <X11/XKBlib.h>
32 #include <X11/Xft/Xft.h>
33 +#include <X11/Xresource.h>
34
35 #include "arg.h"
36
37 @@ -47,6 +48,16 @@
38 #define CLEANMASK(mask) (mask & ~(numlockmask | LockMask))
39 #define TEXTW(x) (textnw(x, strlen(x)) + dc.font.height)
40
41 +#define XRESOURCE_LOAD_META(NAME) \
42 + if(!XrmGetResource(xrdb, "tabbed." NAME, "tabbed." NAME, &type, &ret)) \
43 + XrmGetResource(xrdb, "*." NAME, "*." NAME, &type, &ret); \
44 + if (ret.addr != NULL && !strncmp("String", type, 64))
45 +
46 +#define XRESOURCE_LOAD_STRING(NAME, DST) \
47 + XRESOURCE_LOAD_META(NAME) \
48 + DST = ret.addr;
49 +
50 +
51 enum { ColFG, ColBG, ColLast }; /* color */
52 enum { WMProtocols, WMDelete, WMName, WMState, WMFullscreen,
53 XEmbed, WMSelectTab, WMLast }; /* default atoms */
54 @@ -135,6 +146,9 @@ static void updatenumlockmask(void);
55 static void updatetitle(int c);
56 static int xerror(Display *dpy, XErrorEvent *ee);
57 static void xsettitle(Window w, const char *str);
58 +static void xrdb_load(void);
59 +static void reload(int sig);
60 +static void writecolors(void);
61
62 /* variables */
63 static int screen;
64 @@ -172,6 +186,8 @@ static const char *geometry;
65
66 char *argv0;
67
68 +static int colors_changed = 0;
69 +
70 /* configuration, allows nested code to access above variables */
71 #include "config.h"
72
73 @@ -327,6 +343,8 @@ drawbar(void)
74 int c, cc, fc, width;
75 char *name = NULL;
76
77 + if (colors_changed == 1) writecolors();
78 +
79 if (nclients == 0) {
80 dc.x = 0;
81 dc.w = ww;
82 @@ -1273,6 +1291,53 @@ usage(void)
83 " [-u color] [-U color] command...\n", argv0);
84 }
85
86 +void
87 +xrdb_load(void)
88 +{
89 + char *xrm;
90 + char *type;
91 + XrmDatabase xrdb;
92 + XrmValue ret;
93 + Display *dpy;
94 +
95 + if(!(dpy = XOpenDisplay(NULL)))
96 + die("Can't open display\n");
97 +
98 + XrmInitialize();
99 + xrm = XResourceManagerString(dpy);
100 +
101 + if (xrm != NULL) {
102 + xrdb = XrmGetStringDatabase(xrm);
103 + XRESOURCE_LOAD_STRING("color0", normbgcolor);
104 + XRESOURCE_LOAD_STRING("color12", normfgcolor);
105 + XRESOURCE_LOAD_STRING("color12", selbgcolor);
106 + XRESOURCE_LOAD_STRING("color0", selfgcolor);
107 + XRESOURCE_LOAD_STRING("color0", urgbgcolor);
108 + XRESOURCE_LOAD_STRING("color1", urgfgcolor);
109 + XRESOURCE_LOAD_STRING("font", font);
110 + }
111 + XFlush(dpy);
112 +}
113 +
114 +void
115 +reload(int sig) {
116 + xrdb_load();
117 + colors_changed=1;
118 + signal(SIGUSR1, reload);
119 +}
120 +
121 +void
122 +writecolors(void) {
123 + dc.norm[ColBG] = getcolor(normbgcolor);
124 + dc.norm[ColFG] = getcolor(normfgcolor);
125 + dc.sel[ColBG] = getcolor(selbgcolor);
126 + dc.sel[ColFG] = getcolor(selfgcolor);
127 + dc.urg[ColBG] = getcolor(urgbgcolor);
128 + dc.urg[ColFG] = getcolor(urgfgcolor);
129 +
130 + colors_changed = 0;
131 +}
132 +
133 int
134 main(int argc, char *argv[])
135 {
136 @@ -1354,6 +1419,8 @@ main(int argc, char *argv[])
137 if (!(dpy = XOpenDisplay(NULL)))
138 die("%s: cannot open display\n", argv0);
139
140 + xrdb_load();
141 + signal(SIGUSR1, reload);
142 setup();
143 printf("0x%lx\n", win);
144 fflush(NULL);
145 --
146 2.35.2
147