aboutsummaryrefslogtreecommitdiff
path: root/daemonic.c
diff options
context:
space:
mode:
Diffstat (limited to 'daemonic.c')
-rw-r--r--daemonic.c35
1 files changed, 20 insertions, 15 deletions
diff --git a/daemonic.c b/daemonic.c
index b025224..c70996a 100644
--- a/daemonic.c
+++ b/daemonic.c
@@ -10,19 +10,15 @@ typedef struct Key {
#include "config.h"
-#define LENGTH(X) (sizeof X / sizeof X[0])
+#define LENGTH(X) (sizeof X / sizeof X[0])
+#define CLEANMASK(mask) (mask & ~LockMask & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask))
-void
-bind_key(Display *dpy, Window win, unsigned int mod, KeySym key)
-{
+void bind_key(Display *dpy, Window win, unsigned int mod, KeySym key) {
int keycode = XKeysymToKeycode(dpy, key);
-
XGrabKey(dpy, keycode, mod, win, False, GrabModeAsync, GrabModeAsync);
}
-int
-error_handler(Display *disp, XErrorEvent *xe)
-{
+int error_handler(Display *disp, XErrorEvent *xe) {
if (xe->error_code == BadAccess) {
printf("daemonic: [BadAccess] Cant grab key binding. Already grabbed\n");
return 0;
@@ -32,17 +28,27 @@ error_handler(Display *disp, XErrorEvent *xe)
return 1;
}
-int
-main()
-{
- int running = 10;
+void keypress(Display *dpy, XKeyEvent *ev) {
+ unsigned int i;
+ KeySym keysym = XKeycodeToKeysym(dpy, (KeyCode) ev->keycode, 0);
+
+ for (i = 0; i < LENGTH(keys); i++) {
+ if (keysym == keys[i].key && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state) && keys[i].command) {
+ printf("Executin: %s\n", keys[i].command);
+ }
+ }
+}
+
+int main() {
XSetErrorHandler(error_handler);
+ int running = 10;
+ int i;
+
Display *dpy = XOpenDisplay(0);
Window root = DefaultRootWindow(dpy);
// Grab keys
- int i;
for (i = 0; i < LENGTH(keys); i++) {
bind_key(dpy, root, keys[i].mod, keys[i].key);
}
@@ -54,8 +60,7 @@ main()
XSync(dpy, False);
while (running && !XNextEvent(dpy, &ev)) {
if (ev.type == KeyPress) {
- printf("Key: %d\n", ev.xkey.keycode);
-
+ keypress(dpy, &ev.xkey);
running--;
}
}