18 }; |
18 }; |
19 const char *browse[] = { "firefox", NULL }; |
19 const char *browse[] = { "firefox", NULL }; |
20 const char *xlock[] = { "xlock", NULL }; |
20 const char *xlock[] = { "xlock", NULL }; |
21 |
21 |
22 static Key key[] = { |
22 static Key key[] = { |
23 { Mod1Mask, XK_Return, zoom, { 0 } }, |
23 { Mod1Mask, XK_Return, spawn, { .argv = term } }, |
24 { Mod1Mask, XK_t, spawn, { .argv = term } }, |
|
25 { Mod1Mask, XK_w, spawn, { .argv = browse } }, |
24 { Mod1Mask, XK_w, spawn, { .argv = browse } }, |
26 { Mod1Mask, XK_l, spawn, { .argv = xlock } }, |
25 { Mod1Mask, XK_l, spawn, { .argv = xlock } }, |
27 { Mod1Mask, XK_k, prevc, { 0 } }, |
26 { Mod1Mask, XK_k, prevc, { 0 } }, |
28 { Mod1Mask, XK_j, nextc, { 0 } }, |
27 { Mod1Mask, XK_j, nextc, { 0 } }, |
29 { Mod1Mask, XK_m, max, { 0 } }, |
28 { Mod1Mask, XK_m, max, { 0 } }, |
31 { Mod1Mask, XK_1, view, { .i = Tdev } }, |
30 { Mod1Mask, XK_1, view, { .i = Tdev } }, |
32 { Mod1Mask, XK_2, view, { .i = Tirc } }, |
31 { Mod1Mask, XK_2, view, { .i = Tirc } }, |
33 { Mod1Mask, XK_3, view, { .i = Twww } }, |
32 { Mod1Mask, XK_3, view, { .i = Twww } }, |
34 { Mod1Mask, XK_4, view, { .i = Twork } }, |
33 { Mod1Mask, XK_4, view, { .i = Twork } }, |
35 { Mod1Mask, XK_space, tiling, { 0 } }, |
34 { Mod1Mask, XK_space, tiling, { 0 } }, |
|
35 { Mod1Mask | ShiftMask, XK_Return, zoom, { 0 } }, |
36 { Mod1Mask | ShiftMask, XK_space, floating, { 0 } }, |
36 { Mod1Mask | ShiftMask, XK_space, floating, { 0 } }, |
37 { Mod1Mask | ShiftMask, XK_0, tag, { .i = Tscratch } }, |
37 { Mod1Mask | ShiftMask, XK_0, tag, { .i = Tscratch } }, |
38 { Mod1Mask | ShiftMask, XK_1, tag, { .i = Tdev } }, |
38 { Mod1Mask | ShiftMask, XK_1, tag, { .i = Tdev } }, |
39 { Mod1Mask | ShiftMask, XK_2, tag, { .i = Tirc } }, |
39 { Mod1Mask | ShiftMask, XK_2, tag, { .i = Tirc } }, |
40 { Mod1Mask | ShiftMask, XK_3, tag, { .i = Twww } }, |
40 { Mod1Mask | ShiftMask, XK_3, tag, { .i = Twww } }, |
46 /********** CUSTOMIZE **********/ |
46 /********** CUSTOMIZE **********/ |
47 |
47 |
48 void |
48 void |
49 update_keys(void) |
49 update_keys(void) |
50 { |
50 { |
51 unsigned int i, len; |
51 static unsigned int len = key ? sizeof(key) / sizeof(key[0]) : 0; |
|
52 unsigned int i; |
52 KeyCode code; |
53 KeyCode code; |
53 |
54 |
54 len = sizeof(key) / sizeof(key[0]); |
|
55 for(i = 0; i < len; i++) { |
55 for(i = 0; i < len; i++) { |
56 code = XKeysymToKeycode(dpy, key[i].keysym); |
56 code = XKeysymToKeycode(dpy, key[i].keysym); |
57 XUngrabKey(dpy, code, key[i].mod, root); |
57 XUngrabKey(dpy, code, key[i].mod, root); |
58 XGrabKey(dpy, code, key[i].mod, root, True, GrabModeAsync, GrabModeAsync); |
58 XGrabKey(dpy, code, key[i].mod, root, True, GrabModeAsync, GrabModeAsync); |
59 } |
59 } |
61 |
61 |
62 void |
62 void |
63 keypress(XEvent *e) |
63 keypress(XEvent *e) |
64 { |
64 { |
65 XKeyEvent *ev = &e->xkey; |
65 XKeyEvent *ev = &e->xkey; |
66 unsigned int i, len; |
66 static unsigned int len = key ? sizeof(key) / sizeof(key[0]) : 0; |
|
67 unsigned int i; |
67 KeySym keysym; |
68 KeySym keysym; |
68 |
69 |
69 keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0); |
70 keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0); |
70 len = sizeof(key) / sizeof(key[0]); |
|
71 for(i = 0; i < len; i++) |
71 for(i = 0; i < len; i++) |
72 if((keysym == key[i].keysym) && (key[i].mod == ev->state)) { |
72 if((keysym == key[i].keysym) && (key[i].mod == ev->state)) { |
73 if(key[i].func) |
73 if(key[i].func) |
74 key[i].func(&key[i].arg); |
74 key[i].func(&key[i].arg); |
75 return; |
75 return; |