aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCalvin <calvin@bastille>2014-02-08 18:18:12 -0500
committerCalvin <calvin@bastille>2014-02-08 18:18:12 -0500
commit9632263ba644fbeda183e9f92c83cfc32c76c242 (patch)
treeddce6dfe8392a88928a07b2e188bd06e46023e22
initial commit
-rw-r--r--hotkey.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/hotkey.c b/hotkey.c
new file mode 100644
index 0000000..7978baf
--- /dev/null
+++ b/hotkey.c
@@ -0,0 +1,52 @@
+#include <X11/Xlib.h>
+#include <X11/keysym.h>
+#include <X11/Xutil.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#define len(X) (sizeof X / sizeof X[0])
+
+typedef struct {
+ char *command;
+ unsigned int mod;
+ KeySym key;
+} Key;
+
+static const Key hotkeys[] = {
+ //"Command MOD Key
+ { "svte &", Mod1Mask, XK_g },
+ { "svte -e mocp &", ShiftMask|ControlMask, XK_y }
+};
+
+int main() {
+ Display* dpy = XOpenDisplay(0);
+ Window root = DefaultRootWindow(dpy);
+ unsigned int i = 0;
+
+ for(i = 0; i < len(hotkeys); i++) {
+ XGrabKey(dpy, XKeysymToKeycode(dpy,hotkeys[i].key), hotkeys[i].mod, root, False, GrabModeAsync, GrabModeAsync);
+ }
+
+ XSelectInput(dpy, root, KeyPressMask );
+ while(true) {
+ XEvent ev;
+ XNextEvent(dpy, &ev);
+
+ if(ev.type == KeyPress) {
+ //ripped out of dwm
+ XKeyEvent *kev = &ev.xkey;
+ KeySym keysym = XKeycodeToKeysym(dpy, (KeyCode)kev->keycode, 0);
+ for(i = 0; i < len(hotkeys); i++) {
+ if(keysym == hotkeys[i].key && hotkeys[i].mod == kev->state) {
+ printf("executing '%s'\n", hotkeys[i].command);
+ system(hotkeys[i].command);
+ }
+ }
+ }
+ }
+
+ XCloseDisplay(dpy);
+ return 0;
+}