Compare commits

...

37 Commits
0.7 ... 0.8

Author SHA1 Message Date
0680c76a6f prepared 0.8 2006-08-10 15:19:25 +02:00
c3e5f5cc9a updated html 2006-08-10 13:30:39 +02:00
1c620d27d8 fixed the issue reported by sander (gaps at left columns button due to round-offs) 2006-08-10 12:33:44 +02:00
fde45ebed8 applied sumik's multihead patch 2006-08-10 11:26:32 +02:00
4bd0d33f57 applied sander's patch 2006-08-10 11:19:25 +02:00
00255728aa readded border color, this sucks least 2006-08-10 11:12:15 +02:00
4b0328f209 drawing border with fg color 2006-08-10 11:07:27 +02:00
30561a0161 removed unnecessary border color 2006-08-10 10:27:08 +02:00
a4c4998c8b swapping my default colors (bg with fg) 2006-08-10 10:22:15 +02:00
8e053b6476 made terminals darker, that is better indeed 2006-08-10 10:20:26 +02:00
b79b5facb1 disallow zoom on maximized clients 2006-08-10 10:16:12 +02:00
c53f0fca91 added zoom on Mod1-Button1 on managed clients only (there is no moving possible) 2006-08-09 18:37:33 +02:00
c225e1afc2 removed NET_ACTIVE_WINDOW handling 2006-08-08 18:12:18 +02:00
92e55c7c53 implemented NET_ACTIVE_WINDOW support 2006-08-08 17:08:45 +02:00
c86f131681 fixed typo 2006-08-08 12:58:05 +02:00
e943234d09 it always takes a while until one sticks to a colorscheme, but this one feels well 2006-08-08 12:50:11 +02:00
9fc24e371b default colors are best 2006-08-08 12:47:45 +02:00
cac467d52c without borders it looks cleaner 2006-08-08 11:47:29 +02:00
04f17d2669 red is easier to my eyes with ffffaa bg 2006-08-08 11:18:05 +02:00
dff15a02f7 using a better colorscheme (ffffaa is the best background for black) 2006-08-08 11:06:56 +02:00
42277b1110 applied Sanders tiny patches 2006-08-08 09:30:45 +02:00
095f9e143e removed some " 2006-08-07 17:38:14 +02:00
9fbb2ebb90 I really only need 3 tags 2006-08-07 14:12:28 +02:00
dbcf87ce76 added a trailing '.' to shortcut descriptions in dwm(1) 2006-08-07 14:10:22 +02:00
4250c26e9b changed signature of drawtext 2006-08-07 13:54:59 +02:00
e48de30516 applied grabbing-- and shell_minimal 2006-08-07 13:40:31 +02:00
1f0060caa3 updated screenshot section 2006-08-07 12:26:28 +02:00
c732cc90ab changed font size, I'm not blind... 2006-08-07 12:21:17 +02:00
4e2c5b5f25 small fix of a comment 2006-08-07 12:12:56 +02:00
d9386a0c07 typo fix 2006-08-07 11:58:46 +02:00
66e16c92d3 applied Sanders man page/Makefile patch 2006-08-07 11:57:05 +02:00
6a8e176df1 settle with grey 2006-08-07 11:10:19 +02:00
632c7f3410 next version is 0.8 2006-08-07 10:32:36 +02:00
045f1840e0 made my colors tasting better with the background 2006-08-07 10:28:21 +02:00
45d16d090b status box should have a border in my eyes 2006-08-07 09:47:13 +02:00
525c5ff4d8 next attempt for w on black switch 2006-08-07 09:41:43 +02:00
5952157c3b Added tag 0.7 for changeset 3fb41412e2492f66476d92ce8f007a8b48fb1d2a 2006-08-07 08:55:39 +02:00
13 changed files with 88 additions and 97 deletions

View File

@ -4,3 +4,4 @@ d31b5ad96b0ba7b5b0a30928fcf000428339a577 0.1
eb3165734f00fe7f7da8aeebaed00e60a57caac9 0.4
22213b9a2114167ee8ba019a012e27da0422a61a 0.5
c11f86db4550cac5d0a648a3fe4d6d3b9a4fcf7e 0.6
3fb41412e2492f66476d92ce8f007a8b48fb1d2a 0.7

