1
0
mirror of https://github.com/tmux/tmux.git synced 2025-03-23 14:19:04 +00:00

Add -F to if-shell to allow it to be used to check for format or option

values rather than executing a command.
This commit is contained in:
nicm 2014-12-02 23:39:02 +00:00
parent 575fd1e322
commit 54ca7b230d
2 changed files with 35 additions and 5 deletions

View File

@ -37,8 +37,8 @@ void cmd_if_shell_free(void *);
const struct cmd_entry cmd_if_shell_entry = { const struct cmd_entry cmd_if_shell_entry = {
"if-shell", "if", "if-shell", "if",
"bt:", 2, 3, "bFt:", 2, 3,
"[-b] " CMD_TARGET_PANE_USAGE " shell-command command [command]", "[-bF] " CMD_TARGET_PANE_USAGE " shell-command command [command]",
0, 0,
cmd_if_shell_exec cmd_if_shell_exec
}; };
@ -56,7 +56,8 @@ cmd_if_shell_exec(struct cmd *self, struct cmd_q *cmdq)
{ {
struct args *args = self->args; struct args *args = self->args;
struct cmd_if_shell_data *cdata; struct cmd_if_shell_data *cdata;
char *shellcmd; char *shellcmd, *cmd, *cause;
struct cmd_list *cmdlist;
struct client *c; struct client *c;
struct session *s = NULL; struct session *s = NULL;
struct winlink *wl = NULL; struct winlink *wl = NULL;
@ -84,6 +85,26 @@ cmd_if_shell_exec(struct cmd *self, struct cmd_q *cmdq)
shellcmd = format_expand(ft, args->argv[0]); shellcmd = format_expand(ft, args->argv[0]);
format_free(ft); format_free(ft);
if (args_has(args, 'F')) {
cmd = NULL;
if (*shellcmd != '0' && *shellcmd != '\0')
cmd = args->argv[1];
else if (args->argc == 3)
cmd = args->argv[2];
if (cmd == NULL)
return (CMD_RETURN_NORMAL);
if (cmd_string_parse(cmd, &cmdlist, NULL, 0, &cause) != 0) {
if (cause != NULL) {
cmdq_error(cmdq, "%s", cause);
free(cause);
}
return (CMD_RETURN_ERROR);
}
cmdq_run(cmdq, cmdlist);
cmd_list_free(cmdlist);
return (CMD_RETURN_NORMAL);
}
cdata = xmalloc(sizeof *cdata); cdata = xmalloc(sizeof *cdata);
cdata->cmd_if = xstrdup(args->argv[1]); cdata->cmd_if = xstrdup(args->argv[1]);
if (args->argc == 3) if (args->argc == 3)

13
tmux.1
View File

@ -3589,7 +3589,7 @@ Miscellaneous commands are as follows:
.It Ic clock-mode Op Fl t Ar target-pane .It Ic clock-mode Op Fl t Ar target-pane
Display a large clock. Display a large clock.
.It Xo Ic if-shell .It Xo Ic if-shell
.Op Fl b .Op Fl bF
.Op Fl t Ar target-pane .Op Fl t Ar target-pane
.Ar shell-command command .Ar shell-command command
.Op Ar command .Op Ar command
@ -3602,7 +3602,9 @@ if
returns success or the second returns success or the second
.Ar command .Ar command
otherwise. otherwise.
Before being executed, shell-command is expanded using the rules specified in the Before being executed,
.Ar shell-command
is expanded using the rules specified in the
.Sx FORMATS .Sx FORMATS
section, including those relevant to section, including those relevant to
.Ar target-pane . .Ar target-pane .
@ -3610,6 +3612,13 @@ With
.Fl b , .Fl b ,
.Ar shell-command .Ar shell-command
is run in the background. is run in the background.
.Pp
If
.Fl F
is given,
.Ar shell-command
is not executed but considered success if neither empty nor zero (after formats
are expanded).
.It Ic lock-server .It Ic lock-server
.D1 (alias: Ic lock ) .D1 (alias: Ic lock )
Lock each client individually by running the command specified by the Lock each client individually by running the command specified by the