Introduction
Introduction Statistics Contact Development Disclaimer Help
tabbed-xresources-20210317-dabf6a2.diff - sites - public wiki contents of suckl…
git clone git://git.suckless.org/sites
Log
Files
Refs
---
tabbed-xresources-20210317-dabf6a2.diff (4725B)
---
1 From 8c48f1564c555bbd21758a3a70a9984e61c34a35 Mon Sep 17 00:00:00 2001
2 From: 6d6f7274686f6e <[email protected]>
3 Date: Wed, 17 Mar 2021 10:59:18 +0100
4 Subject: [PATCH] xresources support
5
6 ---
7 config.def.h | 27 ++++++++++++++------
8 tabbed.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++
9 2 files changed, 89 insertions(+), 7 deletions(-)
10
11 diff --git a/config.def.h b/config.def.h
12 index defa426..244e288 100644
13 --- a/config.def.h
14 +++ b/config.def.h
15 @@ -1,13 +1,13 @@
16 /* See LICENSE file for copyright and license details. */
17
18 /* appearance */
19 -static const char font[] = "monospace:size=9";
20 -static const char* normbgcolor = "#222222";
21 -static const char* normfgcolor = "#cccccc";
22 -static const char* selbgcolor = "#555555";
23 -static const char* selfgcolor = "#ffffff";
24 -static const char* urgbgcolor = "#111111";
25 -static const char* urgfgcolor = "#cc0000";
26 +static char font[] = "monospace:size=9";
27 +static char* normbgcolor = "#222222";
28 +static char* normfgcolor = "#cccccc";
29 +static char* selbgcolor = "#555555";
30 +static char* selfgcolor = "#ffffff";
31 +static char* urgbgcolor = "#111111";
32 +static char* urgfgcolor = "#cc0000";
33 static const char before[] = "<";
34 static const char after[] = ">";
35 static const char titletrim[] = "...";
36 @@ -33,6 +33,19 @@ static Bool npisrelative = False;
37 } \
38 }
39
40 +/*
41 + * Xresources preferences to load at startup
42 + */
43 +ResourcePref resources[] = {
44 + { "font", STRING, &font },
45 + { "color0", STRING, &normbgcolor },
46 + { "color4", STRING, &normfgcolor },
47 + { "color4", STRING, &selbgcolor },
48 + { "color7", STRING, &selfgcolor },
49 + { "color2", STRING, &urgbgcolor },
50 + { "color3", STRING, &urgfgcolor },
51 +};
52 +
53 #define MODKEY ControlMask
54 static Key keys[] = {
55 /* modifier key function argument */
56 diff --git a/tabbed.c b/tabbed.c
57 index eafe28a..c5bffc7 100644
58 --- a/tabbed.c
59 +++ b/tabbed.c
60 @@ -13,6 +13,7 @@
61 #include <X11/Xatom.h>
62 #include <X11/Xlib.h>
63 #include <X11/Xproto.h>
64 +#include <X11/Xresource.h>
65 #include <X11/Xutil.h>
66 #include <X11/XKBlib.h>
67 #include <X11/Xft/Xft.h>
68 @@ -85,11 +86,26 @@ typedef struct {
69 Bool urgent;
70 Bool closed;
71 } Client;
72 +
73 +/* Xresources preferences */
74 +enum resource_type {
75 + STRING = 0,
76 + INTEGER = 1,
77 + FLOAT = 2
78 +};
79 +
80 +typedef struct {
81 + char *name;
82 + enum resource_type type;
83 + void *dst;
84 +} ResourcePref;
85 +
86
87 /* function declarations */
88 static void buttonpress(const XEvent *e);
89 static void cleanup(void);
90 static void clientmessage(const XEvent *e);
91 +static void config_init(void);
92 static void configurenotify(const XEvent *e);
93 static void configurerequest(const XEvent *e);
94 static void createnotify(const XEvent *e);
95 @@ -120,6 +136,7 @@ static void move(const Arg *arg);
96 static void movetab(const Arg *arg);
97 static void propertynotify(const XEvent *e);
98 static void resize(int c, int w, int h);
99 +static int resource_load(XrmDatabase db, char *name, enum resource_type…
100 static void rotate(const Arg *arg);
101 static void run(void);
102 static void sendxembed(int c, long msg, long detail, long d1, long d2);
103 @@ -245,6 +262,23 @@ clientmessage(const XEvent *e)
104 }
105 }
106
107 +void
108 +config_init(void)
109 +{
110 + char *resm;
111 + XrmDatabase db;
112 + ResourcePref *p;
113 +
114 + XrmInitialize();
115 + resm = XResourceManagerString(dpy);
116 + if (!resm)
117 + return;
118 +
119 + db = XrmGetStringDatabase(resm);
120 + for (p = resources; p < resources + LENGTH(resources); p++)
121 + resource_load(db, p->name, p->type, p->dst);
122 +}
123 +
124 void
125 configurenotify(const XEvent *e)
126 {
127 @@ -897,6 +931,40 @@ resize(int c, int w, int h)
128 (XEvent *)&ce);
129 }
130
131 +int
132 +resource_load(XrmDatabase db, char *name, enum resource_type rtype, voi…
133 +{
134 + char **sdst = dst;
135 + int *idst = dst;
136 + float *fdst = dst;
137 +
138 + char fullname[256];
139 + char fullclass[256];
140 + char *type;
141 + XrmValue ret;
142 +
143 + snprintf(fullname, sizeof(fullname), "%s.%s", "tabbed", name);
144 + snprintf(fullclass, sizeof(fullclass), "%s.%s", "tabbed", name);
145 + fullname[sizeof(fullname) - 1] = fullclass[sizeof(fullclass) - …
146 +
147 + XrmGetResource(db, fullname, fullclass, &type, &ret);
148 + if (ret.addr == NULL || strncmp("String", type, 64))
149 + return 1;
150 +
151 + switch (rtype) {
152 + case STRING:
153 + *sdst = ret.addr;
154 + break;
155 + case INTEGER:
156 + *idst = strtoul(ret.addr, NULL, 10);
157 + break;
158 + case FLOAT:
159 + *fdst = strtof(ret.addr, NULL);
160 + break;
161 + }
162 + return 0;
163 +}
164 +
165 void
166 rotate(const Arg *arg)
167 {
168 @@ -1354,6 +1422,7 @@ main(int argc, char *argv[])
169 if (!(dpy = XOpenDisplay(NULL)))
170 die("%s: cannot open display\n", argv0);
171
172 + config_init();
173 setup();
174 printf("0x%lx\n", win);
175 fflush(NULL);
176 --
177 2.30.2
178
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.