View File

@ -19,7 +19,7 @@ options:
@echo CC $<
@${CC} -c ${CFLAGS} $<
${OBJ}: dwm.h config.h
${OBJ}: dwm.h config.h config.mk
config.h:
@echo creating $@ from config.default.h
@ -50,7 +50,7 @@ install: all
@chmod 755 ${DESTDIR}${PREFIX}/bin/dwm
@echo installing manual page to ${DESTDIR}${MANPREFIX}/man1
@mkdir -p ${DESTDIR}${MANPREFIX}/man1
@cp -f dwm.1 ${DESTDIR}${MANPREFIX}/man1
@sed 's/VERSION/${VERSION}/g' < dwm.1 > ${DESTDIR}${MANPREFIX}/man1/dwm.1
@chmod 644 ${DESTDIR}${MANPREFIX}/man1/dwm.1
uninstall:

View File

@ -49,6 +49,8 @@ ban(Client *c)
void
focus(Client *c)
{
if (!issel)
return;
Client *old = sel;
XEvent ev;
@ -196,13 +198,6 @@ killclient(Arg *arg)
XKillClient(dpy, sel->win);
}
void
lower(Client *c)
{
XLowerWindow(dpy, c->title);
XLowerWindow(dpy, c->win);
}
void
manage(Window w, XWindowAttributes *wa)
{

View File

@ -4,14 +4,14 @@
*/
#define TAGS \
const char *tags[] = { "fnord", "dev", "net", "work", "misc", NULL };
const char *tags[] = { "work", "net", "fnord", NULL };
#define DEFMODE dotile /* dofloat */
#define DEFTAG 1 /* index */
#define FONT "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*"
#define BGCOLOR "#0a2c2d"
#define FGCOLOR "#ddeeee"
#define BORDERCOLOR "#176164"
#define DEFTAG 0 /* index */
#define FONT "-*-terminus-medium-*-*-*-12-*-*-*-*-*-iso10646-*"
#define BGCOLOR "#eeeeee"
#define FGCOLOR "#666699"
#define BORDERCOLOR "#9999CC"
#define MODKEY Mod1Mask
#define NUMLOCKMASK Mod2Mask
#define MASTERW 60 /* percent */
@ -19,36 +19,30 @@ const char *tags[] = { "fnord", "dev", "net", "work", "misc", NULL };
#define KEYS \
static Key key[] = { \
/* modifier key function arguments */ \
{ MODKEY, XK_0, view, { .i = 0 } }, \
{ MODKEY, XK_1, view, { .i = 1 } }, \
{ MODKEY, XK_2, view, { .i = 2 } }, \
{ MODKEY, XK_3, view, { .i = 3 } }, \
{ MODKEY, XK_4, view, { .i = 4 } }, \
{ MODKEY, XK_1, view, { .i = 0 } }, \
{ MODKEY, XK_2, view, { .i = 1 } }, \
{ MODKEY, XK_3, view, { .i = 2 } }, \
{ MODKEY, XK_h, viewprev, { 0 } }, \
{ MODKEY, XK_j, focusnext, { 0 } }, \
{ MODKEY, XK_k, focusprev, { 0 } }, \
{ MODKEY, XK_l, viewnext, { 0 } }, \
{ MODKEY, XK_m, togglemax, { 0 } }, \
{ MODKEY, XK_p, spawn, \
{ .cmd = "exec `ls -lL /usr/bin /usr/local/bin 2>/dev/null |" \
" awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort | uniq | dmenu`" } }, \
{ .cmd = "exec `ls -lL /usr/bin /usr/local/bin 2>/dev/null | " \
"awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort | uniq | dmenu`" } }, \
{ MODKEY, XK_space, togglemode, { 0 } }, \
{ MODKEY, XK_Return, zoom, { 0 } }, \
{ MODKEY|ControlMask, XK_0, appendtag, { .i = 0 } }, \
{ MODKEY|ControlMask, XK_1, appendtag, { .i = 1 } }, \
{ MODKEY|ControlMask, XK_2, appendtag, { .i = 2 } }, \
{ MODKEY|ControlMask, XK_3, appendtag, { .i = 3 } }, \
{ MODKEY|ControlMask, XK_4, appendtag, { .i = 4 } }, \
{ MODKEY|ShiftMask, XK_0, replacetag, { .i = 0 } }, \
{ MODKEY|ShiftMask, XK_1, replacetag, { .i = 1 } }, \
{ MODKEY|ShiftMask, XK_2, replacetag, { .i = 2 } }, \
{ MODKEY|ShiftMask, XK_3, replacetag, { .i = 3 } }, \
{ MODKEY|ShiftMask, XK_4, replacetag, { .i = 5 } }, \
{ MODKEY|ControlMask, XK_1, appendtag, { .i = 0 } }, \
{ MODKEY|ControlMask, XK_2, appendtag, { .i = 1 } }, \
{ MODKEY|ControlMask, XK_3, appendtag, { .i = 2 } }, \
{ MODKEY|ShiftMask, XK_1, replacetag, { .i = 0 } }, \
{ MODKEY|ShiftMask, XK_2, replacetag, { .i = 1 } }, \
{ MODKEY|ShiftMask, XK_3, replacetag, { .i = 2 } }, \
{ MODKEY|ShiftMask, XK_c, killclient, { 0 } }, \
{ MODKEY|ShiftMask, XK_q, quit, { 0 } }, \
{ MODKEY|ShiftMask, XK_Return, spawn, \
{ .cmd = "exec urxvt -tr +sb -bg black -fg white -cr white " \
"-fn '-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*'" } }, \
{ .cmd = "exec uxterm -bg '#dddddd' -fg '#000000' -cr '#000000' +sb " \
"-fn '-*-terminus-medium-*-*-*-12-*-*-*-*-*-iso10646-*'" } }, \
};
#define RULES \

