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