dwm

Extremely fast, small, and dynamic window manager for X
git clone git://git.janpasierb.com/dwm.git
Log | Files | Refs | README | LICENSE

commit e9a07335060337222c94260797582aae2c74d455
parent 198502f41dc3c436b73215f5e2a6b58b050ecfce
Author: Anselm R. Garbe <garbeam@gmail.com>
Date:   Sat, 10 Nov 2007 19:16:11 +0100

Using a new tags definition (const char [][MAXTAGLEN] - thanks go to Szabolcs!
Diffstat:
Mconfig.def.h | 115+++++++++++++++++++++++++++++++++++++++----------------------------------------
Mdwm.c | 44++++++++++++++++++++++++--------------------
2 files changed, 81 insertions(+), 78 deletions(-)

diff --git a/config.def.h b/config.def.h @@ -12,7 +12,7 @@ #define SELFGCOLOR "#ffffff" /* tagging */ -const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "www" }; +const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "www" }; Bool seltags[LENGTH(tags)] = {[0] = True}; Rule rules[] = { /* class:instance:title regex tags regex isfloating */ @@ -34,61 +34,60 @@ Layout layouts[] = { /* key definitions */ #define MODKEY Mod1Mask -#define KEYS \ -Key keys[] = { \ - /* modifier key function argument */ \ - { MODKEY, XK_p, spawn, \ - "exe=`dmenu_path | dmenu -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"'" \ - " -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'` && exec $exe" }, \ - { MODKEY|ShiftMask, XK_Return, spawn, "exec uxterm" }, \ - { MODKEY, XK_space, setlayout, NULL }, \ - { MODKEY, XK_b, togglebar, NULL }, \ - { MODKEY, XK_j, focusnext, NULL }, \ - { MODKEY, XK_k, focusprev, NULL }, \ - { MODKEY, XK_h, setmwfact, "-0.05" }, \ - { MODKEY, XK_l, setmwfact, "+0.05" }, \ - { MODKEY, XK_m, togglemax, NULL }, \ - { MODKEY, XK_Return, zoom, NULL }, \ - { MODKEY, XK_Tab, viewprevtag, NULL }, \ - { MODKEY|ShiftMask, XK_space, togglefloating, NULL }, \ - { MODKEY|ShiftMask, XK_c, killclient, NULL }, \ - { MODKEY, XK_0, view, NULL }, \ - { MODKEY, XK_1, view, tags[0] }, \ - { MODKEY, XK_2, view, tags[1] }, \ - { MODKEY, XK_3, view, tags[2] }, \ - { MODKEY, XK_4, view, tags[3] }, \ - { MODKEY, XK_5, view, tags[4] }, \ - { MODKEY, XK_6, view, tags[5] }, \ - { MODKEY, XK_7, view, tags[6] }, \ - { MODKEY, XK_8, view, tags[7] }, \ - { MODKEY, XK_9, view, tags[8] }, \ - { MODKEY|ControlMask, XK_1, toggleview, tags[0] }, \ - { MODKEY|ControlMask, XK_2, toggleview, tags[1] }, \ - { MODKEY|ControlMask, XK_3, toggleview, tags[2] }, \ - { MODKEY|ControlMask, XK_4, toggleview, tags[3] }, \ - { MODKEY|ControlMask, XK_5, toggleview, tags[4] }, \ - { MODKEY|ControlMask, XK_6, toggleview, tags[5] }, \ - { MODKEY|ControlMask, XK_7, toggleview, tags[6] }, \ - { MODKEY|ControlMask, XK_8, toggleview, tags[7] }, \ - { MODKEY|ControlMask, XK_9, toggleview, tags[8] }, \ - { MODKEY|ShiftMask, XK_0, tag, NULL }, \ - { MODKEY|ShiftMask, XK_1, tag, tags[0] }, \ - { MODKEY|ShiftMask, XK_2, tag, tags[1] }, \ - { MODKEY|ShiftMask, XK_3, tag, tags[2] }, \ - { MODKEY|ShiftMask, XK_4, tag, tags[3] }, \ - { MODKEY|ShiftMask, XK_5, tag, tags[4] }, \ - { MODKEY|ShiftMask, XK_6, tag, tags[5] }, \ - { MODKEY|ShiftMask, XK_7, tag, tags[6] }, \ - { MODKEY|ShiftMask, XK_8, tag, tags[7] }, \ - { MODKEY|ShiftMask, XK_9, tag, tags[8] }, \ - { MODKEY|ControlMask|ShiftMask, XK_1, toggletag, tags[0] }, \ - { MODKEY|ControlMask|ShiftMask, XK_2, toggletag, tags[1] }, \ - { MODKEY|ControlMask|ShiftMask, XK_3, toggletag, tags[2] }, \ - { MODKEY|ControlMask|ShiftMask, XK_4, toggletag, tags[3] }, \ - { MODKEY|ControlMask|ShiftMask, XK_5, toggletag, tags[4] }, \ - { MODKEY|ControlMask|ShiftMask, XK_6, toggletag, tags[5] }, \ - { MODKEY|ControlMask|ShiftMask, XK_7, toggletag, tags[6] }, \ - { MODKEY|ControlMask|ShiftMask, XK_8, toggletag, tags[7] }, \ - { MODKEY|ControlMask|ShiftMask, XK_9, toggletag, tags[8] }, \ - { MODKEY|ShiftMask, XK_q, quit, NULL }, \ +Key keys[] = { + /* modifier key function argument */ + { MODKEY, XK_p, spawn, + "exe=`dmenu_path | dmenu -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"'" + " -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'` && exec $exe" }, + { MODKEY|ShiftMask, XK_Return, spawn, "exec uxterm" }, + { MODKEY, XK_space, setlayout, NULL }, + { MODKEY, XK_b, togglebar, NULL }, + { MODKEY, XK_j, focusnext, NULL }, + { MODKEY, XK_k, focusprev, NULL }, + { MODKEY, XK_h, setmwfact, "-0.05" }, + { MODKEY, XK_l, setmwfact, "+0.05" }, + { MODKEY, XK_m, togglemax, NULL }, + { MODKEY, XK_Return, zoom, NULL }, + { MODKEY, XK_Tab, viewprevtag, NULL }, + { MODKEY|ShiftMask, XK_space, togglefloating, NULL }, + { MODKEY|ShiftMask, XK_c, killclient, NULL }, + { MODKEY, XK_0, view, NULL }, + { MODKEY, XK_1, view, tags[0] }, + { MODKEY, XK_2, view, tags[1] }, + { MODKEY, XK_3, view, tags[2] }, + { MODKEY, XK_4, view, tags[3] }, + { MODKEY, XK_5, view, tags[4] }, + { MODKEY, XK_6, view, tags[5] }, + { MODKEY, XK_7, view, tags[6] }, + { MODKEY, XK_8, view, tags[7] }, + { MODKEY, XK_9, view, tags[8] }, + { MODKEY|ControlMask, XK_1, toggleview, tags[0] }, + { MODKEY|ControlMask, XK_2, toggleview, tags[1] }, + { MODKEY|ControlMask, XK_3, toggleview, tags[2] }, + { MODKEY|ControlMask, XK_4, toggleview, tags[3] }, + { MODKEY|ControlMask, XK_5, toggleview, tags[4] }, + { MODKEY|ControlMask, XK_6, toggleview, tags[5] }, + { MODKEY|ControlMask, XK_7, toggleview, tags[6] }, + { MODKEY|ControlMask, XK_8, toggleview, tags[7] }, + { MODKEY|ControlMask, XK_9, toggleview, tags[8] }, + { MODKEY|ShiftMask, XK_0, tag, NULL }, + { MODKEY|ShiftMask, XK_1, tag, tags[0] }, + { MODKEY|ShiftMask, XK_2, tag, tags[1] }, + { MODKEY|ShiftMask, XK_3, tag, tags[2] }, + { MODKEY|ShiftMask, XK_4, tag, tags[3] }, + { MODKEY|ShiftMask, XK_5, tag, tags[4] }, + { MODKEY|ShiftMask, XK_6, tag, tags[5] }, + { MODKEY|ShiftMask, XK_7, tag, tags[6] }, + { MODKEY|ShiftMask, XK_8, tag, tags[7] }, + { MODKEY|ShiftMask, XK_9, tag, tags[8] }, + { MODKEY|ControlMask|ShiftMask, XK_1, toggletag, tags[0] }, + { MODKEY|ControlMask|ShiftMask, XK_2, toggletag, tags[1] }, + { MODKEY|ControlMask|ShiftMask, XK_3, toggletag, tags[2] }, + { MODKEY|ControlMask|ShiftMask, XK_4, toggletag, tags[3] }, + { MODKEY|ControlMask|ShiftMask, XK_5, toggletag, tags[4] }, + { MODKEY|ControlMask|ShiftMask, XK_6, toggletag, tags[5] }, + { MODKEY|ControlMask|ShiftMask, XK_7, toggletag, tags[6] }, + { MODKEY|ControlMask|ShiftMask, XK_8, toggletag, tags[7] }, + { MODKEY|ControlMask|ShiftMask, XK_9, toggletag, tags[8] }, + { MODKEY|ShiftMask, XK_q, quit, NULL }, }; diff --git a/dwm.c b/dwm.c @@ -44,8 +44,9 @@ /* macros */ #define BUTTONMASK (ButtonPressMask | ButtonReleaseMask) #define CLEANMASK(mask) (mask & ~(numlockmask | LockMask)) -#define MOUSEMASK (BUTTONMASK | PointerMotionMask) #define LENGTH(x) (sizeof x / sizeof x[0]) +#define MAXTAGLEN 16 +#define MOUSEMASK (BUTTONMASK | PointerMotionMask) /* enums */ @@ -143,6 +144,7 @@ unsigned long getcolor(const char *colstr); long getstate(Window w); Bool gettextprop(Window w, Atom atom, char *text, unsigned int size); void grabbuttons(Client *c, Bool focused); +void grabkeys(void); unsigned int idxoftag(const char *tag); void initfont(const char *fontstr); Bool isoccupied(unsigned int t); @@ -838,6 +840,25 @@ grabbuttons(Client *c, Bool focused) { GrabModeAsync, GrabModeSync, None, None); } +void +grabkeys(void) { + unsigned int i; + KeyCode code; + + XUngrabKey(dpy, AnyKey, AnyModifier, root); + for(i = 0; i < LENGTH(keys); i++) { + code = XKeysymToKeycode(dpy, keys[i].keysym); + XGrabKey(dpy, code, keys[i].mod, root, True, + GrabModeAsync, GrabModeAsync); + XGrabKey(dpy, code, keys[i].mod | LockMask, root, True, + GrabModeAsync, GrabModeAsync); + XGrabKey(dpy, code, keys[i].mod | numlockmask, root, True, + GrabModeAsync, GrabModeAsync); + XGrabKey(dpy, code, keys[i].mod | numlockmask | LockMask, root, True, + GrabModeAsync, GrabModeAsync); + } +} + unsigned int idxoftag(const char *tag) { unsigned int i; @@ -925,27 +946,10 @@ isvisible(Client *c) { void keypress(XEvent *e) { - KEYS unsigned int i; - KeyCode code; KeySym keysym; XKeyEvent *ev; - if(!e) { /* grabkeys */ - XUngrabKey(dpy, AnyKey, AnyModifier, root); - for(i = 0; i < LENGTH(keys); i++) { - code = XKeysymToKeycode(dpy, keys[i].keysym); - XGrabKey(dpy, code, keys[i].mod, root, True, - GrabModeAsync, GrabModeAsync); - XGrabKey(dpy, code, keys[i].mod | LockMask, root, True, - GrabModeAsync, GrabModeAsync); - XGrabKey(dpy, code, keys[i].mod | numlockmask, root, True, - GrabModeAsync, GrabModeAsync); - XGrabKey(dpy, code, keys[i].mod | numlockmask | LockMask, root, True, - GrabModeAsync, GrabModeAsync); - } - return; - } ev = &e->xkey; keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0); for(i = 0; i < LENGTH(keys); i++) @@ -1048,7 +1052,7 @@ mappingnotify(XEvent *e) { XRefreshKeyboardMapping(ev); if(ev->request == MappingKeyboard) - keypress(NULL); + grabkeys(); } void @@ -1460,7 +1464,7 @@ setup(void) { XSelectInput(dpy, root, wa.event_mask); /* grab keys */ - keypress(NULL); + grabkeys(); /* init tags */ compileregs();