commit - e79c0991d924dd894c2c5d070736e1df9198beef
commit + d3cbf80c83fcfe278fc82b7d0ee16307f08b2a19
blob - c255f98aa4bb90f06a24b677db3ed73ad4ac32a8
blob + a24563451bd6456a4376fedc96f4a636764a0d9a
--- bxhkd.c
+++ bxhkd.c
/*
- * bxhkd.c
- *
+ * bxhkd
* A very basic X hotkey daemon, a.k.a Brett's X hotkey daemon.
* See LICENSE.md and README.md for details.
*/
#include "config.h"
-/* Set macros */
+/* Macros */
#define LENGTH(arr) (sizeof(arr) / sizeof(arr[0]))
#define SOCKET_SUFFIX "/.local/tmp/bxwm.sock"
-
-/* Set global variables */
+/* Global Variables */
static Display *dpy;
static Window root;
static volatile sig_atomic_t running = 1;
-/* Set forward function declarations */
+/* Forward Declarations */
+/* Utilities */
+static void sigchld(int sig);
+static void spawn(const char *cmd);
+/* Setup & Teardown */
+static void cleanup(void);
+static void sig_term(int sig);
+/* Key Management */
static void grabkeys(void);
static void keypress(XKeyEvent *ev);
-static void spawn(const char *cmd);
static void mappingnotify(XMappingEvent *ev);
+/* Inter-Process Communication */
static void send_cmd(const char *cmd);
-static void sigchld(int sig);
-static void sig_term(int sig);
-static void cleanup(void);
int
main(void)
}
static void
+sigchld(int sig)
+{
+ (void)sig;
+ while (waitpid(-1, NULL, WNOHANG) > 0);
+}
+
+static void
+spawn(const char *cmd)
+{
+ char buf[256];
+ char *argv[64];
+ char *tok;
+ int argc = 0;
+
+ strncpy(buf, cmd, sizeof(buf) - 1);
+ buf[sizeof(buf) - 1] = '\0';
+
+ tok = strtok(buf, " ");
+ while (tok && argc < 63) {
+ argv[argc++] = tok;
+ tok = strtok(NULL, " ");
+ }
+ argv[argc] = NULL;
+
+ if (fork() == 0) {
+ if (dpy)
+ close(ConnectionNumber(dpy));
+ setsid();
+ execvp(argv[0], argv);
+ fprintf(stderr, "bxhkd: execvp %s failed\n", argv[0]);
+ _exit(EXIT_FAILURE);
+ }
+}
+
+static void
+cleanup(void)
+{
+ XUngrabKey(dpy, AnyKey, AnyModifier, root);
+ XCloseDisplay(dpy);
+}
+
+static void
+sig_term(int sig)
+{
+ (void)sig;
+ running = 0;
+}
+
+static void
grabkeys(void)
{
unsigned int i, j;
}
static void
-spawn(const char *cmd)
-{
- char buf[256];
- char *argv[64];
- char *tok;
- int argc = 0;
-
- strncpy(buf, cmd, sizeof(buf) - 1);
- buf[sizeof(buf) - 1] = '\0';
-
- tok = strtok(buf, " ");
- while (tok && argc < 63) {
- argv[argc++] = tok;
- tok = strtok(NULL, " ");
- }
- argv[argc] = NULL;
-
- if (fork() == 0) {
- if (dpy)
- close(ConnectionNumber(dpy));
- setsid();
- execvp(argv[0], argv);
- fprintf(stderr, "bxhkd: execvp %s failed\n", argv[0]);
- _exit(EXIT_FAILURE);
- }
-}
-
-static void
mappingnotify(XMappingEvent *ev)
{
XRefreshKeyboardMapping(ev);
close(sock);
}
-static void
-sigchld(int sig)
-{
- (void)sig;
- while (waitpid(-1, NULL, WNOHANG) > 0);
-}
-
-static void
-sig_term(int sig)
-{
- (void)sig;
- running = 0;
-}
-
-static void
-cleanup(void)
-{
- XUngrabKey(dpy, AnyKey, AnyModifier, root);
- XCloseDisplay(dpy);
-}
-