updated man page
This commit is contained in:
		
							
								
								
									
										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; | ||||
| 			} | ||||
| 		} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user