mirror of git://git.suckless.org/dwm
updated man page
This commit is contained in:
parent
c39df91ab9
commit
7e597ae204
22
client.c
22
client.c
|
@ -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, c->th);
|
||||
XMoveResizeWindow(dpy, c->twin, c->tx + 2 * sw, c->ty, c->tw, c->th);
|
||||
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -329,7 +325,7 @@ void
|
|||
settitle(Client *c)
|
||||
{
|
||||
char **list = NULL;
|
||||
int n;
|
||||
int i, n;
|
||||
XTextProperty name;
|
||||
|
||||
name.nitems = 0;
|
||||
|
@ -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;
|
||||
|
|
|
@ -7,8 +7,7 @@
|
|||
const char *tags[] = { "work", "net", "fnord", NULL };
|
||||
|
||||
#define DEFMODE dotile /* dofloat */
|
||||
#define TFONT "-*-terminus-medium-*-*-*-12-*-*-*-*-*-iso10646-*"
|
||||
#define FONT "-*-snap-*-*-*-*-*-*-*-*-*-*-*-*"
|
||||
#define FONT "-*-terminus-medium-*-*-*-12-*-*-*-*-*-iso10646-*"
|
||||
#define BGCOLOR "#0d121d"
|
||||
#define FGCOLOR "#eeeeee"
|
||||
#define BORDERCOLOR "#3f484d"
|
||||
|
@ -19,7 +18,7 @@ const char *tags[] = { "work", "net", "fnord", NULL };
|
|||
static Key key[] = { \
|
||||
/* modifier key function arguments */ \
|
||||
{ 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 2>/dev/null | " \
|
||||
"awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort -u | dmenu`" } }, \
|
||||
|
|
94
draw.c
94
draw.c
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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, len);
|
||||
}
|
||||
else {
|
||||
gcv.font = dc.font.xfont->fid;
|
||||
XChangeGC(dpy, dc.gc, GCForeground | GCBackground | GCFont, &gcv);
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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(dc.x < x) {
|
||||
dc.x = x;
|
||||
dc.w = bw - x;
|
||||
}
|
||||
drawtext(stext, !istile, False);
|
||||
|
||||
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(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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
8
dwm.1
8
dwm.1
|
@ -21,12 +21,12 @@ tags. Selecting a certain tag for viewing will display all windows with that
|
|||
tag.
|
||||
.P
|
||||
.B dwm
|
||||
contains a small status bar which displays all available tags, the title and the
|
||||
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
|
||||
|
|
2
dwm.h
2
dwm.h
|
@ -60,7 +60,7 @@ struct Client {
|
|||
Client *next;
|
||||
Client *prev;
|
||||
Window win;
|
||||
Window title;
|
||||
Window twin;
|
||||
};
|
||||
|
||||
extern const char *tags[];
|
||||
|
|
2
tag.c
2
tag.c
|
@ -141,4 +141,6 @@ toggletag(Arg *arg)
|
|||
settitle(sel);
|
||||
if(!isvisible(sel))
|
||||
arrange(NULL);
|
||||
else
|
||||
drawstatus();
|
||||
}
|
||||
|
|
8
view.c
8
view.c
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue