swaynag: allow specifying more buttons which execute and dismiss
I don't love -z / -Z, but I figure this patch is far from being accepted for other reasons too.
This commit is contained in:
parent
ce494a5811
commit
a974300652
|
@ -53,6 +53,7 @@ struct swaynag_button {
|
||||||
int width;
|
int width;
|
||||||
int height;
|
int height;
|
||||||
bool terminal;
|
bool terminal;
|
||||||
|
bool dismiss;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct swaynag_details {
|
struct swaynag_details {
|
||||||
|
|
|
@ -52,6 +52,8 @@ int swaynag_parse_options(int argc, char **argv, struct swaynag *swaynag,
|
||||||
static struct option opts[] = {
|
static struct option opts[] = {
|
||||||
{"button", required_argument, NULL, 'b'},
|
{"button", required_argument, NULL, 'b'},
|
||||||
{"button-no-terminal", required_argument, NULL, 'B'},
|
{"button-no-terminal", required_argument, NULL, 'B'},
|
||||||
|
{"button-dismiss", required_argument, NULL, 'z'},
|
||||||
|
{"button-dismiss-no-terminal", required_argument, NULL, 'Z'},
|
||||||
{"config", required_argument, NULL, 'c'},
|
{"config", required_argument, NULL, 'c'},
|
||||||
{"debug", no_argument, NULL, 'd'},
|
{"debug", no_argument, NULL, 'd'},
|
||||||
{"edge", required_argument, NULL, 'e'},
|
{"edge", required_argument, NULL, 'e'},
|
||||||
|
@ -90,6 +92,11 @@ int swaynag_parse_options(int argc, char **argv, struct swaynag *swaynag,
|
||||||
"be defined.\n"
|
"be defined.\n"
|
||||||
" -B, --button-no-terminal <text> <action> Like --button, but does"
|
" -B, --button-no-terminal <text> <action> Like --button, but does"
|
||||||
"not run the action in a terminal.\n"
|
"not run the action in a terminal.\n"
|
||||||
|
" -z, --button-dismiss <text> <action> Create a button with text that "
|
||||||
|
"dismisses swaynag, and executes action in a terminal when pressed. "
|
||||||
|
"Multiple buttons can be defined.\n"
|
||||||
|
" -Z, --button-dismiss-no-terminal <text> <action> Like "
|
||||||
|
"--button-dismiss, but does not run the action in a terminal.\n"
|
||||||
" -c, --config <path> Path to config file.\n"
|
" -c, --config <path> Path to config file.\n"
|
||||||
" -d, --debug Enable debugging.\n"
|
" -d, --debug Enable debugging.\n"
|
||||||
" -e, --edge top|bottom Set the edge to use.\n"
|
" -e, --edge top|bottom Set the edge to use.\n"
|
||||||
|
@ -120,13 +127,15 @@ int swaynag_parse_options(int argc, char **argv, struct swaynag *swaynag,
|
||||||
|
|
||||||
optind = 1;
|
optind = 1;
|
||||||
while (1) {
|
while (1) {
|
||||||
int c = getopt_long(argc, argv, "b:B:c:de:f:hlL:m:o:s:t:v", opts, NULL);
|
int c = getopt_long(argc, argv, "b:B:z:Z:c:de:f:hlL:m:o:s:t:v", opts, NULL);
|
||||||
if (c == -1) {
|
if (c == -1) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case 'b': // Button
|
case 'b': // Button
|
||||||
case 'B': // Button (No Terminal)
|
case 'B': // Button (No Terminal)
|
||||||
|
case 'z': // Button (Dismiss)
|
||||||
|
case 'Z': // Button (Dismiss, No Terminal)
|
||||||
if (swaynag) {
|
if (swaynag) {
|
||||||
if (optind >= argc) {
|
if (optind >= argc) {
|
||||||
fprintf(stderr, "Missing action for button %s\n", optarg);
|
fprintf(stderr, "Missing action for button %s\n", optarg);
|
||||||
|
@ -138,6 +147,7 @@ int swaynag_parse_options(int argc, char **argv, struct swaynag *swaynag,
|
||||||
button->type = SWAYNAG_ACTION_COMMAND;
|
button->type = SWAYNAG_ACTION_COMMAND;
|
||||||
button->action = strdup(argv[optind]);
|
button->action = strdup(argv[optind]);
|
||||||
button->terminal = c == 'b';
|
button->terminal = c == 'b';
|
||||||
|
button->dismiss = c == 'z' || c == 'Z';
|
||||||
list_add(swaynag->buttons, button);
|
list_add(swaynag->buttons, button);
|
||||||
}
|
}
|
||||||
optind++;
|
optind++;
|
||||||
|
|
|
@ -21,6 +21,19 @@ _swaynag_ [options...]
|
||||||
_action_ will be run directly instead of in a terminal. Multiple buttons
|
_action_ will be run directly instead of in a terminal. Multiple buttons
|
||||||
can be defined by providing the flag multiple times.
|
can be defined by providing the flag multiple times.
|
||||||
|
|
||||||
|
*-z, --button-dismiss* <text> <action>
|
||||||
|
Create a button with the text _text_ that executes _action_ when pressed,
|
||||||
|
and dismisses swaynag. If the environment variable _TERMINAL_ is set,
|
||||||
|
_action_ will be run inside the terminal. Otherwise, it will fallback to
|
||||||
|
running directly. Multiple buttons can be defined by providing the flag
|
||||||
|
multiple times.
|
||||||
|
|
||||||
|
*-Z, --button-dismiss-no-terminal* <text> <action>
|
||||||
|
Create a button with the text _text_ that executes _action_ when pressed,
|
||||||
|
and dismisses swaynag. _action_ will be run directly instead of in a
|
||||||
|
terminal. Multiple buttons can be defined by providing the flag multiple
|
||||||
|
times.
|
||||||
|
|
||||||
*-c, --config* <path>
|
*-c, --config* <path>
|
||||||
The config file to use. By default, the following paths are checked:
|
The config file to use. By default, the following paths are checked:
|
||||||
_$HOME/.swaynag/config_, _$XDG\_CONFIG\_HOME/swaynag/config_, and
|
_$HOME/.swaynag/config_, _$XDG\_CONFIG\_HOME/swaynag/config_, and
|
||||||
|
|
|
@ -76,6 +76,11 @@ static void swaynag_button_execute(struct swaynag *swaynag,
|
||||||
}
|
}
|
||||||
_exit(EXIT_SUCCESS);
|
_exit(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (button->dismiss) {
|
||||||
|
swaynag->run_display = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (waitpid(pid, NULL, 0) < 0) {
|
if (waitpid(pid, NULL, 0) < 0) {
|
||||||
sway_log_errno(SWAY_DEBUG, "waitpid failed");
|
sway_log_errno(SWAY_DEBUG, "waitpid failed");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue