Introduction
Introduction Statistics Contact Development Disclaimer Help
dwm-xresources-20210314.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dwm-xresources-20210314.diff (8218B)
---
1 From d28a26439326d7566a43459e1ef00b5b7c7f5b11 Mon Sep 17 00:00:00 2001
2 From: David JULIEN <[email protected]>
3 Date: Sun, 14 Mar 2021 18:19:17 +0100
4 Subject: [PATCH] [PATCH] feat: manage font through xrdb
5
6 add font management to the dwm-resources patch, enabling to manage fonts
7 by sourcing $XRESOURCES
8 ---
9 config.def.h | 61 ++++++++++++++++++++++++++++++--------------
10 drw.c | 2 +-
11 drw.h | 2 +-
12 dwm.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++
13 4 files changed, 116 insertions(+), 21 deletions(-)
14
15 diff --git a/config.def.h b/config.def.h
16 index 1c0b587..db7b7bb 100644
17 --- a/config.def.h
18 +++ b/config.def.h
19 @@ -1,21 +1,23 @@
20 /* See LICENSE file for copyright and license details. */
21
22 /* appearance */
23 -static const unsigned int borderpx = 1; /* border pixel of wind…
24 -static const unsigned int snap = 32; /* snap pixel */
25 -static const int showbar = 1; /* 0 means no bar */
26 -static const int topbar = 1; /* 0 means bottom bar */
27 -static const char *fonts[] = { "monospace:size=10" };
28 -static const char dmenufont[] = "monospace:size=10";
29 -static const char col_gray1[] = "#222222";
30 -static const char col_gray2[] = "#444444";
31 -static const char col_gray3[] = "#bbbbbb";
32 -static const char col_gray4[] = "#eeeeee";
33 -static const char col_cyan[] = "#005577";
34 -static const char *colors[][3] = {
35 - /* fg bg border */
36 - [SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
37 - [SchemeSel] = { col_gray4, col_cyan, col_cyan },
38 +static unsigned int borderpx = 1; /* border pixel of windows */
39 +static unsigned int snap = 32; /* snap pixel */
40 +static int showbar = 1; /* 0 means no bar */
41 +static int topbar = 1; /* 0 means bottom bar */
42 +static char font[] = "monospace:size=10";
43 +static char dmenufont[] = "monospace:size=10";
44 +static const char *fonts[] = { font };
45 +static char normbgcolor[] = "#222222";
46 +static char normbordercolor[] = "#444444";
47 +static char normfgcolor[] = "#bbbbbb";
48 +static char selfgcolor[] = "#eeeeee";
49 +static char selbordercolor[] = "#005577";
50 +static char selbgcolor[] = "#005577";
51 +static char *colors[][3] = {
52 + /* fg bg border */
53 + [SchemeNorm] = { normfgcolor, normbgcolor, normbordercolor },
54 + [SchemeSel] = { selfgcolor, selbgcolor, selbordercolor },
55 };
56
57 /* tagging */
58 @@ -32,9 +34,9 @@ static const Rule rules[] = {
59 };
60
61 /* layout(s) */
62 -static const float mfact = 0.55; /* factor of master area size [0.0…
63 -static const int nmaster = 1; /* number of clients in master are…
64 -static const int resizehints = 1; /* 1 means respect size hints in t…
65 +static float mfact = 0.55; /* factor of master area size [0.05..0.9…
66 +static int nmaster = 1; /* number of clients in master area */
67 +static int resizehints = 1; /* 1 means respect size hints in tiled r…
68
69 static const Layout layouts[] = {
70 /* symbol arrange function */
71 @@ -56,9 +58,30 @@ static const Layout layouts[] = {
72
73 /* commands */
74 static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in…
75 -static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", d…
76 +static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", d…
77 static const char *termcmd[] = { "st", NULL };
78
79 +/*
80 + * Xresources preferences to load at startup
81 + */
82 +ResourcePref resources[] = {
83 + { "font", STRING, &font },
84 + { "dmenufont", STRING, &dmenufont },
85 + { "normbgcolor", STRING, &normbgcolor },
86 + { "normbordercolor", STRING, &normbordercolor },
87 + { "normfgcolor", STRING, &normfgcolor },
88 + { "selbgcolor", STRING, &selbgcolor },
89 + { "selbordercolor", STRING, &selbordercolor },
90 + { "selfgcolor", STRING, &selfgcolor },
91 + { "borderpx", INTEGER, &borderpx },
92 + { "snap", INTEGER, &snap },
93 + { "showbar", INTEGER, &showbar },
94 + { "topbar", INTEGER, &topbar },
95 + { "nmaster", INTEGER, &nmaster },
96 + { "resizehints", INTEGER, &resizehints },
97 + { "mfact", FLOAT, &mfact },
98 +};
99 +
100 static Key keys[] = {
101 /* modifier key function argu…
102 { MODKEY, XK_p, spawn, {.v …
103 diff --git a/drw.c b/drw.c
104 index 4cdbcbe..8f1059e 100644
105 --- a/drw.c
106 +++ b/drw.c
107 @@ -208,7 +208,7 @@ drw_clr_create(Drw *drw, Clr *dest, const char *clrn…
108 /* Wrapper to create color schemes. The caller has to call free(3) on t…
109 * returned color scheme when done using it. */
110 Clr *
111 -drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount)
112 +drw_scm_create(Drw *drw, char *clrnames[], size_t clrcount)
113 {
114 size_t i;
115 Clr *ret;
116 diff --git a/drw.h b/drw.h
117 index 4bcd5ad..42b04ce 100644
118 --- a/drw.h
119 +++ b/drw.h
120 @@ -39,7 +39,7 @@ void drw_font_getexts(Fnt *font, const char *text, uns…
121
122 /* Colorscheme abstraction */
123 void drw_clr_create(Drw *drw, Clr *dest, const char *clrname);
124 -Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount);
125 +Clr *drw_scm_create(Drw *drw, char *clrnames[], size_t clrcount);
126
127 /* Cursor abstraction */
128 Cur *drw_cur_create(Drw *drw, int shape);
129 diff --git a/dwm.c b/dwm.c
130 index 664c527..17bb21e 100644
131 --- a/dwm.c
132 +++ b/dwm.c
133 @@ -36,6 +36,7 @@
134 #include <X11/Xlib.h>
135 #include <X11/Xproto.h>
136 #include <X11/Xutil.h>
137 +#include <X11/Xresource.h>
138 #ifdef XINERAMA
139 #include <X11/extensions/Xinerama.h>
140 #endif /* XINERAMA */
141 @@ -141,6 +142,19 @@ typedef struct {
142 int monitor;
143 } Rule;
144
145 +/* Xresources preferences */
146 +enum resource_type {
147 + STRING = 0,
148 + INTEGER = 1,
149 + FLOAT = 2
150 +};
151 +
152 +typedef struct {
153 + char *name;
154 + enum resource_type type;
155 + void *dst;
156 +} ResourcePref;
157 +
158 /* function declarations */
159 static void applyrules(Client *c);
160 static int applysizehints(Client *c, int *x, int *y, int *w, int *h, in…
161 @@ -234,6 +248,8 @@ static int xerror(Display *dpy, XErrorEvent *ee);
162 static int xerrordummy(Display *dpy, XErrorEvent *ee);
163 static int xerrorstart(Display *dpy, XErrorEvent *ee);
164 static void zoom(const Arg *arg);
165 +static void load_xresources(void);
166 +static void resource_load(XrmDatabase db, char *name, enum resource_typ…
167
168 /* variables */
169 static const char broken[] = "broken";
170 @@ -2127,6 +2143,60 @@ zoom(const Arg *arg)
171 pop(c);
172 }
173
174 +void
175 +resource_load(XrmDatabase db, char *name, enum resource_type rtype, voi…
176 +{
177 + char *sdst = NULL;
178 + int *idst = NULL;
179 + float *fdst = NULL;
180 +
181 + sdst = dst;
182 + idst = dst;
183 + fdst = dst;
184 +
185 + char fullname[256];
186 + char *type;
187 + XrmValue ret;
188 +
189 + snprintf(fullname, sizeof(fullname), "%s.%s", "dwm", name);
190 + fullname[sizeof(fullname) - 1] = '\0';
191 +
192 + XrmGetResource(db, fullname, "*", &type, &ret);
193 + if (!(ret.addr == NULL || strncmp("String", type, 64)))
194 + {
195 + switch (rtype) {
196 + case STRING:
197 + strcpy(sdst, ret.addr);
198 + break;
199 + case INTEGER:
200 + *idst = strtoul(ret.addr, NULL, 10);
201 + break;
202 + case FLOAT:
203 + *fdst = strtof(ret.addr, NULL);
204 + break;
205 + }
206 + }
207 +}
208 +
209 +void
210 +load_xresources(void)
211 +{
212 + Display *display;
213 + char *resm;
214 + XrmDatabase db;
215 + ResourcePref *p;
216 +
217 + display = XOpenDisplay(NULL);
218 + resm = XResourceManagerString(display);
219 + if (!resm)
220 + return;
221 +
222 + db = XrmGetStringDatabase(resm);
223 + for (p = resources; p < resources + LENGTH(resources); p++)
224 + resource_load(db, p->name, p->type, p->dst);
225 + XCloseDisplay(display);
226 +}
227 +
228 int
229 main(int argc, char *argv[])
230 {
231 @@ -2139,6 +2209,8 @@ main(int argc, char *argv[])
232 if (!(dpy = XOpenDisplay(NULL)))
233 die("dwm: cannot open display");
234 checkotherwm();
235 + XrmInitialize();
236 + load_xresources();
237 setup();
238 #ifdef __OpenBSD__
239 if (pledge("stdio rpath proc exec", NULL) == -1)
240 --
241 2.30.2
242
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.