tmade the string-based setgeom working - dwm - [fork] customized build of dwm, … | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit dba22848c7d077c1a988a901c9390dc3c8cc9d64 | |
parent 33b1960220f468ff2888e8ba3517e9a62ed99974 | |
Author: Anselm R Garbe <[email protected]> | |
Date: Sat, 15 Mar 2008 14:17:42 +0000 | |
made the string-based setgeom working | |
Diffstat: | |
M config.def.h | 16 ++++++++++++++-- | |
M config.mk | 2 +- | |
M dwm.c | 125 +++++++++++++----------------… | |
3 files changed, 68 insertions(+), 75 deletions(-) | |
--- | |
diff --git a/config.def.h b/config.def.h | |
t@@ -9,7 +9,19 @@ | |
#define SELBORDERCOLOR "#0066ff" | |
#define SELBGCOLOR "#0066ff" | |
#define SELFGCOLOR "#ffffff" | |
-#define GEOMETRY "0 0 W B 0 B W H-B 0 B W*0.55 H-B W*0.45 B H-B… | |
+#define GEOMETRY "0 0 W B " \ | |
+ "0 B W H-B " \ | |
+ "0 B W*0.55 H-B " \ | |
+ "W*0.55 B W*0.45 H-B " \ | |
+ "0 B W H-B" | |
+ | |
+/* Anselm's dual head geometry in the office */ | |
+#define DUALGEOMETRY "0 0 1280 B " \ | |
+ "0 B W H-B " \ | |
+ "0 B 1280 800-B " \ | |
+ "1280 0 W-1280 H " \ | |
+ "0 B 1280 800-B" | |
+ | |
/* tagging */ | |
const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; | |
t@@ -38,7 +50,7 @@ Layout layouts[] = { | |
#define MODKEY Mod1Mask | |
Key keys[] = { | |
/* modifier key function … | |
- { MODKEY, XK_a, setgeom, … | |
+ { MODKEY, XK_a, setgeom, … | |
{ MODKEY, XK_d, setgeom, … | |
{ MODKEY, XK_p, spawn, | |
"exec dmenu_run -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGC… | |
diff --git a/config.mk b/config.mk | |
t@@ -17,7 +17,7 @@ LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 | |
# flags | |
CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\" | |
LDFLAGS = -s ${LIBS} | |
-#CFLAGS = -g -std=c99 -pedantic -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\" -DW… | |
+#CFLAGS = -g -std=c99 -pedantic -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\" | |
#LDFLAGS = -g ${LIBS} | |
# Solaris | |
diff --git a/dwm.c b/dwm.c | |
t@@ -107,6 +107,7 @@ typedef struct { | |
} Rule; | |
/* function declarations */ | |
+void applygeom(const char *arg); | |
void applyrules(Client *c); | |
void arrange(void); | |
void attach(Client *c); | |
t@@ -236,6 +237,55 @@ static Bool tmp[LENGTH(tags)]; | |
/* function implementations */ | |
void | |
+applygeometry(const char *arg) { | |
+ static const char *lastArg = NULL; | |
+ char delim, op, *s, *e, *p; | |
+ double val; | |
+ int i, *map[] = { &bx, &by, &bw, &bh, | |
+ &wx, &wy, &ww, &wh, | |
+ &mx, &my, &mw, &mh, | |
+ &tx, &ty, &tw, &th, | |
+ &mox, &moy, &mow, &moh }; | |
+ | |
+ if(!arg) | |
+ arg = lastArg; | |
+ else | |
+ lastArg = arg; | |
+ if(!lastArg) | |
+ return; | |
+ strncpy(buf, arg, sizeof buf); | |
+ for(i = 0, e = s = buf; i < LENGTH(map) && e; e++) | |
+ if(*e == ' ' || *e == 0) { | |
+ delim = *e; | |
+ *e = 0; | |
+ op = 0; | |
+ /* check if there is an operator */ | |
+ for(p = s; p < e && *p != '-' && *p != '+' && *p != '*… | |
+ if(*p) { | |
+ op = *p; | |
+ *p = 0; | |
+ } | |
+ val = getdouble(s); | |
+ if(op && p > s) { /* intermediate operand, e.g. H-B */ | |
+ *(map[i]) = (int)val; | |
+ s = ++p; | |
+ val = getdouble(s); | |
+ } | |
+ switch(op) { | |
+ default: *(map[i]) = (int)val; break; | |
+ case '-': *(map[i]) -= (int)val; break; | |
+ case '+': *(map[i]) += (int)val; break; | |
+ case '*': *(map[i]) = (int)(((double)*(map[i])) * val… | |
+ } | |
+ if(delim == 0) | |
+ e = NULL; | |
+ else | |
+ s = ++e; | |
+ i++; | |
+ } | |
+} | |
+ | |
+void | |
applyrules(Client *c) { | |
unsigned int i; | |
Bool matched = False; | |
t@@ -410,11 +460,8 @@ void | |
configurenotify(XEvent *e) { | |
XConfigureEvent *ev = &e->xconfigure; | |
- if(ev->window == root && (ev->width != sw || ev->height != sh)) { | |
+ if(ev->window == root && (ev->width != sw || ev->height != sh)) | |
setgeom(NULL); | |
- updatebarpos(); | |
- arrange(); | |
- } | |
} | |
void | |
t@@ -1391,31 +1438,11 @@ setclientstate(Client *c, long state) { | |
PropModeReplace, (unsigned char *)data, 2); | |
} | |
-/** | |
- * Idea: | |
- * | |
- * having a geom syntax as follows, which is interpreted as integer. | |
- * | |
- * [-,+][<0..n>|<W,H,B>] | |
- * | |
- * | |
- * B = bar height, W = DisplayWidth(), H = DisplayHeight() | |
- * | |
- * -/+/* /: is relative to current | |
- * | |
- * Then we would come down with <bx>,<by>,<bw>,<bh>,... | |
- * | |
- * "0 0 W B 0 0 W W N E B,W,B, | |
- * | |
- * | |
- */ | |
- | |
double | |
getdouble(const char *s) { | |
char *endp; | |
double result = 0; | |
- fprintf(stderr, "getdouble '%s'\n", s); | |
switch(*s) { | |
default: | |
result = strtod(s, &endp); | |
t@@ -1426,58 +1453,12 @@ getdouble(const char *s) { | |
case 'W': result = sw; break; | |
case 'H': result = sh; break; | |
} | |
- fprintf(stderr, "getdouble returns '%f'\n", result); | |
return result; | |
} | |
void | |
setgeom(const char *arg) { | |
- static const char *lastArg = NULL; | |
- char op, *s, *e, *p; | |
- double val; | |
- int i, *map[] = { &bx, &by, &bw, &bh, | |
- &wx, &wy, &ww, &wh, | |
- &mx, &my, &mw, &mh, | |
- &tx, &ty, &tw, &th, | |
- &mox, &moy, &mow, &moh }; | |
- | |
- if(!arg) | |
- arg = lastArg; | |
- else | |
- lastArg = arg; | |
- if(!lastArg) | |
- return; | |
- strncpy(buf, arg, sizeof buf); | |
- for(i = 0, e = s = buf; e && *e; e++) | |
- if(*e == ' ') { | |
- *e = 0; | |
- fprintf(stderr, "next geom arg='%s'\n", s); | |
- op = 0; | |
- /* check if there is an operator */ | |
- for(p = s; *p && *p != '-' && *p != '+' && *p != '*' &… | |
- if(*p) { | |
- op = *p; | |
- *p = 0; | |
- } | |
- val = getdouble(s); | |
- fprintf(stderr, "val1: %d\n", val); | |
- if(p > s) { /* intermediate operand, e.g. H-B */ | |
- *(map[i]) = val; | |
- s = ++p; | |
- val = getdouble(s); | |
- fprintf(stderr, "val2: %d\n", val); | |
- } | |
- switch(op) { | |
- default: *(map[i]) = val; break; | |
- case '-': *(map[i]) -= val; break; | |
- case '+': *(map[i]) += val; break; | |
- case '*': *(map[i]) *= val; break; | |
- case ':': if(val != 0) *(map[i]) /= val; break; | |
- } | |
- fprintf(stderr, "map[i]='%d'\n", val); | |
- s = ++e; | |
- i++; | |
- } | |
+ applygeometry(arg); | |
updatebarpos(); | |
arrange(); | |
} | |
t@@ -1521,7 +1502,7 @@ setup(void) { | |
sy = 0; | |
sw = DisplayWidth(dpy, screen); | |
sh = DisplayHeight(dpy, screen); | |
- setgeom(GEOMETRY); | |
+ applygeometry(GEOMETRY); | |
/* init atoms */ | |
wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); |