From 57e6e3bb80b5fc4709de3f8b716a8b8065897c7a Mon Sep 17 00:00:00 2001 From: "Anselm R.Garbe" Date: Mon, 14 Aug 2006 17:14:22 +0200 Subject: [PATCH 01/16] added missing arrange --- tag.c | 1 + 1 file changed, 1 insertion(+) diff --git a/tag.c b/tag.c index 51407e3..f6f4535 100644 --- a/tag.c +++ b/tag.c @@ -269,6 +269,7 @@ tag(Arg *arg) sel->tags[i] = False; sel->tags[arg->i] = True; settitle(sel); + arrange(NULL); } void -- 2.20.1 From 4ad20ffc2c23d29329bc7349985d889f2cb45612 Mon Sep 17 00:00:00 2001 From: "Anselm R.Garbe" Date: Mon, 14 Aug 2006 17:48:54 +0200 Subject: [PATCH 02/16] fixed --- client.c | 12 ++++-------- event.c | 2 +- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/client.c b/client.c index 6a231b9..14edf7c 100644 --- a/client.c +++ b/client.c @@ -49,10 +49,12 @@ ban(Client *c) void focus(Client *c) { - if (!issel) - return; Client *old = sel; + if (!issel) + return; + if(sel && sel->ismax) + togglemax(NULL); sel = c; if(old && old != c) drawtitle(old); @@ -68,9 +70,6 @@ focusnext(Arg *arg) if(!sel) return; - if(sel->ismax) - togglemax(NULL); - if(!(c = getnext(sel->next))) c = getnext(clients); if(c) { @@ -87,9 +86,6 @@ focusprev(Arg *arg) if(!sel) return; - if(sel->ismax) - togglemax(NULL); - if(!(c = getprev(sel->prev))) { for(c = clients; c && c->next; c = c->next); c = getprev(c); diff --git a/event.c b/event.c index 125c6a2..5c21fcb 100644 --- a/event.c +++ b/event.c @@ -144,11 +144,11 @@ buttonpress(XEvent *e) static void configurerequest(XEvent *e) { + unsigned long newmask; Client *c; XConfigureRequestEvent *ev = &e->xconfigurerequest; XEvent synev; XWindowChanges wc; - unsigned long newmask; if((c = getclient(ev->window))) { gravitate(c, True); -- 2.20.1 From 78b050c13c8ea660ed801c21bddd2957a2bc3f40 Mon Sep 17 00:00:00 2001 From: "Anselm R.Garbe" Date: Mon, 14 Aug 2006 17:50:48 +0200 Subject: [PATCH 03/16] applied sanders tag()/toggletag() fixes --- tag.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tag.c b/tag.c index f6f4535..a718ebd 100644 --- a/tag.c +++ b/tag.c @@ -269,7 +269,8 @@ tag(Arg *arg) sel->tags[i] = False; sel->tags[arg->i] = True; settitle(sel); - arrange(NULL); + if(!isvisible(sel)) + arrange(NULL); } void @@ -292,6 +293,8 @@ toggletag(Arg *arg) if(i == ntags) sel->tags[arg->i] = True; settitle(sel); + if(!isvisible(sel)) + arrange(NULL); } -- 2.20.1 From 3e06edeb5df0aa95614cb0b11ba1931f01b6f337 Mon Sep 17 00:00:00 2001 From: "Anselm R.Garbe" Date: Mon, 14 Aug 2006 18:14:08 +0200 Subject: [PATCH 04/16] applied sanders man page patch, removed button2 from bar click --- dwm.1 | 40 +++++++++++++++++++++------------------- event.c | 6 +++--- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/dwm.1 b/dwm.1 index 9f0705b..c653b99 100644 --- a/dwm.1 +++ b/dwm.1 @@ -36,13 +36,14 @@ prints version information to standard output, then exits. .B Standard input is read and displayed in the status text area. .TP -.B Button[1,2] -click on a tag label focuses that -.B tag. +.B Button1 +click on a tag label views all windows with that +.BR tag . .TP .B Button3 -click on a tag label toggles that -.B tag. +click on a tag label adds/removes all windows with that +.B tag +to/from the view. .SS Keyboard commands .TP .B Mod1-Return @@ -54,19 +55,19 @@ column. .TP .B Mod1-j Focus next -.B window. +.BR window . .TP .B Mod1-k Focus previous -.B window. +.BR window . .TP .B Mod1-m Maximize current -.B window. +.BR window . .TP .B Mod1-[0..n] -Focus -.B nth tag. +View all windows with +.BR "tag n" . .TP .B Mod1-space Toggle between @@ -80,7 +81,7 @@ mode (affects Apply .B nth tag to current -.B window. +.BR window . .TP .B Mod1-Shift-c Close focused @@ -92,17 +93,18 @@ Quit .TP .B Mod1-Shift-Return Start -.B terminal. +.BR terminal . .TP .B Mod1-Control-[0..n] -Toggle -.B nth tag. +Add/remove all windows with +.B tag n +to/from the view. .TP .B Mod1-Control-Shift-[0..n] -Append +Add/remove .B nth tag -to current -.B window. +to/from current +.BR window . .SS Mouse commands .TP .B Mod1-Button1 @@ -127,12 +129,12 @@ is customized by creating a custom config.h and (re)compiling the source code. This keeps it fast, secure and simple. .SH CAVEATS The status bar displays -.BR "broken pipe" +.B broken pipe when .B dwm has been started by .BR xdm (1), because it closes standard output before executing -.B dwm. +.BR dwm . .SH SEE ALSO .BR dmenu (1) diff --git a/event.c b/event.c index 5c21fcb..187c65e 100644 --- a/event.c +++ b/event.c @@ -109,10 +109,10 @@ buttonpress(XEvent *e) for(a.i = 0; a.i < ntags; a.i++) { x += textw(tags[a.i]); if(ev->x < x) { - if(ev->button == Button3) - toggleview(&a); - else + if(ev->button == Button1) view(&a); + else if(ev->button == Button3) + toggleview(&a); return; } } -- 2.20.1 From dfa5ea63600d8c68bbe05fbc80191bd3198510b2 Mon Sep 17 00:00:00 2001 From: "Anselm R.Garbe" Date: Mon, 14 Aug 2006 18:46:07 +0200 Subject: [PATCH 05/16] applied viewsel.patch --- tag.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tag.c b/tag.c index a718ebd..4b6d513 100644 --- a/tag.c +++ b/tag.c @@ -47,7 +47,9 @@ dofloat(Arg *arg) else ban(c); } - if((sel = getnext(clients))) { + if(!sel || !isvisible(sel)) + sel = getnext(clients); + if(sel) { focus(sel); restack(); } @@ -111,7 +113,9 @@ dotile(Arg *arg) else ban(c); } - if((sel = getnext(clients))) + if(!sel || !isvisible(sel)) + sel = getnext(clients); + if(sel) focus(sel); else XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); -- 2.20.1 From 442334641e4124d8c32387287d431a83761ff916 Mon Sep 17 00:00:00 2001 From: "Anselm R.Garbe" Date: Mon, 14 Aug 2006 18:47:13 +0200 Subject: [PATCH 06/16] added Sander to LICENSE (since he has contributed/revised big portions) --- LICENSE | 1 + 1 file changed, 1 insertion(+) diff --git a/LICENSE b/LICENSE index aa0a3ab..67e22c3 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,7 @@ MIT/X Consortium License (C)opyright MMVI Anselm R. Garbe +(C)opyright MMVI Sander van Dijk Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), -- 2.20.1 From ee31e38dc75832a66cb0fc01bcf2f419ac96a20b Mon Sep 17 00:00:00 2001 From: "Anselm R.Garbe" Date: Mon, 14 Aug 2006 19:18:02 +0200 Subject: [PATCH 07/16] removed NUMLOCKMASK, added dynamically calculated numlockmask instead --- client.c | 12 ++++++------ config.arg.h | 1 - config.default.h | 1 - dwm.h | 2 +- event.c | 6 +++--- main.c | 26 +++++++++++++++++++------- 6 files changed, 29 insertions(+), 19 deletions(-) diff --git a/client.c b/client.c index 14edf7c..24d38c3 100644 --- a/client.c +++ b/client.c @@ -228,27 +228,27 @@ manage(Window w, XWindowAttributes *wa) GrabModeAsync, GrabModeSync, None, None); XGrabButton(dpy, Button1, MODKEY | LockMask, c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button1, MODKEY | NUMLOCKMASK, c->win, False, BUTTONMASK, + XGrabButton(dpy, Button1, MODKEY | numlockmask, c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button1, MODKEY | NUMLOCKMASK | LockMask, c->win, False, BUTTONMASK, + XGrabButton(dpy, Button1, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); XGrabButton(dpy, Button2, MODKEY, c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); XGrabButton(dpy, Button2, MODKEY | LockMask, c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button2, MODKEY | NUMLOCKMASK, c->win, False, BUTTONMASK, + XGrabButton(dpy, Button2, MODKEY | numlockmask, c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button2, MODKEY | NUMLOCKMASK | LockMask, c->win, False, BUTTONMASK, + XGrabButton(dpy, Button2, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); XGrabButton(dpy, Button3, MODKEY, c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); XGrabButton(dpy, Button3, MODKEY | LockMask, c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button3, MODKEY | NUMLOCKMASK, c->win, False, BUTTONMASK, + XGrabButton(dpy, Button3, MODKEY | numlockmask, c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button3, MODKEY | NUMLOCKMASK | LockMask, c->win, False, BUTTONMASK, + XGrabButton(dpy, Button3, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); settags(c); diff --git a/config.arg.h b/config.arg.h index a2257cf..2e49f81 100644 --- a/config.arg.h +++ b/config.arg.h @@ -13,7 +13,6 @@ const char *tags[] = { "work", "net", "fnord", NULL }; #define FGCOLOR "#eeeeee" #define BORDERCOLOR "#3f484d" #define MODKEY Mod1Mask -#define NUMLOCKMASK Mod2Mask #define MASTERW 60 /* percent */ #define KEYS \ diff --git a/config.default.h b/config.default.h index a8a2c0e..44f0daf 100644 --- a/config.default.h +++ b/config.default.h @@ -13,7 +13,6 @@ const char *tags[] = { "0", "1", "2", "3", "4", NULL }; #define FGCOLOR "#eeeeee" #define BORDERCOLOR "#9999CC" #define MODKEY Mod1Mask -#define NUMLOCKMASK Mod2Mask #define MASTERW 60 /* percent */ #define KEYS \ diff --git a/dwm.h b/dwm.h index 10eaf30..bb941dc 100644 --- a/dwm.h +++ b/dwm.h @@ -70,7 +70,7 @@ struct Client { extern const char *tags[]; extern char stext[1024]; extern int screen, sx, sy, sw, sh, bx, by, bw, bh, mw; -extern unsigned int ntags; +extern unsigned int ntags, numlockmask; extern void (*handler[LASTEvent])(XEvent *); extern void (*arrange)(Arg *); extern Atom wmatom[WMLast], netatom[NetLast]; diff --git a/event.c b/event.c index 187c65e..c8a87c1 100644 --- a/event.c +++ b/event.c @@ -18,7 +18,7 @@ typedef struct { KEYS -#define CLEANMASK(mask) (mask & ~(NUMLOCKMASK | LockMask)) +#define CLEANMASK(mask) (mask & ~(numlockmask | LockMask)) static void movemouse(Client *c) @@ -378,9 +378,9 @@ grabkeys() GrabModeAsync, GrabModeAsync); XGrabKey(dpy, code, key[i].mod | LockMask, root, True, GrabModeAsync, GrabModeAsync); - XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK, root, True, + XGrabKey(dpy, code, key[i].mod | numlockmask, root, True, GrabModeAsync, GrabModeAsync); - XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK | LockMask, root, True, + XGrabKey(dpy, code, key[i].mod | numlockmask | LockMask, root, True, GrabModeAsync, GrabModeAsync); } } diff --git a/main.c b/main.c index 2df9683..8699284 100644 --- a/main.c +++ b/main.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -85,7 +86,7 @@ xerrorstart(Display *dsply, XErrorEvent *ee) char stext[1024]; Bool *seltag; int screen, sx, sy, sw, sh, bx, by, bw, bh, mw; -unsigned int ntags; +unsigned int ntags, numlockmask; Atom wmatom[WMLast], netatom[NetLast]; Bool running = True; Bool issel = True; @@ -162,12 +163,13 @@ xerror(Display *dpy, XErrorEvent *ee) int main(int argc, char *argv[]) { - int i, xfd; + int i, j, xfd; unsigned int mask; fd_set rd; Bool readin = True; Window w; XEvent ev; + XModifierKeymap *modmap; XSetWindowAttributes wa; if(argc == 2 && !strncmp("-v", argv[1], 3)) { @@ -211,7 +213,16 @@ main(int argc, char *argv[]) cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing); cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur); - wa.event_mask = SubstructureRedirectMask | EnterWindowMask | LeaveWindowMask; + modmap = XGetModifierMapping(dpy); + for (i = 0; i < 8; i++) { + for (j = 0; j < modmap->max_keypermod; j++) { + if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock)) + numlockmask = (1 << i); + } + } + XFree(modmap); + + wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask | EnterWindowMask | LeaveWindowMask; wa.cursor = cursor[CurNormal]; XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa); @@ -233,13 +244,12 @@ main(int argc, char *argv[]) sh = DisplayHeight(dpy, screen); mw = (sw * MASTERW) / 100; - wa.override_redirect = 1; - wa.background_pixmap = ParentRelative; - wa.event_mask = ButtonPressMask | ExposureMask; - bx = by = 0; bw = sw; dc.h = bh = dc.font.height + 4; + wa.override_redirect = 1; + wa.background_pixmap = ParentRelative; + wa.event_mask = ButtonPressMask | ExposureMask; barwin = XCreateWindow(dpy, root, bx, by, bw, bh, 0, DefaultDepth(dpy, screen), CopyFromParent, DefaultVisual(dpy, screen), CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); @@ -258,6 +268,7 @@ main(int argc, char *argv[]) /* main event loop, also reads status text from stdin */ XSync(dpy, False); + goto XLoop; while(running) { FD_ZERO(&rd); if(readin) @@ -278,6 +289,7 @@ main(int argc, char *argv[]) drawstatus(); } if(FD_ISSET(xfd, &rd)) { +XLoop: while(XPending(dpy)) { XNextEvent(dpy, &ev); if(handler[ev.type]) -- 2.20.1 From b6ad663f87b195b1494798030f826cb2fbc71a23 Mon Sep 17 00:00:00 2001 From: "Anselm R.Garbe" Date: Tue, 15 Aug 2006 07:31:42 +0200 Subject: [PATCH 08/16] changed main event loop --- dwm.h | 1 + event.c | 13 +++++++++++++ main.c | 17 +++++++---------- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/dwm.h b/dwm.h index bb941dc..c4594fc 100644 --- a/dwm.h +++ b/dwm.h @@ -108,6 +108,7 @@ extern unsigned int textw(const char *text); /* event.c */ extern void grabkeys(); +extern void procevent(); /* main.c */ extern int getproto(Window w); diff --git a/event.c b/event.c index c8a87c1..5209be3 100644 --- a/event.c +++ b/event.c @@ -384,3 +384,16 @@ grabkeys() GrabModeAsync, GrabModeAsync); } } + +void +procevent() +{ + XEvent ev; + + while(XPending(dpy)) { + XNextEvent(dpy, &ev); + if(handler[ev.type]) + (handler[ev.type])(&ev); /* call handler */ + } +} + diff --git a/main.c b/main.c index 8699284..b348598 100644 --- a/main.c +++ b/main.c @@ -27,7 +27,9 @@ cleanup() resize(sel, True, TopLeft); unmanage(sel); } + XUngrabKey(dpy, AnyKey, AnyModifier, root); XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); + XSync(dpy, False); } static void @@ -37,6 +39,7 @@ scan() Window *wins, d1, d2; XWindowAttributes wa; + wins = NULL; if(XQueryTree(dpy, root, &d1, &d2, &wins, &num)) { for(i = 0; i < num; i++) { if(!XGetWindowAttributes(dpy, wins[i], &wa)) @@ -168,7 +171,6 @@ main(int argc, char *argv[]) fd_set rd; Bool readin = True; Window w; - XEvent ev; XModifierKeymap *modmap; XSetWindowAttributes wa; @@ -196,6 +198,7 @@ main(int argc, char *argv[]) if(otherwm) eprint("dwm: another window manager is already running\n"); + XSync(dpy, False); XSetErrorHandler(NULL); xerrorxlib = XSetErrorHandler(xerror); XSync(dpy, False); @@ -268,7 +271,7 @@ main(int argc, char *argv[]) /* main event loop, also reads status text from stdin */ XSync(dpy, False); - goto XLoop; + procevent(); while(running) { FD_ZERO(&rd); if(readin) @@ -288,14 +291,8 @@ main(int argc, char *argv[]) strcpy(stext, "broken pipe"); drawstatus(); } - if(FD_ISSET(xfd, &rd)) { -XLoop: - while(XPending(dpy)) { - XNextEvent(dpy, &ev); - if(handler[ev.type]) - (handler[ev.type])(&ev); /* call handler */ - } - } + if(FD_ISSET(xfd, &rd)) + procevent(); } } cleanup(); -- 2.20.1 From df74b26e5dfa3ae0f3f66107a562be6ac46ee0c3 Mon Sep 17 00:00:00 2001 From: "Anselm R.Garbe" Date: Tue, 15 Aug 2006 08:25:11 +0200 Subject: [PATCH 09/16] applied jk_to_tab patch --- config.default.h | 34 +++++++++++----------- dwm.1 | 76 ++++++++++++++++++++++++++---------------------- main.c | 3 +- 3 files changed, 60 insertions(+), 53 deletions(-) diff --git a/config.default.h b/config.default.h index 44f0daf..9d99794 100644 --- a/config.default.h +++ b/config.default.h @@ -18,34 +18,34 @@ const char *tags[] = { "0", "1", "2", "3", "4", 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_j, focusnext, { 0 } }, \ - { MODKEY, XK_k, focusprev, { 0 } }, \ - { MODKEY, XK_m, togglemax, { 0 } }, \ - { MODKEY, XK_space, togglemode, { 0 } }, \ + { MODKEY|ShiftMask, XK_Return, spawn, { .cmd = "exec xterm" } }, \ + { MODKEY, XK_Tab, focusnext, { 0 } }, \ + { MODKEY|ShiftMask, XK_Tab, focusprev, { 0 } }, \ { MODKEY, XK_Return, zoom, { 0 } }, \ - { MODKEY|ControlMask, XK_0, toggleview, { .i = 0 } }, \ - { MODKEY|ControlMask, XK_1, toggleview, { .i = 1 } }, \ - { MODKEY|ControlMask, XK_2, toggleview, { .i = 2 } }, \ - { MODKEY|ControlMask, XK_3, toggleview, { .i = 3 } }, \ - { MODKEY|ControlMask, XK_4, toggleview, { .i = 4 } }, \ + { MODKEY, XK_m, togglemax, { 0 } }, \ { MODKEY|ShiftMask, XK_0, tag, { .i = 0 } }, \ { MODKEY|ShiftMask, XK_1, tag, { .i = 1 } }, \ { MODKEY|ShiftMask, XK_2, tag, { .i = 2 } }, \ { MODKEY|ShiftMask, XK_3, tag, { .i = 3 } }, \ { MODKEY|ShiftMask, XK_4, tag, { .i = 4 } }, \ - { MODKEY|ShiftMask, XK_c, killclient, { 0 } }, \ - { MODKEY|ShiftMask, XK_q, quit, { 0 } }, \ - { MODKEY|ShiftMask, XK_Return, spawn, { .cmd = "exec xterm" } }, \ { MODKEY|ControlMask|ShiftMask, XK_0, toggletag, { .i = 0 } }, \ { MODKEY|ControlMask|ShiftMask, XK_1, toggletag, { .i = 1 } }, \ { MODKEY|ControlMask|ShiftMask, XK_2, toggletag, { .i = 2 } }, \ { MODKEY|ControlMask|ShiftMask, XK_3, toggletag, { .i = 3 } }, \ { MODKEY|ControlMask|ShiftMask, XK_4, toggletag, { .i = 4 } }, \ + { MODKEY|ShiftMask, XK_c, killclient, { 0 } }, \ + { MODKEY, XK_space, togglemode, { 0 } }, \ + { 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|ControlMask, XK_0, toggleview, { .i = 0 } }, \ + { MODKEY|ControlMask, XK_1, toggleview, { .i = 1 } }, \ + { MODKEY|ControlMask, XK_2, toggleview, { .i = 2 } }, \ + { MODKEY|ControlMask, XK_3, toggleview, { .i = 3 } }, \ + { MODKEY|ControlMask, XK_4, toggleview, { .i = 4 } }, \ + { MODKEY|ShiftMask, XK_q, quit, { 0 } }, \ }; #define RULES \ diff --git a/dwm.1 b/dwm.1 index c653b99..46f0d94 100644 --- a/dwm.1 +++ b/dwm.1 @@ -46,83 +46,91 @@ click on a tag label adds/removes all windows with that to/from the view. .SS Keyboard commands .TP -.B Mod1-Return -Zoom current -.B window -to the -.B master -column. +.B Mod1-Shift-Return +Start +.BR xterm (1). .TP -.B Mod1-j +.B Mod1-Tab Focus next .BR window . .TP -.B Mod1-k +.B Mod1-Shift-Tab Focus previous .BR window . .TP +.B Mod1-Return +Zoom current +.B window +to the +.B master +column +.RB ( tiling +mode only). +.TP .B Mod1-m Maximize current .BR window . .TP -.B Mod1-[0..n] -View all windows with -.BR "tag n" . -.TP -.B Mod1-space -Toggle between -.B tiled -and -.B floating -mode (affects -.BR "all windows" ). -.TP .B Mod1-Shift-[0..n] Apply .B nth tag to current .BR window . .TP +.B Mod1-Control-Shift-[0..n] +Add/remove +.B nth tag +to/from current +.BR window . +.TP .B Mod1-Shift-c Close focused .B window. .TP -.B Mod1-Shift-q -Quit -.B dwm. +.B Mod1-space +Toggle between +.B tiled +and +.B floating +mode (affects +.BR "all windows" ). .TP -.B Mod1-Shift-Return -Start -.BR terminal . +.B Mod1-[0..n] +View all windows with +.BR "tag n" . .TP .B Mod1-Control-[0..n] Add/remove all windows with .B tag n to/from the view. .TP -.B Mod1-Control-Shift-[0..n] -Add/remove -.B nth tag -to/from current -.BR window . +.B Mod1-Shift-q +Quit +.B dwm. .SS Mouse commands .TP .B Mod1-Button1 Move current .B window -while dragging. +while dragging +.RB ( floating +mode only). .TP .B Mod1-Button2 Zoom current .B window to the .B master -column. +column +.RB ( tiling +mode only). .TP .B Mod1-Button3 Resize current .B window -while dragging. +while dragging +.RB ( floating +mode only). .SH CUSTOMIZATION .B dwm is customized by creating a custom config.h and (re)compiling the source diff --git a/main.c b/main.c index b348598..d0048be 100644 --- a/main.c +++ b/main.c @@ -291,9 +291,8 @@ main(int argc, char *argv[]) strcpy(stext, "broken pipe"); drawstatus(); } - if(FD_ISSET(xfd, &rd)) - procevent(); } + procevent(); } cleanup(); XCloseDisplay(dpy); -- 2.20.1 From ce04a665282e4f63d47aa4c4b2f108ebb4fce5e6 Mon Sep 17 00:00:00 2001 From: "Anselm R.Garbe" Date: Tue, 15 Aug 2006 08:38:19 +0200 Subject: [PATCH 10/16] applied Sanders changes to config.arg.h --- config.arg.h | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/config.arg.h b/config.arg.h index 2e49f81..8b3c59b 100644 --- a/config.arg.h +++ b/config.arg.h @@ -18,31 +18,27 @@ const char *tags[] = { "work", "net", "fnord", NULL }; #define KEYS \ static Key key[] = { \ /* modifier key function arguments */ \ - { MODKEY, XK_1, view, { .i = 0 } }, \ - { MODKEY, XK_2, view, { .i = 1 } }, \ - { MODKEY, XK_3, view, { .i = 2 } }, \ - { MODKEY, XK_j, focusnext, { 0 } }, \ - { MODKEY, XK_k, focusprev, { 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`" } }, \ - { MODKEY, XK_space, togglemode, { 0 } }, \ + { MODKEY|ShiftMask, XK_Return, spawn, \ + { .cmd = "exec urxvt +sb -tr -bg black -fg '#eeeeee' -fn '"FONT"'" } }, \ + { MODKEY, XK_Tab, focusnext, { 0 } }, \ + { MODKEY|ShiftMask, XK_Tab, focusprev, { 0 } }, \ { MODKEY, XK_Return, zoom, { 0 } }, \ - { MODKEY|ControlMask, XK_1, toggleview, { .i = 0 } }, \ - { MODKEY|ControlMask, XK_2, toggleview, { .i = 1 } }, \ - { MODKEY|ControlMask, XK_3, toggleview, { .i = 2 } }, \ + { MODKEY, XK_m, togglemax, { 0 } }, \ { MODKEY|ShiftMask, XK_1, tag, { .i = 0 } }, \ { MODKEY|ShiftMask, XK_2, tag, { .i = 1 } }, \ { MODKEY|ShiftMask, XK_3, tag, { .i = 2 } }, \ - { MODKEY|ShiftMask, XK_c, killclient, { 0 } }, \ - { MODKEY|ShiftMask, XK_q, quit, { 0 } }, \ - { MODKEY|ShiftMask, XK_Return, spawn, \ - { .cmd = "exec urxvt +sb -tr -bg black -fg '#eeeeee' -cr '#eeeeee' +sb " \ - "-fn '-*-terminus-medium-*-*-*-12-*-*-*-*-*-iso10646-*'" } }, \ { MODKEY|ControlMask|ShiftMask, XK_1, toggletag, { .i = 0 } }, \ { MODKEY|ControlMask|ShiftMask, XK_2, toggletag, { .i = 1 } }, \ { MODKEY|ControlMask|ShiftMask, XK_3, toggletag, { .i = 2 } }, \ + { MODKEY|ShiftMask, XK_c, killclient, { 0 } }, \ + { MODKEY, XK_space, togglemode, { 0 } }, \ + { MODKEY, XK_1, view, { .i = 0 } }, \ + { MODKEY, XK_2, view, { .i = 1 } }, \ + { MODKEY, XK_3, view, { .i = 2 } }, \ + { MODKEY|ControlMask, XK_1, toggleview, { .i = 0 } }, \ + { MODKEY|ControlMask, XK_2, toggleview, { .i = 1 } }, \ + { MODKEY|ControlMask, XK_3, toggleview, { .i = 2 } }, \ + { MODKEY|ShiftMask, XK_q, quit, { 0 } }, \ }; #define RULES \ -- 2.20.1 From 24d91e3b8a6e173bf65d5dd611b164dcb6a01978 Mon Sep 17 00:00:00 2001 From: "Anselm R.Garbe" Date: Tue, 15 Aug 2006 09:37:12 +0200 Subject: [PATCH 11/16] extended cleanup --- config.arg.h | 7 +++++-- main.c | 7 +++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/config.arg.h b/config.arg.h index 8b3c59b..c9c2ad8 100644 --- a/config.arg.h +++ b/config.arg.h @@ -20,8 +20,11 @@ static Key key[] = { \ /* modifier key function arguments */ \ { MODKEY|ShiftMask, XK_Return, spawn, \ { .cmd = "exec urxvt +sb -tr -bg black -fg '#eeeeee' -fn '"FONT"'" } }, \ - { MODKEY, XK_Tab, focusnext, { 0 } }, \ - { MODKEY|ShiftMask, XK_Tab, focusprev, { 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`" } }, \ + { MODKEY, XK_j, focusnext, { 0 } }, \ + { MODKEY, XK_k, focusprev, { 0 } }, \ { MODKEY, XK_Return, zoom, { 0 } }, \ { MODKEY, XK_m, togglemax, { 0 } }, \ { MODKEY|ShiftMask, XK_1, tag, { .i = 0 } }, \ diff --git a/main.c b/main.c index d0048be..545efe9 100644 --- a/main.c +++ b/main.c @@ -27,7 +27,14 @@ cleanup() resize(sel, True, TopLeft); unmanage(sel); } + if(dc.font.set) + XFreeFontSet(dpy, dc.font.set); + else + XFreeFont(dpy, dc.font.xfont); XUngrabKey(dpy, AnyKey, AnyModifier, root); + XDestroyWindow(dpy, barwin); + XFreePixmap(dpy, dc.drawable); + XFreeGC(dpy, dc.gc); XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); XSync(dpy, False); } -- 2.20.1 From a1682b8927919a443427b0160bab22e9762fe783 Mon Sep 17 00:00:00 2001 From: "Anselm R.Garbe" Date: Tue, 15 Aug 2006 10:11:29 +0200 Subject: [PATCH 12/16] prepared dwm-0.9 --- dwm.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dwm.html b/dwm.html index 077bf21..11ff0ba 100644 --- a/dwm.html +++ b/dwm.html @@ -104,8 +104,8 @@

Download

Development

-- 2.20.1 From e3bb595d77c6bbd4b73f665f4afba79a1fcd2dbd Mon Sep 17 00:00:00 2001 From: "Anselm R.Garbe" Date: Tue, 15 Aug 2006 10:25:30 +0200 Subject: [PATCH 13/16] Added tag 0.9 for changeset fae61afa861755636c4a1070694209ace8efbb6c --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 1712930..40d2077 100644 --- a/.hgtags +++ b/.hgtags @@ -6,3 +6,4 @@ eb3165734f00fe7f7da8aeebaed00e60a57caac9 0.4 c11f86db4550cac5d0a648a3fe4d6d3b9a4fcf7e 0.6 3fb41412e2492f66476d92ce8f007a8b48fb1d2a 0.7 cd15de32e173f8ce97bfe1c9b6607937b59056b4 0.8 +fae61afa861755636c4a1070694209ace8efbb6c 0.9 -- 2.20.1 From 65dfe8fdce9f5c5f1fea00f5c92c3e04b50f2540 Mon Sep 17 00:00:00 2001 From: "Anselm R.Garbe" Date: Tue, 15 Aug 2006 10:44:15 +0200 Subject: [PATCH 14/16] added gmane archive to dwm.html --- dwm.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dwm.html b/dwm.html index 11ff0ba..92c6745 100644 --- a/dwm.html +++ b/dwm.html @@ -99,7 +99,7 @@

  • Screenshot of tiled mode (20060810)
  • Screenshotof floating mode (20060810)
  • A4 poster (PostScript)
  • -
  • Mailing List: dwm at wmii dot de (Archives)
  • +
  • Mailing List: dwm at wmii dot de (Archives)(GMANE Archive)
  • IRC channel: #dwm at irc.oftc.net
  • Download

    -- 2.20.1 From f77a87137c8e0d64cddfe4bdc451dc5a2614c79a Mon Sep 17 00:00:00 2001 From: "Anselm R.Garbe" Date: Tue, 15 Aug 2006 10:45:14 +0200 Subject: [PATCH 15/16] adding forgetten whitespace --- dwm.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dwm.html b/dwm.html index 92c6745..5071bee 100644 --- a/dwm.html +++ b/dwm.html @@ -99,7 +99,7 @@
  • Screenshot of tiled mode (20060810)
  • Screenshotof floating mode (20060810)
  • A4 poster (PostScript)
  • -
  • Mailing List: dwm at wmii dot de (Archives)(GMANE Archive)
  • +
  • Mailing List: dwm at wmii dot de (Archives) (GMANE Archive)
  • IRC channel: #dwm at irc.oftc.net
  • Download

    -- 2.20.1 From b9cd0c433139ae7dac850c5cd538ee74b32797e1 Mon Sep 17 00:00:00 2001 From: "Anselm R.Garbe" Date: Tue, 15 Aug 2006 16:54:54 +0200 Subject: [PATCH 16/16] fixing small bug in config.mk --- config.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config.mk b/config.mk index 2159481..a80de4b 100644 --- a/config.mk +++ b/config.mk @@ -1,5 +1,5 @@ # dwm version -VERSION = 0.9 +VERSION = 1.0 # Customize below to fit your system @@ -11,7 +11,7 @@ X11INC = /usr/X11R6/include X11LIB = /usr/X11R6/lib # includes and libs -INCS = -I/usr/lib -I${X11INC} +INCS = -I/usr/include -I${X11INC} LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 # flags -- 2.20.1