diff --git a/i3status.c b/i3status.c index 503f763..87a793b 100644 --- a/i3status.c +++ b/i3status.c @@ -57,6 +57,14 @@ void sigpipe(int signum) { exit(1); } +/* + * Do nothing upon SIGUSR1. Running this signal handler will nevertheless + * interrupt nanosleep() so that i3status immediately generates new output. + * + */ +void sigusr1(int signum) { +} + /* * Checks if the given path exists by calling stat(). * @@ -305,6 +313,10 @@ int main(int argc, char *argv[]) { action.sa_handler = sigpipe; sigaction(SIGPIPE, &action, NULL); + memset(&action, 0, sizeof(struct sigaction)); + action.sa_handler = sigusr1; + sigaction(SIGUSR1, &action, NULL); + if (setlocale(LC_ALL, "") == NULL) die("Could not set locale. Please make sure all your LC_* / LANG settings are correct."); diff --git a/man/i3status.man b/man/i3status.man index c14d8d2..3f7a924 100644 --- a/man/i3status.man +++ b/man/i3status.man @@ -378,6 +378,12 @@ Note that if you want to use the JSON output format (with colors in i3bar), you need to use a slightly more complex wrapper script. There are examples in the contrib/ folder, see http://code.i3wm.org/i3status/tree/contrib +== SIGNALS + +When receiving +SIGUSR1+, i3status’s nanosleep() will be interrupted and thus +you will force an update. You can use killall -USR1 i3status to force an update +after changing the system volume, for example. + == SEE ALSO +strftime(3)+, +date(1)+, +glob(3)+, +dzen2(1)+, +xmobar(1)+