Add sandman
parent
908b834c1a
commit
deec27410a
|
@ -1,2 +1,4 @@
|
||||||
LIBRESSL_PREFIX = /usr/local/opt/libressl
|
LIBRESSL_PREFIX = /usr/local/opt/libressl
|
||||||
LDLIBS = -lcurses -ltls
|
LDLIBS = -lcurses -ltls -framework Cocoa
|
||||||
|
BINS += sandman
|
||||||
|
MANS += sandman.1
|
||||||
|
|
17
Makefile
17
Makefile
|
@ -9,6 +9,9 @@ CFLAGS += -I$(LIBRESSL_PREFIX)/include
|
||||||
LDFLAGS += -L$(LIBRESSL_PREFIX)/lib
|
LDFLAGS += -L$(LIBRESSL_PREFIX)/lib
|
||||||
LDLIBS = -lcursesw -ltls
|
LDLIBS = -lcursesw -ltls
|
||||||
|
|
||||||
|
BINS = catgirl
|
||||||
|
MANS = catgirl.1
|
||||||
|
|
||||||
-include config.mk
|
-include config.mk
|
||||||
|
|
||||||
OBJS += chat.o
|
OBJS += chat.o
|
||||||
|
@ -29,7 +32,7 @@ OBJS += url.o
|
||||||
TESTS += format.t
|
TESTS += format.t
|
||||||
TESTS += term.t
|
TESTS += term.t
|
||||||
|
|
||||||
all: tags catgirl test
|
all: tags $(BINS) test
|
||||||
|
|
||||||
$(OBJS): chat.h
|
$(OBJS): chat.h
|
||||||
|
|
||||||
|
@ -47,14 +50,14 @@ test: $(TESTS)
|
||||||
tags: *.h *.c
|
tags: *.h *.c
|
||||||
ctags -w *.h *.c
|
ctags -w *.h *.c
|
||||||
|
|
||||||
install: catgirl catgirl.1
|
install: $(BINS) $(MANS)
|
||||||
install -d $(PREFIX)/bin $(MANDIR)1
|
install -d $(PREFIX)/bin $(MANDIR)1
|
||||||
install catgirl $(PREFIX)/bin/catgirl
|
install $(BINS) $(PREFIX)/bin
|
||||||
install -m 644 catgirl.1 $(MANDIR)1/catgirl.1
|
install -m 644 $(MANS) $(MANDIR)1
|
||||||
|
|
||||||
uninstall:
|
uninstall:
|
||||||
rm -f $(PREFIX)/bin/catgirl
|
rm -f $(BINS:%=$(PREFIX)/bin/%)
|
||||||
rm -f $(MANDIR)1/catgirl.1
|
rm -f $(MAN:%=%(MANDIR)1/%)
|
||||||
|
|
||||||
chroot.tar: catgirl catgirl.1 man.sh
|
chroot.tar: catgirl catgirl.1 man.sh
|
||||||
install -d -o root -g wheel \
|
install -d -o root -g wheel \
|
||||||
|
@ -92,7 +95,7 @@ install-chroot: chroot.tar
|
||||||
tar -xf chroot.tar -C /home/$(CHROOT_USER)
|
tar -xf chroot.tar -C /home/$(CHROOT_USER)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -fr $(OBJS) catgirl $(TESTS) tags root chroot.tar
|
rm -fr $(OBJS) $(BINS) $(TESTS) tags root chroot.tar
|
||||||
|
|
||||||
README: catgirl.7
|
README: catgirl.7
|
||||||
mandoc catgirl.7 | col -bx > README
|
mandoc catgirl.7 | col -bx > README
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
.Dd November 30, 2018
|
||||||
|
.Dt SANDMAN 1
|
||||||
|
.Os "Causal Agency"
|
||||||
|
.
|
||||||
|
.Sh NAME
|
||||||
|
.Nm sandman
|
||||||
|
.Nd signal sleep
|
||||||
|
.
|
||||||
|
.Sh SYNOPSIS
|
||||||
|
.Nm
|
||||||
|
.Ar command ...
|
||||||
|
.
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
.Nm
|
||||||
|
is a utility for Darwin systems.
|
||||||
|
.Nm
|
||||||
|
runs the
|
||||||
|
.Ar command
|
||||||
|
in a child process
|
||||||
|
and sends it
|
||||||
|
.Dv SIGTSTP
|
||||||
|
and
|
||||||
|
.Dv SIGCONT
|
||||||
|
signals
|
||||||
|
when the computer goes to sleep
|
||||||
|
and wakes from sleep,
|
||||||
|
respectively.
|
||||||
|
.
|
||||||
|
.Sh EXIT STATUS
|
||||||
|
.Nm
|
||||||
|
exits with the exit status of the child process.
|
||||||
|
.
|
||||||
|
.Sh SEE ALSO
|
||||||
|
.Xr signal 3
|
|
@ -0,0 +1,72 @@
|
||||||
|
/* Copyright (C) 2018 Curtis McEnroe <june@causal.agency>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
#import <err.h>
|
||||||
|
#import <signal.h>
|
||||||
|
#import <stdlib.h>
|
||||||
|
#import <sysexits.h>
|
||||||
|
#import <unistd.h>
|
||||||
|
|
||||||
|
void sigchld(int sig) {
|
||||||
|
(void)sig;
|
||||||
|
int status;
|
||||||
|
pid_t pid = wait(&status);
|
||||||
|
if (pid < 0) err(EX_OSERR, "wait");
|
||||||
|
if (WIFSIGNALED(status)) {
|
||||||
|
_exit(128 + WTERMSIG(status));
|
||||||
|
} else {
|
||||||
|
_exit(WEXITSTATUS(status));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
if (argc < 2) return EX_USAGE;
|
||||||
|
|
||||||
|
signal(SIGCHLD, sigchld);
|
||||||
|
|
||||||
|
pid_t pid = fork();
|
||||||
|
if (pid < 0) err(EX_OSERR, "fork");
|
||||||
|
|
||||||
|
if (!pid) {
|
||||||
|
execvp(argv[1], &argv[1]);
|
||||||
|
err(EX_NOINPUT, "%s", argv[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
NSWorkspace *workspace = [NSWorkspace sharedWorkspace];
|
||||||
|
NSNotificationCenter *center = [workspace notificationCenter];
|
||||||
|
NSOperationQueue *main = [NSOperationQueue mainQueue];
|
||||||
|
|
||||||
|
[center addObserverForName:NSWorkspaceWillSleepNotification
|
||||||
|
object:nil
|
||||||
|
queue:main
|
||||||
|
usingBlock:^(NSNotification *note) {
|
||||||
|
(void)note;
|
||||||
|
int error = kill(pid, SIGTSTP);
|
||||||
|
if (error) err(EX_UNAVAILABLE, "kill %d", pid);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[center addObserverForName:NSWorkspaceDidWakeNotification
|
||||||
|
object:nil
|
||||||
|
queue:main
|
||||||
|
usingBlock:^(NSNotification *note) {
|
||||||
|
(void)note;
|
||||||
|
int error = kill(pid, SIGCONT);
|
||||||
|
if (error) err(EX_UNAVAILABLE, "kill %d", pid);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[[NSApplication sharedApplication] run];
|
||||||
|
}
|
Loading…
Reference in New Issue