commit 6a492bc4c54d87f4fa8e767141d0eba9d3f12e5f from: Brett Fisher date: Fri May 15 06:20:26 2026 UTC bxhkd.c: Implement command dispatch and harden socket logic. - Add dispatch logic in keypress() to route local commands to spawn() and socket commands to send_cmd(), using the local flag from theHotkey struct. - Fix -Wsign-compare warning by changing loop variable to size_t. - Add NULL check on getenv("HOME") in send_cmd(). - Mark send_cmd parameter as const. - Replace hardcoded socket path with SOCKET_SUFFIX macro. 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;