xf86ctrl

mplay control using xf86 media keys
git clone https://git.sinitax.com/sinitax/xf86ctrl
Log | Files | Refs | LICENSE | sfeed.txt

commit 7007d28f6ae3bf45e590899a14dee23dbec22ac4
parent e1b59a3b00b1be504f5e08a88b4cfb9cbe89427c
Author: Louis Burda <quent.burda@gmail.com>
Date:   Sun,  7 Apr 2024 23:39:16 +0200

Small touchups

Diffstat:
Mmain.c | 35++++++++++++++++-------------------
1 file changed, 16 insertions(+), 19 deletions(-)

diff --git a/main.c b/main.c @@ -20,7 +20,10 @@ static pid_t child_pid = -1; static int child_fd = -1; -static FILE *child_file = NULL; +static FILE *child_io = NULL; + +static const char *play_arg = "-p"; +static bool ptty = false; static void die(const char *fmt, ...) @@ -46,7 +49,6 @@ child_exit(int sig) { int status, rc; - printf("%i\n", sig); do { rc = waitpid(child_pid, &status, 0); if (rc < 0 && errno == ECHILD) exit(123); @@ -61,7 +63,7 @@ child_exit(int sig) int main(int argc, char **argv) { - char **arg, *play_arg; + char **arg; struct termios childterm; struct winsize ws; int child_pipe[2]; @@ -70,10 +72,7 @@ main(int argc, char **argv) Window win; XEvent e; KeySym key; - bool ptty; - ptty = false; - play_arg = "p"; for (arg = argv + 1; *arg && strcmp(*arg, "--"); arg++) { if (!strcmp(*arg, "-h") || !strcmp(*arg, "--help")) { *arg = NULL; @@ -87,15 +86,16 @@ main(int argc, char **argv) } } if (!*arg) { - fprintf(stderr, "Usage: xf86ctrl [-p] CMD [ARGS..]\n"); + fprintf(stderr, "Usage: xf86ctrl [-p PLAY] [-t] CMD [ARGS..]\n"); return 1; } + signal(SIGCHLD, child_exit); + if (ptty) { cfmakeraw(&childterm); ws.ws_col = 80; ws.ws_row = 40; - signal(SIGCHLD, child_exit); child_pid = forkpty(&child_fd, NULL, &childterm, &ws); if (child_pid < 0) die("forkpty:"); if (!child_pid) { @@ -105,12 +105,12 @@ main(int argc, char **argv) } } else { pipe(child_pipe); - signal(SIGCHLD, child_exit); child_pid = fork(); if (child_pid < 0) die("fork:"); if (!child_pid) { signal(SIGCHLD, SIG_DFL); - close(0); + close(1); + close(2); dup2(child_pipe[0], 0); close(child_pipe[1]); close(child_pipe[0]); @@ -121,13 +121,15 @@ main(int argc, char **argv) close(child_pipe[0]); } - child_file = fdopen(child_fd, "w"); - if (!child_file) die("fdopen:"); + child_io = fdopen(child_fd, "w"); + if (!child_io) die("fdopen:"); d = XOpenDisplay(NULL); if (!d) die("XOpenDisplay(NULL)"); win = DefaultRootWindow(d); + if (!win) die("XDefaultRootWindow no result"); + XGrabKey(d, XKeysymToKeycode(d, XF86XK_AudioNext), 0, win, False, GrabModeAsync, GrabModeAsync); XGrabKey(d, XKeysymToKeycode(d, XF86XK_AudioPlay), 0, @@ -143,19 +145,14 @@ main(int argc, char **argv) case XF86XK_AudioNext: goto exit; case XF86XK_AudioPlay: - nwrite = fputs(play_arg, child_file); + nwrite = fputs(play_arg, child_io); if (nwrite != strlen(play_arg)) goto exit; - fflush(child_file); + fflush(child_io); break; } } } exit: - signal(SIGCHLD, SIG_DFL); - XCloseDisplay(d); - - kill(child_pid, SIGTERM); - child_exit(0); }