pause/unpause via SIGUSR1/SIGUSR2

This commit is contained in:
Sascha Kruse 2012-12-08 15:42:44 +01:00
parent d53ad1b376
commit a378aa9b19
2 changed files with 23 additions and 1 deletions

View File

@ -148,7 +148,14 @@ The progress value can be set with a hint, too.
=head1 MISCELLANEOUS =head1 MISCELLANEOUS
Dunst can be paused by sending a notification with a summary of "DUNST_COMMAND_PAUSE" Dunst can be paused by sending a notification with a summary of "DUNST_COMMAND_PAUSE"
and resumed with a summary of "DUNST_COMMAND_RESUME". and resumed with a summary of "DUNST_COMMAND_RESUME". Alternatively you can send SIGUSR1 and SIGUSR2 to pause and unpause respectivly. For Example:
=item killall -SIGUSR1 dunst # pause
=item killall -SIGUSR2 dunst # resume
=back
When paused dunst will not display any notifications but keep all notifications in a queue. When paused dunst will not display any notifications but keep all notifications in a queue.
This can for example be wrapped around a screen locker (i3lock, slock) to prevent flickering This can for example be wrapped around a screen locker (i3lock, slock) to prevent flickering
of notifications through the lock and to read all missed notifications after returning to the computer. of notifications through the lock and to read all missed notifications after returning to the computer.

15
dunst.c
View File

@ -12,6 +12,7 @@
#include <fnmatch.h> #include <fnmatch.h>
#include <sys/time.h> #include <sys/time.h>
#include <math.h> #include <math.h>
#include <signal.h>
#include <X11/Xlib.h> #include <X11/Xlib.h>
#include <X11/XKBlib.h> #include <X11/XKBlib.h>
#include <X11/Xatom.h> #include <X11/Xatom.h>
@ -108,6 +109,18 @@ void warn(const char *text, int urg);
void init_shortcut(keyboard_shortcut * shortcut); void init_shortcut(keyboard_shortcut * shortcut);
KeySym string_to_mask(char *str); KeySym string_to_mask(char *str);
void pause_signal_handler(int sig)
{
if (sig == SIGUSR1) {
pause_display = true;
}
if (sig == SIGUSR2) {
pause_display = false;
}
signal (sig, pause_signal_handler);
}
static void print_notification(notification * n) static void print_notification(notification * n)
{ {
printf("{\n"); printf("{\n");
@ -1714,6 +1727,8 @@ int main(int argc, char *argv[])
initdbus(); initdbus();
setup(); setup();
signal (SIGUSR1, pause_signal_handler);
signal (SIGUSR2, pause_signal_handler);
if (deprecated_mod) if (deprecated_mod)
warn("-mod is deprecated. Use \"-key mod+key\" instead\n", warn("-mod is deprecated. Use \"-key mod+key\" instead\n",