dwm-xrdb-6.4.diff - sites - public wiki contents of suckless.org | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
dwm-xrdb-6.4.diff (7418B) | |
--- | |
1 From e7c65d2ce902a19a20daa751b42f8ba0209fdb61 Mon Sep 17 00:00:00 2001 | |
2 From: NekoCWD <[email protected]> | |
3 Date: Sun, 22 Jan 2023 23:42:57 +0300 | |
4 Subject: [PATCH] [dwm] xrdb update 6.4 | |
5 | |
6 --- | |
7 config.def.h | 22 ++++++++++--------- | |
8 drw.c | 2 +- | |
9 drw.h | 2 +- | |
10 dwm.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++ | |
11 4 files changed, 76 insertions(+), 12 deletions(-) | |
12 | |
13 diff --git a/config.def.h b/config.def.h | |
14 index 061ad66..686b947 100644 | |
15 --- a/config.def.h | |
16 +++ b/config.def.h | |
17 @@ -7,15 +7,16 @@ static const int showbar = 1; /* 0 m… | |
18 static const int topbar = 1; /* 0 means bottom bar */ | |
19 static const char *fonts[] = { "monospace:size=10" }; | |
20 static const char dmenufont[] = "monospace:size=10"; | |
21 -static const char col_gray1[] = "#222222"; | |
22 -static const char col_gray2[] = "#444444"; | |
23 -static const char col_gray3[] = "#bbbbbb"; | |
24 -static const char col_gray4[] = "#eeeeee"; | |
25 -static const char col_cyan[] = "#005577"; | |
26 -static const char *colors[][3] = { | |
27 - /* fg bg border */ | |
28 - [SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, | |
29 - [SchemeSel] = { col_gray4, col_cyan, col_cyan }, | |
30 +static char normbgcolor[] = "#222222"; | |
31 +static char normbordercolor[] = "#444444"; | |
32 +static char normfgcolor[] = "#bbbbbb"; | |
33 +static char selfgcolor[] = "#eeeeee"; | |
34 +static char selbordercolor[] = "#005577"; | |
35 +static char selbgcolor[] = "#005577"; | |
36 +static char *colors[][3] = { | |
37 + /* fg bg border */ | |
38 + [SchemeNorm] = { normfgcolor, normbgcolor, normbordercolor }, | |
39 + [SchemeSel] = { selfgcolor, selbgcolor, selbordercolor }, | |
40 }; | |
41 | |
42 /* tagging */ | |
43 @@ -56,7 +57,7 @@ static const Layout layouts[] = { | |
44 #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL }… | |
45 | |
46 /* commands */ | |
47 -static const char *dmenucmd[] = { "dmenu_run", "-fn", dmenufont, "-nb",… | |
48 +static const char *dmenucmd[] = { "dmenu_run", "-fn", dmenufont, "-nb",… | |
49 static const char *termcmd[] = { "st", NULL }; | |
50 | |
51 static const Key keys[] = { | |
52 @@ -84,6 +85,7 @@ static const Key keys[] = { | |
53 { MODKEY, XK_period, focusmon, {.i … | |
54 { MODKEY|ShiftMask, XK_comma, tagmon, {.i … | |
55 { MODKEY|ShiftMask, XK_period, tagmon, {.i … | |
56 + { MODKEY, XK_F5, xrdb, {.v … | |
57 TAGKEYS( XK_1, 0) | |
58 TAGKEYS( XK_2, 1) | |
59 TAGKEYS( XK_3, 2) | |
60 diff --git a/drw.c b/drw.c | |
61 index a58a2b4..f8a82f5 100644 | |
62 --- a/drw.c | |
63 +++ b/drw.c | |
64 @@ -195,7 +195,7 @@ drw_clr_create(Drw *drw, Clr *dest, const char *clrn… | |
65 /* Wrapper to create color schemes. The caller has to call free(3) on t… | |
66 * returned color scheme when done using it. */ | |
67 Clr * | |
68 -drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount) | |
69 +drw_scm_create(Drw *drw, char *clrnames[], size_t clrcount) | |
70 { | |
71 size_t i; | |
72 Clr *ret; | |
73 diff --git a/drw.h b/drw.h | |
74 index 6471431..bdbf950 100644 | |
75 --- a/drw.h | |
76 +++ b/drw.h | |
77 @@ -40,7 +40,7 @@ void drw_font_getexts(Fnt *font, const char *text, uns… | |
78 | |
79 /* Colorscheme abstraction */ | |
80 void drw_clr_create(Drw *drw, Clr *dest, const char *clrname); | |
81 -Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount); | |
82 +Clr *drw_scm_create(Drw *drw, char *clrnames[], size_t clrcount); | |
83 | |
84 /* Cursor abstraction */ | |
85 Cur *drw_cur_create(Drw *drw, int shape); | |
86 diff --git a/dwm.c b/dwm.c | |
87 index e5efb6a..3fe76be 100644 | |
88 --- a/dwm.c | |
89 +++ b/dwm.c | |
90 @@ -35,6 +35,7 @@ | |
91 #include <X11/Xatom.h> | |
92 #include <X11/Xlib.h> | |
93 #include <X11/Xproto.h> | |
94 +#include <X11/Xresource.h> | |
95 #include <X11/Xutil.h> | |
96 #ifdef XINERAMA | |
97 #include <X11/extensions/Xinerama.h> | |
98 @@ -56,6 +57,21 @@ | |
99 #define HEIGHT(X) ((X)->h + 2 * (X)->bw) | |
100 #define TAGMASK ((1 << LENGTH(tags)) - 1) | |
101 #define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad) | |
102 +#define XRDB_LOAD_COLOR(R,V) if (XrmGetResource(xrdb, R, NULL, &type… | |
103 + if (value.addr != NULL && strnlen(val… | |
104 + int i = 1; \ | |
105 + for (; i <= 6; i++) { \ | |
106 + if (value.addr[i] < 48) break; \ | |
107 + if (value.addr[i] > 57 && value.a… | |
108 + if (value.addr[i] > 70 && value.a… | |
109 + if (value.addr[i] > 102) break; \ | |
110 + } \ | |
111 + if (i == 7) { \ | |
112 + strncpy(V, value.addr, 7); \ | |
113 + V[7] = '\0'; \ | |
114 + } \ | |
115 + } \ | |
116 + } | |
117 | |
118 /* enums */ | |
119 enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ | |
120 @@ -178,6 +194,7 @@ static void grabkeys(void); | |
121 static void incnmaster(const Arg *arg); | |
122 static void keypress(XEvent *e); | |
123 static void killclient(const Arg *arg); | |
124 +static void loadxrdb(void); | |
125 static void manage(Window w, XWindowAttributes *wa); | |
126 static void mappingnotify(XEvent *e); | |
127 static void maprequest(XEvent *e); | |
128 @@ -233,6 +250,7 @@ static Monitor *wintomon(Window w); | |
129 static int xerror(Display *dpy, XErrorEvent *ee); | |
130 static int xerrordummy(Display *dpy, XErrorEvent *ee); | |
131 static int xerrorstart(Display *dpy, XErrorEvent *ee); | |
132 +static void xrdb(const Arg *arg); | |
133 static void zoom(const Arg *arg); | |
134 | |
135 /* variables */ | |
136 @@ -1019,6 +1037,37 @@ killclient(const Arg *arg) | |
137 } | |
138 } | |
139 | |
140 +void | |
141 +loadxrdb() | |
142 +{ | |
143 + Display *display; | |
144 + char * resm; | |
145 + XrmDatabase xrdb; | |
146 + char *type; | |
147 + XrmValue value; | |
148 + | |
149 + display = XOpenDisplay(NULL); | |
150 + | |
151 + if (display != NULL) { | |
152 + resm = XResourceManagerString(display); | |
153 + | |
154 + if (resm != NULL) { | |
155 + xrdb = XrmGetStringDatabase(resm); | |
156 + | |
157 + if (xrdb != NULL) { | |
158 + XRDB_LOAD_COLOR("dwm.normbordercolor", normbordercolor); | |
159 + XRDB_LOAD_COLOR("dwm.normbgcolor", normbgcolor); | |
160 + XRDB_LOAD_COLOR("dwm.normfgcolor", normfgcolor); | |
161 + XRDB_LOAD_COLOR("dwm.selbordercolor", selbordercolor); | |
162 + XRDB_LOAD_COLOR("dwm.selbgcolor", selbgcolor); | |
163 + XRDB_LOAD_COLOR("dwm.selfgcolor", selfgcolor); | |
164 + } | |
165 + } | |
166 + } | |
167 + | |
168 + XCloseDisplay(display); | |
169 +} | |
170 + | |
171 void | |
172 manage(Window w, XWindowAttributes *wa) | |
173 { | |
174 @@ -2110,6 +2159,17 @@ xerrorstart(Display *dpy, XErrorEvent *ee) | |
175 return -1; | |
176 } | |
177 | |
178 +void | |
179 +xrdb(const Arg *arg) | |
180 +{ | |
181 + loadxrdb(); | |
182 + int i; | |
183 + for (i = 0; i < LENGTH(colors); i++) | |
184 + scheme[i] = drw_scm_create(drw, colors[i], 3); | |
185 + focus(NULL); | |
186 + arrange(NULL); | |
187 +} | |
188 + | |
189 void | |
190 zoom(const Arg *arg) | |
191 { | |
192 @@ -2134,6 +2194,8 @@ main(int argc, char *argv[]) | |
193 if (!(dpy = XOpenDisplay(NULL))) | |
194 die("dwm: cannot open display"); | |
195 checkotherwm(); | |
196 + XrmInitialize(); | |
197 + loadxrdb(); | |
198 setup(); | |
199 #ifdef __OpenBSD__ | |
200 if (pledge("stdio rpath proc exec", NULL) == -1) | |
201 -- | |
202 2.38.2 | |
203 |