14 #include "dwm.h" |
14 #include "dwm.h" |
15 |
15 |
16 #define ButtonMask (ButtonPressMask | ButtonReleaseMask) |
16 #define ButtonMask (ButtonPressMask | ButtonReleaseMask) |
17 #define MouseMask (ButtonMask | PointerMotionMask) |
17 #define MouseMask (ButtonMask | PointerMotionMask) |
18 |
18 |
|
19 /********** CUSTOMIZE **********/ |
|
20 |
|
21 const char *term[] = { |
|
22 "urxvtc", "-tr", "+sb", "-bg", "black", "-fg", "white", "-fn", |
|
23 "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*",NULL |
|
24 }; |
|
25 const char *browse[] = { "firefox", NULL }; |
|
26 const char *xlock[] = { "xlock", NULL }; |
|
27 |
|
28 Key key[] = { |
|
29 /* modifier key function arguments */ |
|
30 { Mod1Mask, XK_Return, zoom, { 0 } }, |
|
31 { Mod1Mask, XK_k, focusprev, { 0 } }, |
|
32 { Mod1Mask, XK_j, focusnext, { 0 } }, |
|
33 { Mod1Mask, XK_m, maximize, { 0 } }, |
|
34 { Mod1Mask, XK_0, view, { .i = Tscratch } }, |
|
35 { Mod1Mask, XK_1, view, { .i = Tdev } }, |
|
36 { Mod1Mask, XK_2, view, { .i = Twww } }, |
|
37 { Mod1Mask, XK_3, view, { .i = Twork } }, |
|
38 { Mod1Mask, XK_space, dotile, { 0 } }, |
|
39 { Mod1Mask|ShiftMask, XK_space, dofloat, { 0 } }, |
|
40 { Mod1Mask|ShiftMask, XK_0, replacetag, { .i = Tscratch } }, |
|
41 { Mod1Mask|ShiftMask, XK_1, replacetag, { .i = Tdev } }, |
|
42 { Mod1Mask|ShiftMask, XK_2, replacetag, { .i = Twww } }, |
|
43 { Mod1Mask|ShiftMask, XK_3, replacetag, { .i = Twork } }, |
|
44 { Mod1Mask|ShiftMask, XK_c, killclient, { 0 } }, |
|
45 { Mod1Mask|ShiftMask, XK_q, quit, { 0 } }, |
|
46 { Mod1Mask|ShiftMask, XK_Return, spawn, { .argv = term } }, |
|
47 { Mod1Mask|ShiftMask, XK_w, spawn, { .argv = browse } }, |
|
48 { Mod1Mask|ShiftMask, XK_l, spawn, { .argv = xlock } }, |
|
49 { ControlMask, XK_0, appendtag, { .i = Tscratch } }, |
|
50 { ControlMask, XK_1, appendtag, { .i = Tdev } }, |
|
51 { ControlMask, XK_2, appendtag, { .i = Twww } }, |
|
52 { ControlMask, XK_3, appendtag, { .i = Twork } }, |
|
53 }; |
|
54 |
|
55 /********** CUSTOMIZE **********/ |
|
56 |
19 /* local functions */ |
57 /* local functions */ |
20 static void buttonpress(XEvent *e); |
58 static void buttonpress(XEvent *e); |
21 static void configurerequest(XEvent *e); |
59 static void configurerequest(XEvent *e); |
22 static void destroynotify(XEvent *e); |
60 static void destroynotify(XEvent *e); |
23 static void enternotify(XEvent *e); |
61 static void enternotify(XEvent *e); |
24 static void leavenotify(XEvent *e); |
62 static void leavenotify(XEvent *e); |
25 static void expose(XEvent *e); |
63 static void expose(XEvent *e); |
|
64 static void keypress(XEvent *e); |
26 static void maprequest(XEvent *e); |
65 static void maprequest(XEvent *e); |
27 static void propertynotify(XEvent *e); |
66 static void propertynotify(XEvent *e); |
28 static void unmapnotify(XEvent *e); |
67 static void unmapnotify(XEvent *e); |
29 |
68 |
30 void (*handler[LASTEvent]) (XEvent *) = { |
69 void (*handler[LASTEvent]) (XEvent *) = { |
38 [MapRequest] = maprequest, |
77 [MapRequest] = maprequest, |
39 [PropertyNotify] = propertynotify, |
78 [PropertyNotify] = propertynotify, |
40 [UnmapNotify] = unmapnotify |
79 [UnmapNotify] = unmapnotify |
41 }; |
80 }; |
42 |
81 |
43 static void |
82 void |
44 mresize(Client *c) |
83 grabkeys() |
|
84 { |
|
85 static unsigned int len = key ? sizeof(key) / sizeof(key[0]) : 0; |
|
86 unsigned int i; |
|
87 KeyCode code; |
|
88 |
|
89 for(i = 0; i < len; i++) { |
|
90 code = XKeysymToKeycode(dpy, key[i].keysym); |
|
91 XUngrabKey(dpy, code, key[i].mod, root); |
|
92 XGrabKey(dpy, code, key[i].mod, root, True, |
|
93 GrabModeAsync, GrabModeAsync); |
|
94 } |
|
95 } |
|
96 |
|
97 static void |
|
98 keypress(XEvent *e) |
|
99 { |
|
100 XKeyEvent *ev = &e->xkey; |
|
101 static unsigned int len = key ? sizeof(key) / sizeof(key[0]) : 0; |
|
102 unsigned int i; |
|
103 KeySym keysym; |
|
104 |
|
105 keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0); |
|
106 for(i = 0; i < len; i++) |
|
107 if((keysym == key[i].keysym) && (key[i].mod == ev->state)) { |
|
108 if(key[i].func) |
|
109 key[i].func(&key[i].arg); |
|
110 return; |
|
111 } |
|
112 } |
|
113 |
|
114 static void |
|
115 resizemouse(Client *c) |
45 { |
116 { |
46 XEvent ev; |
117 XEvent ev; |
47 int ocx, ocy; |
118 int ocx, ocy; |
48 |
119 |
49 ocx = c->x; |
120 ocx = c->x; |