commit - 9b45b37e8940d2b156170ef7b6b9248d5119cd00
commit + 6a492bc4c54d87f4fa8e767141d0eba9d3f12e5f
blob - 146d6dd68157d4b1dcf0a8b7383973afe5bcaf55
blob + c255f98aa4bb90f06a24b677db3ed73ad4ac32a8
--- bxhkd.c
+++ bxhkd.c
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);
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;
}
}
}
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;