View File

@ -1,5 +1,5 @@
# dwm version
VERSION = 0.7
VERSION = 0.8
# Customize below to fit your system

24
draw.c
View File

@ -42,7 +42,7 @@ textnw(const char *text, unsigned int len)
}
static void
drawtext(const char *text, Bool invert, Bool border)
drawtext(const char *text, Bool invert)
{
int x, y, w, h;
static char buf[256];
@ -52,14 +52,12 @@ drawtext(const char *text, Bool invert, Bool border)
XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg);
XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
w = 0;
if(border)
drawborder();
drawborder();
if(!text)
return;
w = 0;
len = strlen(text);
if(len >= sizeof(buf))
len = sizeof(buf) - 1;
@ -111,24 +109,24 @@ drawstatus()
dc.x = dc.y = 0;
dc.w = bw;
drawtext(NULL, !istile, False);
drawtext(NULL, !istile);
dc.w = 0;
for(i = 0; i < ntags; i++) {
dc.x += dc.w;
dc.w = textw(tags[i]);
if(istile)
drawtext(tags[i], (i == tsel), True);
drawtext(tags[i], (i == tsel));
else
drawtext(tags[i], (i != tsel), True);
drawtext(tags[i], (i != tsel));
}
x = dc.x + dc.w;
dc.w = textw(stext);
dc.x = bx + bw - dc.w;
drawtext(stext, !istile, False);
drawtext(stext, !istile);
if(sel && ((dc.w = dc.x - x) >= bh)) {
dc.x = x;
drawtext(sel->name, istile, True);
drawtext(sel->name, istile);
}
XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bw, bh, 0, 0);
XSync(dpy, False);
@ -140,7 +138,7 @@ drawtitle(Client *c)
int i;
Bool istile = arrange == dotile;
if(c == sel) {
if(c == sel && issel) {
drawstatus();
XUnmapWindow(dpy, c->title);
XSetWindowBorder(dpy, c->win, dc.fg);
@ -157,12 +155,12 @@ drawtitle(Client *c)
if(c->tags[i]) {
dc.x += dc.w;
dc.w = textw(tags[i]);
drawtext(tags[i], !istile, True);
drawtext(tags[i], !istile);
}
}
dc.x += dc.w;
dc.w = textw(c->name);
drawtext(c->name, !istile, True);
drawtext(c->name, !istile);
XCopyArea(dpy, dc.drawable, c->title, dc.gc, 0, 0, c->tw, c->th, 0, 0);
XSync(dpy, False);
}

