about summary refs log tree commit diff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--event.c4
-rw-r--r--sandman.112
-rw-r--r--sandman.m14
3 files changed, 8 insertions, 22 deletions
diff --git a/event.c b/event.c
index 444e7df..4ea9f81 100644
--- a/event.c
+++ b/event.c
@@ -120,6 +120,7 @@ noreturn void eventLoop(void) {
 	};
 	sigaction(SIGCHLD, &action, NULL);
 	sigaction(SIGINT, &action, NULL);
+	sigaction(SIGHUP, &action, NULL);
 
 	struct sigaction curses;
 	sigaction(SIGWINCH, &action, &curses);
@@ -130,6 +131,7 @@ noreturn void eventLoop(void) {
 
 	for (;;) {
 		if (sig[SIGCHLD]) childWait();
+		if (sig[SIGHUP]) ircFmt("QUIT :zzz\r\n");
 		if (sig[SIGINT]) {
 			signal(SIGINT, SIG_DFL);
 			ircFmt("QUIT :Goodbye\r\n");
@@ -139,7 +141,7 @@ noreturn void eventLoop(void) {
 			uiRead();
 			uiDraw();
 		}
-		sig[SIGCHLD] = sig[SIGINT] = sig[SIGWINCH] = 0;
+		sig[SIGCHLD] = sig[SIGHUP] = sig[SIGINT] = sig[SIGWINCH] = 0;
 
 		struct pollfd fds[3] = {
 			{ .events = POLLIN, .fd = irc },
diff --git a/sandman.1 b/sandman.1
index 0f6606b..2cdd70b 100644
--- a/sandman.1
+++ b/sandman.1
@@ -16,14 +16,10 @@ is a utility for Darwin systems.
 It runs the
 .Ar command
 as a child process
-and sends it
-.Dv SIGTSTP
-and
-.Dv SIGCONT
-signals
-when the system goes to sleep
-and wakes from sleep,
-respectively.
+and sends it the
+.Dv SIGHUP
+signal
+when the system goes to sleep.
 .
 .Sh EXIT STATUS
 .Nm
diff --git a/sandman.m b/sandman.m
index e8163c0..cc8bcc9 100644
--- a/sandman.m
+++ b/sandman.m
@@ -59,19 +59,7 @@ int main(int argc, char *argv[]) {
 		queue: nil
 		usingBlock: ^(NSNotification *note) {
 			(void)note;
-			int error = kill(pid, SIGTSTP);
-			if (error) err(EX_UNAVAILABLE, "kill %d", pid);
-		}
-	];
-	
-	[
-		[[NSWorkspace sharedWorkspace] notificationCenter]
-		addObserverForName: NSWorkspaceDidWakeNotification
-		object: nil
-		queue: nil
-		usingBlock: ^(NSNotification *note) {
-			(void)note;
-			int error = kill(pid, SIGCONT);
+			int error = kill(pid, SIGHUP);
 			if (error) err(EX_UNAVAILABLE, "kill %d", pid);
 		}
 	];