tupdated man page - dwm - [fork] customized build of dwm, the dynamic window ma… | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 7e597ae204ce94398f8c722e335f20d5a4a30c8a | |
parent c39df91ab9826ef134bc1484b0d19186790132f3 | |
Author: Anselm R. Garbe <[email protected]> | |
Date: Wed, 23 Aug 2006 18:50:46 +0200 | |
updated man page | |
Diffstat: | |
M client.c | 22 +++++++++------------- | |
M config.arg.h | 5 ++--- | |
M draw.c | 96 +++++++++++++++--------------… | |
M dwm.1 | 8 ++++---- | |
M dwm.h | 2 +- | |
M tag.c | 2 ++ | |
M view.c | 8 ++++---- | |
7 files changed, 69 insertions(+), 74 deletions(-) | |
--- | |
diff --git a/client.c b/client.c | |
t@@ -28,19 +28,15 @@ resizetitle(Client *c) | |
{ | |
int i; | |
- c->tw = 0; | |
- for(i = 0; i < ntags; i++) | |
- if(c->tags[i]) | |
- c->tw += textw(tags[i]); | |
- c->tw += textw(c->name); | |
+ c->tw = textw(c->name); | |
if(c->tw > c->w) | |
c->tw = c->w + 2; | |
c->tx = c->x + c->w - c->tw + 2; | |
c->ty = c->y; | |
if(isvisible(c)) | |
- XMoveResizeWindow(dpy, c->title, c->tx, c->ty, c->tw, c->th); | |
+ XMoveResizeWindow(dpy, c->twin, c->tx, c->ty, c->tw, c->th); | |
else | |
- XMoveResizeWindow(dpy, c->title, c->tx + 2 * sw, c->ty, c->tw,… | |
+ XMoveResizeWindow(dpy, c->twin, c->tx + 2 * sw, c->ty, c->tw, … | |
} | |
t@@ -65,7 +61,7 @@ void | |
ban(Client *c) | |
{ | |
XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); | |
- XMoveWindow(dpy, c->title, c->tx + 2 * sw, c->ty); | |
+ XMoveWindow(dpy, c->twin, c->tx + 2 * sw, c->ty); | |
} | |
void | |
t@@ -106,7 +102,7 @@ getctitle(Window w) | |
Client *c; | |
for(c = clients; c; c = c->next) | |
- if(c->title == w) | |
+ if(c->twin == w) | |
return c; | |
return NULL; | |
} | |
t@@ -214,7 +210,7 @@ manage(Window w, XWindowAttributes *wa) | |
twa.background_pixmap = ParentRelative; | |
twa.event_mask = ExposureMask | EnterWindowMask; | |
- c->title = XCreateWindow(dpy, root, c->tx, c->ty, c->tw, c->th, | |
+ c->twin = XCreateWindow(dpy, root, c->tx, c->ty, c->tw, c->th, | |
0, DefaultDepth(dpy, screen), CopyFromParent, | |
DefaultVisual(dpy, screen), | |
CWOverrideRedirect | CWBackPixmap | CWEventMask, &twa); | |
t@@ -242,7 +238,7 @@ manage(Window w, XWindowAttributes *wa) | |
sel = c; | |
arrange(NULL); | |
XMapWindow(dpy, c->win); | |
- XMapWindow(dpy, c->title); | |
+ XMapWindow(dpy, c->twin); | |
if(isvisible(c)) | |
focus(c); | |
} | |
t@@ -329,7 +325,7 @@ void | |
settitle(Client *c) | |
{ | |
char **list = NULL; | |
- int n; | |
+ int i, n; | |
XTextProperty name; | |
name.nitems = 0; | |
t@@ -392,7 +388,7 @@ unmanage(Client *c) | |
XSetErrorHandler(xerrordummy); | |
XUngrabButton(dpy, AnyButton, AnyModifier, c->win); | |
- XDestroyWindow(dpy, c->title); | |
+ XDestroyWindow(dpy, c->twin); | |
if(c->prev) | |
c->prev->next = c->next; | |
diff --git a/config.arg.h b/config.arg.h | |
t@@ -7,8 +7,7 @@ | |
const char *tags[] = { "work", "net", "fnord", NULL }; | |
#define DEFMODE dotile /* dofloat */ | |
-#define TFONT "-*-terminus-medium-*-*-*-12-*-*-*-*-*-is… | |
-#define FONT "-*-snap-*-*-*-*-*-*-*-*-*-*-*-*" | |
+#define FONT "-*-terminus-medium-*-*-*-12-*-*-*-*-*-iso… | |
#define BGCOLOR "#0d121d" | |
#define FGCOLOR "#eeeeee" | |
#define BORDERCOLOR "#3f484d" | |
t@@ -19,7 +18,7 @@ const char *tags[] = { "work", "net", "fnord", NULL }; | |
static Key key[] = { \ | |
/* modifier key function … | |
{ MODKEY|ShiftMask, XK_Return, spawn, \ | |
- { .cmd = "exec uxterm +sb -bg black -fg '#eeeeee' -fn '"TFONT"… | |
+ { .cmd = "exec uxterm +sb -bg black -fg '#eeeeee' -fn '"FONT"'… | |
{ MODKEY, XK_p, spawn, \ | |
{ .cmd = "exec `ls -lL /usr/bin /usr/X11R6/bin /usr/local/bin … | |
"awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort -u |… | |
diff --git a/draw.c b/draw.c | |
t@@ -22,19 +22,9 @@ textnw(const char *text, unsigned int len) | |
} | |
static void | |
-drawtext(const char *text, Bool invert) | |
+drawborder() | |
{ | |
- int x, y, w, h; | |
- static char buf[256]; | |
- unsigned int len, olen; | |
- XGCValues gcv; | |
XPoint points[5]; | |
- XRectangle r = { dc.x, dc.y, dc.w, dc.h }; | |
- | |
- XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg); | |
- XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); | |
- XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter); | |
- XSetForeground(dpy, dc.gc, dc.border); | |
points[0].x = dc.x; | |
points[0].y = dc.y; | |
points[1].x = dc.w - 1; | |
t@@ -46,6 +36,23 @@ drawtext(const char *text, Bool invert) | |
points[4].x = 0; | |
points[4].y = -(dc.h - 1); | |
XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious); | |
+} | |
+ | |
+static void | |
+drawtext(const char *text, Bool invert, Bool highlight) | |
+{ | |
+ int x, y, w, h; | |
+ static char buf[256]; | |
+ unsigned int len, olen; | |
+ DC tmp; | |
+ XGCValues gcv; | |
+ XRectangle r = { dc.x, dc.y, dc.w, dc.h }; | |
+ | |
+ XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg); | |
+ XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); | |
+ XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter); | |
+ XSetForeground(dpy, dc.gc, dc.border); | |
+ drawborder(); | |
if(!text) | |
return; | |
t@@ -75,18 +82,25 @@ drawtext(const char *text, Bool invert) | |
if(w > dc.w) | |
return; /* too long */ | |
- | |
gcv.foreground = invert ? dc.bg : dc.fg; | |
gcv.background = invert ? dc.fg : dc.bg; | |
if(dc.font.set) { | |
XChangeGC(dpy, dc.gc, GCForeground | GCBackground, &gcv); | |
- XmbDrawImageString(dpy, dc.drawable, dc.font.set, dc.gc, | |
- x, y, buf, len); | |
+ XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf,… | |
} | |
else { | |
gcv.font = dc.font.xfont->fid; | |
XChangeGC(dpy, dc.gc, GCForeground | GCBackground | GCFont, &g… | |
- XDrawImageString(dpy, dc.drawable, dc.gc, x, y, buf, len); | |
+ XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len); | |
+ } | |
+ if(highlight) { | |
+ tmp = dc; | |
+ dc.x += 2; | |
+ dc.y += 2; | |
+ dc.w -= 4; | |
+ dc.h -= 4; | |
+ drawborder(); | |
+ dc = tmp; | |
} | |
} | |
t@@ -110,36 +124,29 @@ drawstatus() | |
dc.x = dc.y = 0; | |
dc.w = bw; | |
- drawtext(NULL, !istile); | |
+ drawtext(NULL, !istile, False); | |
dc.w = 0; | |
for(i = 0; i < ntags; i++) { | |
dc.x += dc.w; | |
dc.w = textw(tags[i]); | |
if(istile) | |
- drawtext(tags[i], seltag[i]); | |
+ drawtext(tags[i], seltag[i], sel && sel->tags[i]); | |
else | |
- drawtext(tags[i], !seltag[i]); | |
+ drawtext(tags[i], !seltag[i], sel && sel->tags[i]); | |
} | |
x = dc.x + dc.w; | |
dc.w = textw(stext); | |
dc.x = bx + bw - dc.w; | |
- drawtext(stext, !istile); | |
- | |
- if(sel) { | |
- for(i = 0; i < ntags; i++) | |
- if(sel->tags[i]) { | |
- dc.w = textw(tags[i]); | |
- dc.x -= dc.w; | |
- if(dc.x < x) | |
- break; | |
- drawtext(tags[i], istile); | |
- } | |
- if(dc.x > x && (dc.x - x) > bh) { | |
- dc.w = dc.x - x; | |
- dc.x = x; | |
- drawtext(sel->name, istile); | |
- } | |
+ if(dc.x < x) { | |
+ dc.x = x; | |
+ dc.w = bw - x; | |
+ } | |
+ drawtext(stext, !istile, False); | |
+ | |
+ if(sel && ((dc.w = dc.x - x) > bh)) { | |
+ dc.x = x; | |
+ drawtext(sel->name, istile, False); | |
} | |
XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bw, bh, 0, 0); | |
XSync(dpy, False); | |
t@@ -153,26 +160,17 @@ drawtitle(Client *c) | |
if(c == sel && issel) { | |
drawstatus(); | |
- XUnmapWindow(dpy, c->title); | |
+ XUnmapWindow(dpy, c->twin); | |
XSetWindowBorder(dpy, c->win, dc.fg); | |
return; | |
} | |
XSetWindowBorder(dpy, c->win, dc.bg); | |
- XMapWindow(dpy, c->title); | |
- | |
- dc.y = dc.w = 0; | |
- dc.x = c->tw; | |
- for(i = 0; i < ntags; i++) | |
- if(c->tags[i]) { | |
- dc.w = textw(tags[i]); | |
- dc.x -= dc.w; | |
- drawtext(tags[i], !istile); | |
- } | |
- dc.w = dc.x; | |
- dc.x = 0; | |
- drawtext(c->name, !istile); | |
- XCopyArea(dpy, dc.drawable, c->title, dc.gc, 0, 0, c->tw, c->th, 0, 0); | |
+ XMapWindow(dpy, c->twin); | |
+ dc.x = dc.y = 0; | |
+ dc.w = c->tw; | |
+ drawtext(c->name, !istile, False); | |
+ XCopyArea(dpy, dc.drawable, c->twin, dc.gc, 0, 0, c->tw, c->th, 0, 0); | |
XSync(dpy, False); | |
} | |
diff --git a/dwm.1 b/dwm.1 | |
t@@ -21,12 +21,12 @@ tags. Selecting a certain tag for viewing will display all… | |
tag. | |
.P | |
.B dwm | |
-contains a small status bar which displays all available tags, the title and t… | |
-tags of the focused window, and the text read from standard input. | |
+contains a small status bar which displays all available tags, the title | |
+of the focused window, and the text read from standard input. The tags of the | |
+focused window are highlighted. | |
.P | |
.B dwm draws a 1-pixel border around windows to indicate the focus state. | |
-Unfocused windows contain a small bar in front of them displaying their title | |
-and tags. | |
+Unfocused windows contain a small bar in front of them displaying their title. | |
.SH OPTIONS | |
.TP | |
.B \-v | |
diff --git a/dwm.h b/dwm.h | |
t@@ -60,7 +60,7 @@ struct Client { | |
Client *next; | |
Client *prev; | |
Window win; | |
- Window title; | |
+ Window twin; | |
}; | |
extern const char *tags[]; | |
diff --git a/tag.c b/tag.c | |
t@@ -141,4 +141,6 @@ toggletag(Arg *arg) | |
settitle(sel); | |
if(!isvisible(sel)) | |
arrange(NULL); | |
+ else | |
+ drawstatus(); | |
} | |
diff --git a/view.c b/view.c | |
t@@ -168,21 +168,21 @@ restack() | |
fi = 0; | |
mi = 2 * f; | |
if(sel->isfloat || arrange == dofloat) { | |
- wins[fi++] = sel->title; | |
+ wins[fi++] = sel->twin; | |
wins[fi++] = sel->win; | |
} | |
else { | |
- wins[mi++] = sel->title; | |
+ wins[mi++] = sel->twin; | |
wins[mi++] = sel->win; | |
} | |
for(c = clients; c; c = c->next) | |
if(isvisible(c) && c != sel) { | |
if(c->isfloat || arrange == dofloat) { | |
- wins[fi++] = c->title; | |
+ wins[fi++] = c->twin; | |
wins[fi++] = c->win; | |
} | |
else { | |
- wins[mi++] = c->title; | |
+ wins[mi++] = c->twin; | |
wins[mi++] = c->win; | |
} | |
} |