41
dwm.1
View File

@ -1,4 +1,4 @@
.TH DWM 1 dwm-0.7
.TH DWM 1 dwm-VERSION
.SH NAME
dwm \- dynamic window manager
.SH SYNOPSIS
@ -33,35 +33,35 @@ prints version information to standard output, then exits.
.SH USAGE
.TP
.B Mod1-Return
Zoom
Zoom current
.B window
to the
.B master
column
column.
.TP
.B Mod1-h
Focus previous
.B tag
.B tag.
.TP
.B Mod1-j
Focus next
.B window
.B window.
.TP
.B Mod1-k
Focus previous
.B window
.B window.
.TP
.B Mod1-l
Focus next
.B tag
.B tag.
.TP
.B Mod1-m
Maximize current
.B window
.B window.
.TP
.B Mod1-[0..n]
Focus
.B nth tag
.B nth tag.
.TP
.B Mod1-space
Toggle between
@ -69,41 +69,44 @@ Toggle between
and
.B floating
mode (affects
.BR "all windows" )
.BR "all windows" ).
.TP
.B Mod1-Shift-[0..n]
Apply
.B nth tag
to current
.B window
.B window.
.TP
.B Mod1-Shift-q
Quit
.B dwm
.B dwm.
.TP
.B Mod1-Shift-Return
Start
.B terminal
.B terminal.
.TP
.B Mod1-Control-[0..n]
Append
.B nth tag
to current
.B window
.B window.
.TP
.B Mod1-Button1
Moves current
Move current
.B window
while dragging
while dragging.
.TP
.B Mod1-Button2
Lowers current
Zoom current
.B window
to the
.B master
column.
.TP
.B Mod1-Button3
Resizes current
Resize current
.B window
while dragging
while dragging.
.SH CUSTOMIZATION
.B dwm
is customized by creating a custom config.h and (re)compiling the source

1
dwm.h
View File

@ -91,7 +91,6 @@ extern Client *getctitle(Window w);
extern void gravitate(Client *c, Bool invert);
extern void higher(Client *c);
extern void killclient(Arg *arg);
extern void lower(Client *c);
extern void manage(Window w, XWindowAttributes *wa);
extern void resize(Client *c, Bool sizehints, Corner sticky);
extern void setsize(Client *c);

View File

@ -21,7 +21,7 @@
<p>
dwm is a dynamic window manager for X11.
</p>
<h4>Philosophy</h4>
<h4>Background</h4>
<p>
As founder and main developer of wmii I came to the conclusion that
wmii is too clunky for my needs. I don't need so many funky features
@ -95,15 +95,16 @@
<h4>Links</h4>
<ul>
<li><a href="http://10kloc.org/cgi-bin/man/man2html?query=dwm">Man page</a></li>
<li><a href="http://10kloc.org/shots/dwm-20060801.png">Screenshot</a> (20060801)</li>
<li><a href="http://10kloc.org/shots/dwm-20060810a.png">Screenshot of tiled mode</a> (20060810)</li>
<li><a href="http://10kloc.org/shots/dwm-20060810b.png">Screenshotof floating mode</a> (20060810)</li>
<li><a href="http://10kloc.org/download/poster.ps">A4 poster (PostScript)</a></li>
<li>Mailing List: <a href="http://10kloc.org/cgi-bin/mailman/listinfo/dwm">dwm at wmii dot de</a> <a href="http://10kloc.org/pipermail/dwm/">(Archives)</a></li>
<li>IRC channel: <code>#dwm</code> at <code>irc.oftc.net</code></li>
</ul>
<h3>Download</h3>
<ul>
<li><a href="http://10kloc.org/download/dwm-0.7.tar.gz">dwm 0.7</a> (14kb) (20060807)</li>
<li><a href="http://10kloc.org/download/dmenu-0.2.tar.gz">dmenu 0.2</a> (7kb) (20060807)</li>
<li><a href="http://10kloc.org/download/dwm-0.8.tar.gz">dwm 0.8</a> (14kb) (20060810)</li>
<li><a href="http://10kloc.org/download/dmenu-0.3.tar.gz">dmenu 0.3</a> (7kb) (20060810)</li>
</ul>
<h3>Development</h3>
<p>

