Using a new tags definition (const char [][MAXTAGLEN] - thanks go to Szabolcs!
e9a07335
2 file(s) · +81 −78
| 12 | 12 | #define SELFGCOLOR "#ffffff" |
|
| 13 | 13 | ||
| 14 | 14 | /* tagging */ |
|
| 15 | - | const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "www" }; |
|
| 15 | + | const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "www" }; |
|
| 16 | 16 | Bool seltags[LENGTH(tags)] = {[0] = True}; |
|
| 17 | 17 | Rule rules[] = { |
|
| 18 | 18 | /* class:instance:title regex tags regex isfloating */ |
|
| 34 | 34 | ||
| 35 | 35 | /* key definitions */ |
|
| 36 | 36 | #define MODKEY Mod1Mask |
|
| 37 | - | #define KEYS \ |
|
| 38 | - | Key keys[] = { \ |
|
| 39 | - | /* modifier key function argument */ \ |
|
| 40 | - | { MODKEY, XK_p, spawn, \ |
|
| 41 | - | "exe=`dmenu_path | dmenu -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"'" \ |
|
| 42 | - | " -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'` && exec $exe" }, \ |
|
| 43 | - | { MODKEY|ShiftMask, XK_Return, spawn, "exec uxterm" }, \ |
|
| 44 | - | { MODKEY, XK_space, setlayout, NULL }, \ |
|
| 45 | - | { MODKEY, XK_b, togglebar, NULL }, \ |
|
| 46 | - | { MODKEY, XK_j, focusnext, NULL }, \ |
|
| 47 | - | { MODKEY, XK_k, focusprev, NULL }, \ |
|
| 48 | - | { MODKEY, XK_h, setmwfact, "-0.05" }, \ |
|
| 49 | - | { MODKEY, XK_l, setmwfact, "+0.05" }, \ |
|
| 50 | - | { MODKEY, XK_m, togglemax, NULL }, \ |
|
| 51 | - | { MODKEY, XK_Return, zoom, NULL }, \ |
|
| 52 | - | { MODKEY, XK_Tab, viewprevtag, NULL }, \ |
|
| 53 | - | { MODKEY|ShiftMask, XK_space, togglefloating, NULL }, \ |
|
| 54 | - | { MODKEY|ShiftMask, XK_c, killclient, NULL }, \ |
|
| 55 | - | { MODKEY, XK_0, view, NULL }, \ |
|
| 56 | - | { MODKEY, XK_1, view, tags[0] }, \ |
|
| 57 | - | { MODKEY, XK_2, view, tags[1] }, \ |
|
| 58 | - | { MODKEY, XK_3, view, tags[2] }, \ |
|
| 59 | - | { MODKEY, XK_4, view, tags[3] }, \ |
|
| 60 | - | { MODKEY, XK_5, view, tags[4] }, \ |
|
| 61 | - | { MODKEY, XK_6, view, tags[5] }, \ |
|
| 62 | - | { MODKEY, XK_7, view, tags[6] }, \ |
|
| 63 | - | { MODKEY, XK_8, view, tags[7] }, \ |
|
| 64 | - | { MODKEY, XK_9, view, tags[8] }, \ |
|
| 65 | - | { MODKEY|ControlMask, XK_1, toggleview, tags[0] }, \ |
|
| 66 | - | { MODKEY|ControlMask, XK_2, toggleview, tags[1] }, \ |
|
| 67 | - | { MODKEY|ControlMask, XK_3, toggleview, tags[2] }, \ |
|
| 68 | - | { MODKEY|ControlMask, XK_4, toggleview, tags[3] }, \ |
|
| 69 | - | { MODKEY|ControlMask, XK_5, toggleview, tags[4] }, \ |
|
| 70 | - | { MODKEY|ControlMask, XK_6, toggleview, tags[5] }, \ |
|
| 71 | - | { MODKEY|ControlMask, XK_7, toggleview, tags[6] }, \ |
|
| 72 | - | { MODKEY|ControlMask, XK_8, toggleview, tags[7] }, \ |
|
| 73 | - | { MODKEY|ControlMask, XK_9, toggleview, tags[8] }, \ |
|
| 74 | - | { MODKEY|ShiftMask, XK_0, tag, NULL }, \ |
|
| 75 | - | { MODKEY|ShiftMask, XK_1, tag, tags[0] }, \ |
|
| 76 | - | { MODKEY|ShiftMask, XK_2, tag, tags[1] }, \ |
|
| 77 | - | { MODKEY|ShiftMask, XK_3, tag, tags[2] }, \ |
|
| 78 | - | { MODKEY|ShiftMask, XK_4, tag, tags[3] }, \ |
|
| 79 | - | { MODKEY|ShiftMask, XK_5, tag, tags[4] }, \ |
|
| 80 | - | { MODKEY|ShiftMask, XK_6, tag, tags[5] }, \ |
|
| 81 | - | { MODKEY|ShiftMask, XK_7, tag, tags[6] }, \ |
|
| 82 | - | { MODKEY|ShiftMask, XK_8, tag, tags[7] }, \ |
|
| 83 | - | { MODKEY|ShiftMask, XK_9, tag, tags[8] }, \ |
|
| 84 | - | { MODKEY|ControlMask|ShiftMask, XK_1, toggletag, tags[0] }, \ |
|
| 85 | - | { MODKEY|ControlMask|ShiftMask, XK_2, toggletag, tags[1] }, \ |
|
| 86 | - | { MODKEY|ControlMask|ShiftMask, XK_3, toggletag, tags[2] }, \ |
|
| 87 | - | { MODKEY|ControlMask|ShiftMask, XK_4, toggletag, tags[3] }, \ |
|
| 88 | - | { MODKEY|ControlMask|ShiftMask, XK_5, toggletag, tags[4] }, \ |
|
| 89 | - | { MODKEY|ControlMask|ShiftMask, XK_6, toggletag, tags[5] }, \ |
|
| 90 | - | { MODKEY|ControlMask|ShiftMask, XK_7, toggletag, tags[6] }, \ |
|
| 91 | - | { MODKEY|ControlMask|ShiftMask, XK_8, toggletag, tags[7] }, \ |
|
| 92 | - | { MODKEY|ControlMask|ShiftMask, XK_9, toggletag, tags[8] }, \ |
|
| 93 | - | { MODKEY|ShiftMask, XK_q, quit, NULL }, \ |
|
| 37 | + | Key keys[] = { |
|
| 38 | + | /* modifier key function argument */ |
|
| 39 | + | { MODKEY, XK_p, spawn, |
|
| 40 | + | "exe=`dmenu_path | dmenu -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"'" |
|
| 41 | + | " -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'` && exec $exe" }, |
|
| 42 | + | { MODKEY|ShiftMask, XK_Return, spawn, "exec uxterm" }, |
|
| 43 | + | { MODKEY, XK_space, setlayout, NULL }, |
|
| 44 | + | { MODKEY, XK_b, togglebar, NULL }, |
|
| 45 | + | { MODKEY, XK_j, focusnext, NULL }, |
|
| 46 | + | { MODKEY, XK_k, focusprev, NULL }, |
|
| 47 | + | { MODKEY, XK_h, setmwfact, "-0.05" }, |
|
| 48 | + | { MODKEY, XK_l, setmwfact, "+0.05" }, |
|
| 49 | + | { MODKEY, XK_m, togglemax, NULL }, |
|
| 50 | + | { MODKEY, XK_Return, zoom, NULL }, |
|
| 51 | + | { MODKEY, XK_Tab, viewprevtag, NULL }, |
|
| 52 | + | { MODKEY|ShiftMask, XK_space, togglefloating, NULL }, |
|
| 53 | + | { MODKEY|ShiftMask, XK_c, killclient, NULL }, |
|
| 54 | + | { MODKEY, XK_0, view, NULL }, |
|
| 55 | + | { MODKEY, XK_1, view, tags[0] }, |
|
| 56 | + | { MODKEY, XK_2, view, tags[1] }, |
|
| 57 | + | { MODKEY, XK_3, view, tags[2] }, |
|
| 58 | + | { MODKEY, XK_4, view, tags[3] }, |
|
| 59 | + | { MODKEY, XK_5, view, tags[4] }, |
|
| 60 | + | { MODKEY, XK_6, view, tags[5] }, |
|
| 61 | + | { MODKEY, XK_7, view, tags[6] }, |
|
| 62 | + | { MODKEY, XK_8, view, tags[7] }, |
|
| 63 | + | { MODKEY, XK_9, view, tags[8] }, |
|
| 64 | + | { MODKEY|ControlMask, XK_1, toggleview, tags[0] }, |
|
| 65 | + | { MODKEY|ControlMask, XK_2, toggleview, tags[1] }, |
|
| 66 | + | { MODKEY|ControlMask, XK_3, toggleview, tags[2] }, |
|
| 67 | + | { MODKEY|ControlMask, XK_4, toggleview, tags[3] }, |
|
| 68 | + | { MODKEY|ControlMask, XK_5, toggleview, tags[4] }, |
|
| 69 | + | { MODKEY|ControlMask, XK_6, toggleview, tags[5] }, |
|
| 70 | + | { MODKEY|ControlMask, XK_7, toggleview, tags[6] }, |
|
| 71 | + | { MODKEY|ControlMask, XK_8, toggleview, tags[7] }, |
|
| 72 | + | { MODKEY|ControlMask, XK_9, toggleview, tags[8] }, |
|
| 73 | + | { MODKEY|ShiftMask, XK_0, tag, NULL }, |
|
| 74 | + | { MODKEY|ShiftMask, XK_1, tag, tags[0] }, |
|
| 75 | + | { MODKEY|ShiftMask, XK_2, tag, tags[1] }, |
|
| 76 | + | { MODKEY|ShiftMask, XK_3, tag, tags[2] }, |
|
| 77 | + | { MODKEY|ShiftMask, XK_4, tag, tags[3] }, |
|
| 78 | + | { MODKEY|ShiftMask, XK_5, tag, tags[4] }, |
|
| 79 | + | { MODKEY|ShiftMask, XK_6, tag, tags[5] }, |
|
| 80 | + | { MODKEY|ShiftMask, XK_7, tag, tags[6] }, |
|
| 81 | + | { MODKEY|ShiftMask, XK_8, tag, tags[7] }, |
|
| 82 | + | { MODKEY|ShiftMask, XK_9, tag, tags[8] }, |
|
| 83 | + | { MODKEY|ControlMask|ShiftMask, XK_1, toggletag, tags[0] }, |
|
| 84 | + | { MODKEY|ControlMask|ShiftMask, XK_2, toggletag, tags[1] }, |
|
| 85 | + | { MODKEY|ControlMask|ShiftMask, XK_3, toggletag, tags[2] }, |
|
| 86 | + | { MODKEY|ControlMask|ShiftMask, XK_4, toggletag, tags[3] }, |
|
| 87 | + | { MODKEY|ControlMask|ShiftMask, XK_5, toggletag, tags[4] }, |
|
| 88 | + | { MODKEY|ControlMask|ShiftMask, XK_6, toggletag, tags[5] }, |
|
| 89 | + | { MODKEY|ControlMask|ShiftMask, XK_7, toggletag, tags[6] }, |
|
| 90 | + | { MODKEY|ControlMask|ShiftMask, XK_8, toggletag, tags[7] }, |
|
| 91 | + | { MODKEY|ControlMask|ShiftMask, XK_9, toggletag, tags[8] }, |
|
| 92 | + | { MODKEY|ShiftMask, XK_q, quit, NULL }, |
|
| 94 | 93 | }; |
|
| 44 | 44 | /* macros */ |
|
| 45 | 45 | #define BUTTONMASK (ButtonPressMask | ButtonReleaseMask) |
|
| 46 | 46 | #define CLEANMASK(mask) (mask & ~(numlockmask | LockMask)) |
|
| 47 | + | #define LENGTH(x) (sizeof x / sizeof x[0]) |
|
| 48 | + | #define MAXTAGLEN 16 |
|
| 47 | 49 | #define MOUSEMASK (BUTTONMASK | PointerMotionMask) |
|
| 48 | - | #define LENGTH(x) (sizeof x / sizeof x[0]) |
|
| 49 | 50 | ||
| 50 | 51 | ||
| 51 | 52 | /* enums */ |
|
| 143 | 144 | long getstate(Window w); |
|
| 144 | 145 | Bool gettextprop(Window w, Atom atom, char *text, unsigned int size); |
|
| 145 | 146 | void grabbuttons(Client *c, Bool focused); |
|
| 147 | + | void grabkeys(void); |
|
| 146 | 148 | unsigned int idxoftag(const char *tag); |
|
| 147 | 149 | void initfont(const char *fontstr); |
|
| 148 | 150 | Bool isoccupied(unsigned int t); |
|
| 838 | 840 | GrabModeAsync, GrabModeSync, None, None); |
|
| 839 | 841 | } |
|
| 840 | 842 | ||
| 843 | + | void |
|
| 844 | + | grabkeys(void) { |
|
| 845 | + | unsigned int i; |
|
| 846 | + | KeyCode code; |
|
| 847 | + | ||
| 848 | + | XUngrabKey(dpy, AnyKey, AnyModifier, root); |
|
| 849 | + | for(i = 0; i < LENGTH(keys); i++) { |
|
| 850 | + | code = XKeysymToKeycode(dpy, keys[i].keysym); |
|
| 851 | + | XGrabKey(dpy, code, keys[i].mod, root, True, |
|
| 852 | + | GrabModeAsync, GrabModeAsync); |
|
| 853 | + | XGrabKey(dpy, code, keys[i].mod | LockMask, root, True, |
|
| 854 | + | GrabModeAsync, GrabModeAsync); |
|
| 855 | + | XGrabKey(dpy, code, keys[i].mod | numlockmask, root, True, |
|
| 856 | + | GrabModeAsync, GrabModeAsync); |
|
| 857 | + | XGrabKey(dpy, code, keys[i].mod | numlockmask | LockMask, root, True, |
|
| 858 | + | GrabModeAsync, GrabModeAsync); |
|
| 859 | + | } |
|
| 860 | + | } |
|
| 861 | + | ||
| 841 | 862 | unsigned int |
|
| 842 | 863 | idxoftag(const char *tag) { |
|
| 843 | 864 | unsigned int i; |
|
| 925 | 946 | ||
| 926 | 947 | void |
|
| 927 | 948 | keypress(XEvent *e) { |
|
| 928 | - | KEYS |
|
| 929 | 949 | unsigned int i; |
|
| 930 | - | KeyCode code; |
|
| 931 | 950 | KeySym keysym; |
|
| 932 | 951 | XKeyEvent *ev; |
|
| 933 | 952 | ||
| 934 | - | if(!e) { /* grabkeys */ |
|
| 935 | - | XUngrabKey(dpy, AnyKey, AnyModifier, root); |
|
| 936 | - | for(i = 0; i < LENGTH(keys); i++) { |
|
| 937 | - | code = XKeysymToKeycode(dpy, keys[i].keysym); |
|
| 938 | - | XGrabKey(dpy, code, keys[i].mod, root, True, |
|
| 939 | - | GrabModeAsync, GrabModeAsync); |
|
| 940 | - | XGrabKey(dpy, code, keys[i].mod | LockMask, root, True, |
|
| 941 | - | GrabModeAsync, GrabModeAsync); |
|
| 942 | - | XGrabKey(dpy, code, keys[i].mod | numlockmask, root, True, |
|
| 943 | - | GrabModeAsync, GrabModeAsync); |
|
| 944 | - | XGrabKey(dpy, code, keys[i].mod | numlockmask | LockMask, root, True, |
|
| 945 | - | GrabModeAsync, GrabModeAsync); |
|
| 946 | - | } |
|
| 947 | - | return; |
|
| 948 | - | } |
|
| 949 | 953 | ev = &e->xkey; |
|
| 950 | 954 | keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0); |
|
| 951 | 955 | for(i = 0; i < LENGTH(keys); i++) |
|
| 1048 | 1052 | ||
| 1049 | 1053 | XRefreshKeyboardMapping(ev); |
|
| 1050 | 1054 | if(ev->request == MappingKeyboard) |
|
| 1051 | - | keypress(NULL); |
|
| 1055 | + | grabkeys(); |
|
| 1052 | 1056 | } |
|
| 1053 | 1057 | ||
| 1054 | 1058 | void |
|
| 1460 | 1464 | XSelectInput(dpy, root, wa.event_mask); |
|
| 1461 | 1465 | ||
| 1462 | 1466 | /* grab keys */ |
|
| 1463 | - | keypress(NULL); |
|
| 1467 | + | grabkeys(); |
|
| 1464 | 1468 | ||
| 1465 | 1469 | /* init tags */ |
|
| 1466 | 1470 | compileregs(); |
|