dwm-xrdb-6.1.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
dwm-xrdb-6.1.diff (5594B)
---
1 diff --git a/config.def.h b/config.def.h
2 index 7054c06..436e16f 100644
3 --- a/config.def.h
4 +++ b/config.def.h
5 @@ -5,12 +5,12 @@ static const char *fonts[] = {
6 "monospace:size=10"
7 };
8 static const char dmenufont[] = "monospace:size=10";
9 -static const char normbordercolor[] = "#444444";
10 -static const char normbgcolor[] = "#222222";
11 -static const char normfgcolor[] = "#bbbbbb";
12 -static const char selbordercolor[] = "#005577";
13 -static const char selbgcolor[] = "#005577";
14 -static const char selfgcolor[] = "#eeeeee";
15 +static char normbordercolor[] = "#444444";
16 +static char normbgcolor[] = "#222222";
17 +static char normfgcolor[] = "#bbbbbb";
18 +static char selbordercolor[] = "#005577";
19 +static char selbgcolor[] = "#005577";
20 +static char selfgcolor[] = "#eeeeee";
21 static const unsigned int borderpx = 1; /* border pixel of windows */
22 static const unsigned int snap = 32; /* snap pixel */
23 static const int showbar = 1; /* 0 means no bar */
24 @@ -82,6 +82,7 @@ static Key keys[] = {
25 { MODKEY, XK_period, focusmon, {.i = +1 } },
26 { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
27 { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
28 + { MODKEY, XK_F5, xrdb, {.v = NULL } },
29 TAGKEYS( XK_1, 0)
30 TAGKEYS( XK_2, 1)
31 TAGKEYS( XK_3, 2)
32 @@ -110,4 +111,3 @@ static Button buttons[] = {
33 { ClkTagBar, MODKEY, Button1, tag, {0} },
34 { ClkTagBar, MODKEY, Button3, toggletag, {0} },
35 };
36 -
37 diff --git a/dwm.c b/dwm.c
38 index 0362114..bb1238c 100644
39 --- a/dwm.c
40 +++ b/dwm.c
41 @@ -35,6 +35,7 @@
42 #include <X11/Xatom.h>
43 #include <X11/Xlib.h>
44 #include <X11/Xproto.h>
45 +#include <X11/Xresource.h>
46 #include <X11/Xutil.h>
47 #ifdef XINERAMA
48 #include <X11/extensions/Xinerama.h>
49 @@ -56,6 +57,21 @@
50 #define HEIGHT(X) ((X)->h + 2 * (X)->bw)
51 #define TAGMASK ((1 << LENGTH(tags)) - 1)
52 #define TEXTW(X) (drw_text(drw, 0, 0, 0, 0, (X), 0) + drw->fonts[0]->h)
53 +#define XRDB_LOAD_COLOR(R,V) if (XrmGetResource(xrdb, R, NULL, &type, &value) == True) { \
54 + if (value.addr != NULL && strnlen(value.addr, 8) == 7 && value.addr[0] == '#') { \
55 + int i = 1; \
56 + for (; i <= 6; i++) { \
57 + if (value.addr[i] < 48) break; \
58 + if (value.addr[i] > 57 && value.addr[i] < 65) break; \
59 + if (value.addr[i] > 70 && value.addr[i] < 97) break; \
60 + if (value.addr[i] > 102) break; \
61 + } \
62 + if (i == 7) { \
63 + strncpy(V, value.addr, 7); \
64 + V[7] = '\0'; \
65 + } \
66 + } \
67 + }
68
69 /* enums */
70 enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
71 @@ -178,6 +194,7 @@ static void grabkeys(void);
72 static void incnmaster(const Arg *arg);
73 static void keypress(XEvent *e);
74 static void killclient(const Arg *arg);
75 +static void loadxrdb(void);
76 static void manage(Window w, XWindowAttributes *wa);
77 static void mappingnotify(XEvent *e);
78 static void maprequest(XEvent *e);
79 @@ -232,6 +249,7 @@ static Monitor *wintomon(Window w);
80 static int xerror(Display *dpy, XErrorEvent *ee);
81 static int xerrordummy(Display *dpy, XErrorEvent *ee);
82 static int xerrorstart(Display *dpy, XErrorEvent *ee);
83 +static void xrdb(const Arg *arg);
84 static void zoom(const Arg *arg);
85
86 /* variables */
87 @@ -1029,6 +1047,37 @@ killclient(const Arg *arg)
88 }
89 }
90
91 +void
92 +loadxrdb()
93 +{
94 + Display *display;
95 + char *resm;
96 + XrmDatabase xrdb;
97 + char *type;
98 + XrmValue value;
99 +
100 + display = XOpenDisplay(NULL);
101 +
102 + if (display != NULL) {
103 + resm = XResourceManagerString(display);
104 +
105 + if (resm != NULL) {
106 + xrdb = XrmGetStringDatabase(resm);
107 +
108 + if (xrdb != NULL) {
109 + XRDB_LOAD_COLOR("dwm.normbordercolor", normbordercolor);
110 + XRDB_LOAD_COLOR("dwm.normbgcolor", normbgcolor);
111 + XRDB_LOAD_COLOR("dwm.normfgcolor", normfgcolor);
112 + XRDB_LOAD_COLOR("dwm.selbordercolor", selbordercolor);
113 + XRDB_LOAD_COLOR("dwm.selbgcolor", selbgcolor);
114 + XRDB_LOAD_COLOR("dwm.selfgcolor", selfgcolor);
115 + }
116 + }
117 + }
118 +
119 + XCloseDisplay(display);
120 +}
121 +
122 void
123 manage(Window w, XWindowAttributes *wa)
124 {
125 @@ -2106,6 +2155,22 @@ xerrorstart(Display *dpy, XErrorEvent *ee)
126 return -1;
127 }
128
129 +void
130 +xrdb(const Arg *arg)
131 +{
132 + loadxrdb();
133 +
134 + scheme[SchemeNorm].border = drw_clr_create(drw, normbordercolor);
135 + scheme[SchemeNorm].bg = drw_clr_create(drw, normbgcolor);
136 + scheme[SchemeNorm].fg = drw_clr_create(drw, normfgcolor);
137 + scheme[SchemeSel].border = drw_clr_create(drw, selbordercolor);
138 + scheme[SchemeSel].bg = drw_clr_create(drw, selbgcolor);
139 + scheme[SchemeSel].fg = drw_clr_create(drw, selfgcolor);
140 +
141 + focus(NULL);
142 + arrange(NULL);
143 +}
144 +
145 void
146 zoom(const Arg *arg)
147 {
148 @@ -2132,6 +2197,8 @@ main(int argc, char *argv[])
149 if (!(dpy = XOpenDisplay(NULL)))
150 die("dwm: cannot open display\n");
151 checkotherwm();
152 + XrmInitialize();
153 + loadxrdb();
154 setup();
155 scan();
156 run();