From b49a4553e2a9791a38ba5ad15d414253ece5c336 Mon Sep 17 00:00:00 2001 From: Nathaniel Chappelle Date: Thu, 12 Feb 2026 16:56:54 -0800 Subject: [PATCH 1/2] Adding sound support via soundcmd in config.h --- config.def.h | 2 ++ herbe.c | 14 +++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/config.def.h b/config.def.h index 86b7e76..62a158f 100644 --- a/config.def.h +++ b/config.def.h @@ -15,5 +15,7 @@ enum corners corner = TOP_RIGHT; static const unsigned int duration = 5; /* in seconds */ +static const char *soundcmd[] = { NULL }; /* NULL for no sound */ + #define DISMISS_BUTTON Button1 #define ACTION_BUTTON Button3 diff --git a/herbe.c b/herbe.c index 51d3990..8e98ab2 100644 --- a/herbe.c +++ b/herbe.c @@ -79,6 +79,16 @@ void expire(int sig) XFlush(display); } +static void playsound(void) +{ + /* Forking to avoid delay */ + if (fork() == 0) { + setsid(); + execvp(soundcmd[0], (char *const *)soundcmd); + _exit(1); + } +} + int main(int argc, char *argv[]) { if (argc == 1) @@ -171,6 +181,8 @@ int main(int argc, char *argv[]) XSelectInput(display, window, ExposureMask | ButtonPress); XMapWindow(display, window); + playsound(); + sem_t *mutex = sem_open("/herbe", O_CREAT, 0644, 1); sem_wait(mutex); @@ -217,4 +229,4 @@ int main(int argc, char *argv[]) XCloseDisplay(display); return exit_code; -} \ No newline at end of file +} From 8e9f4c1b61465cbccd2b0a81bdf18239fe3968f4 Mon Sep 17 00:00:00 2001 From: Nathaniel Chappelle Date: Fri, 20 Feb 2026 23:50:34 -0800 Subject: [PATCH 2/2] Adding early return guard to gracefully handle NULL soundcmd --- herbe.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/herbe.c b/herbe.c index 8e98ab2..06f07e3 100644 --- a/herbe.c +++ b/herbe.c @@ -80,7 +80,9 @@ void expire(int sig) } static void playsound(void) -{ +{ + if (soundcmd[0] == NULL) return; + /* Forking to avoid delay */ if (fork() == 0) { setsid();