Commit Diff


commit - 9b45b37e8940d2b156170ef7b6b9248d5119cd00
commit + 6a492bc4c54d87f4fa8e767141d0eba9d3f12e5f
blob - 146d6dd68157d4b1dcf0a8b7383973afe5bcaf55
blob + c255f98aa4bb90f06a24b677db3ed73ad4ac32a8
--- bxhkd.c
+++ bxhkd.c
@@ -33,7 +33,7 @@ static void grabkeys(void);
 static void keypress(XKeyEvent *ev);
 static void spawn(const char *cmd);
 static void mappingnotify(XMappingEvent *ev);
-static void send_cmd(char *cmd); 
+static void send_cmd(const char *cmd); 
 static void sigchld(int sig);
 static void sig_term(int sig);
 static void cleanup(void);
@@ -88,14 +88,16 @@ grabkeys(void)
 static void
 keypress(XKeyEvent *ev)
 {
-    KeySym keysym;
-    unsigned int i;
+    KeySym keysym = XLookupKeysym(ev, 0);
 
-    keysym = XLookupKeysym(ev, 0);
-    for (i = 0; i < LENGTH(keys); i++) {
-        if (keysym == keys[i].keysym
-            && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state)) {
-            spawn(keys[i].command);
+    for (size_t i = 0; i < LENGTH(keys); i++) {
+        if (keysym == keys[i].keysym && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state)) {
+            // 1. Handle local commands
+            if (keys[i].local)
+                spawn(keys[i].command);
+            // 2. Otherwise, send to bxwm via socket
+            else
+                send_cmd(keys[i].command);
             return;
         }
     }
@@ -138,13 +140,16 @@ mappingnotify(XMappingEvent *ev)
 }
 
 static void
-send_cmd(char *cmd) {
+send_cmd(const char *cmd) {
     int sock;
     struct sockaddr_un addr;
     char *home = getenv("HOME");
+
+    if (!home) return;
+
     char path[256];
 
-    snprintf(path, sizeof(path), "%s%s", home, "/.local/tmp/bxwm.sock");
+    snprintf(path, sizeof(path), "%s%s", home, SOCKET_SUFFIX);
 
     if ((sock = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) return;