37
event.c
View File

@ -114,32 +114,30 @@ buttonpress(XEvent *e)
}
break;
case Button4:
viewnext(&a);
viewprev(&a);
break;
case Button5:
viewprev(&a);
viewnext(&a);
break;
}
}
else if((c = getclient(ev->window))) {
higher(c);
focus(c);
switch(ev->button) {
default:
break;
case Button1:
if(!c->ismax && (arrange == dofloat || c->isfloat)) {
higher(c);
if(!c->ismax && (arrange == dofloat || c->isfloat))
movemouse(c);
}
break;
case Button2:
lower(c);
if(!c->ismax && arrange != dofloat && !c->isfloat)
zoom(NULL);
break;
case Button3:
if(!c->ismax && (arrange == dofloat || c->isfloat)) {
higher(c);
if(!c->ismax && (arrange == dofloat || c->isfloat))
resizemouse(c);
}
break;
}
}
@ -223,13 +221,16 @@ enternotify(XEvent *e)
Client *c;
XCrossingEvent *ev = &e->xcrossing;
if(ev->detail == NotifyInferior)
if(ev->mode != NotifyNormal || ev->detail == NotifyInferior)
return;
if((c = getclient(ev->window)) || (c = getctitle(ev->window)))
focus(c);
else if(ev->window == root)
else if(ev->window == root) {
issel = True;
XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
drawall();
}
}
static void
@ -269,8 +270,10 @@ leavenotify(XEvent *e)
{
XCrossingEvent *ev = &e->xcrossing;
if((ev->window == root) && !ev->same_screen)
issel = True;
if((ev->window == root) && !ev->same_screen) {
issel = False;
drawall();
}
}
static void
@ -359,20 +362,12 @@ grabkeys()
for(i = 0; i < len; i++) {
code = XKeysymToKeycode(dpy, key[i].keysym);
/* normal */
XUngrabKey(dpy, code, key[i].mod, root);
XGrabKey(dpy, code, key[i].mod, root, True,
GrabModeAsync, GrabModeAsync);
/* capslock */
XUngrabKey(dpy, code, key[i].mod | LockMask, root);
XGrabKey(dpy, code, key[i].mod | LockMask, root, True,
GrabModeAsync, GrabModeAsync);
/* numlock */
XUngrabKey(dpy, code, key[i].mod | NUMLOCKMASK, root);
XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK, root, True,
GrabModeAsync, GrabModeAsync);
/* capslock & numlock */
XUngrabKey(dpy, code, key[i].mod | NUMLOCKMASK | LockMask, root);
XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK | LockMask, root, True,
GrabModeAsync, GrabModeAsync);
}

6
main.c
View File

@ -240,6 +240,8 @@ main(int argc, char *argv[])
dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
dc.gc = XCreateGC(dpy, root, 0, 0);
strcpy(stext, "dwm-"VERSION);
drawstatus();
issel = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask);
@ -248,10 +250,10 @@ main(int argc, char *argv[])
wa.cursor = cursor[CurNormal];
XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa);
strcpy(stext, "dwm-"VERSION);
scan();
/* main event loop, reads status text from stdin as well */
/* main event loop, also reads status text from stdin */
XSync(dpy, False);
while(running) {
FD_ZERO(&rd);
if(readin)

5
tag.c
View File

@ -106,7 +106,10 @@ dotile(Arg *arg)
c->x = sx + mw;
c->y = sy + (i - 1) * h + bh;
c->w = w - 2;
c->h = h - 2;
if(i + 1 == n)
c->h = sh - c->y - 2;
else
c->h = h - 2;
}
else { /* fallback if h < bh */
c->x = sx + mw;

2
util.c
View File

@ -56,7 +56,7 @@ spawn(Arg *arg)
close(ConnectionNumber(dpy));
setsid();
execl(shell, shell, "-c", arg->cmd, NULL);
fprintf(stderr, "dwm: execl '%s'", arg->cmd);
fprintf(stderr, "dwm: execl '%s -c %s'", shell, arg->cmd);
perror(" failed");
}
exit(0);