swayidle: add ability to wait for command to finish

This commit is contained in:
Ian Fan 2019-01-07 13:22:01 +00:00
parent cab5449b1d
commit 9a6f4bc0d9
2 changed files with 18 additions and 3 deletions

View file

@ -35,6 +35,7 @@ struct swayidle_state {
struct wl_event_loop *event_loop;
list_t *timeout_cmds; // struct swayidle_timeout_cmd *
char *lock_cmd;
bool wait;
} state;
struct swayidle_timeout_cmd {
@ -54,7 +55,9 @@ static void cmd_exec(char *param) {
wlr_log(WLR_DEBUG, "Cmd exec %s", param);
pid_t pid = fork();
if (pid == 0) {
pid = fork();
if (!state.wait) {
pid = fork();
}
if (pid == 0) {
char *const cmd[] = { "sh", "-c", param, NULL, };
execvp(cmd[0], cmd);
@ -325,16 +328,20 @@ static int parse_args(int argc, char *argv[]) {
bool debug = false;
int c;
while ((c = getopt(argc, argv, "hd")) != -1) {
while ((c = getopt(argc, argv, "hdw")) != -1) {
switch (c) {
case 'd':
debug = true;
break;
case 'w':
state.wait = true;
break;
case 'h':
case '?':
printf("Usage: %s [OPTIONS]\n", argv[0]);
printf(" -d\tdebug\n");
printf(" -h\tthis help menu\n");
printf(" -d\tdebug\n");
printf(" -w\twait for command to finish\n");
return 1;
default:
return 1;

View file

@ -16,6 +16,10 @@ swayidle - Idle manager for Wayland
*-d*
Enable debug output.
*-w*
Wait for command to finish executing before continuing, helpful for ensuring
that a *before-sleep* command has finished before the system goes to sleep.
# DESCRIPTION
swayidle listens for idle activity on your Wayland compositor and executes tasks
@ -36,6 +40,10 @@ Sending SIGUSR1 to swayidle will immediately enter idle state.
If built with systemd support, executes _command_ before systemd puts the
computer to sleep.
Note: this only delays sleeping up to the limit set in *logind.conf(5)* by
the option InhibitDelayMaxSec. A command that hasn't finished by then will
continue running after resuming from sleep.
All commands are executed in a shell.
# EXAMPLE