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 means no bar */ 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 spawn() */ 35 -static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL }; 36 +static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbordercolor, "-sf", selfgcolor, NULL }; 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 = +1 } }, 42 { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } }, 43 { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } }, 44 + { MODKEY, XK_F5, xrdb, {.v = NULL } }, 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 *clrname) 53 /* Wrapper to create color schemes. The caller has to call free(3) on the 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, unsigned int len, unsigned in 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, &value) == True) { \ 91 + if (value.addr != NULL && strnlen(value.addr, 8) == 7 && value.addr[0] == '#') { \ 92 + int i = 1; \ 93 + for (; i <= 6; i++) { \ 94 + if (value.addr[i] < 48) break; \ 95 + if (value.addr[i] > 57 && value.addr[i] < 65) break; \ 96 + if (value.addr[i] > 70 && value.addr[i] < 97) break; \ 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)