diff options
author | nicm <nicm> | 2014-12-02 23:39:02 +0000 |
---|---|---|
committer | nicm <nicm> | 2014-12-02 23:39:02 +0000 |
commit | 54ca7b230d08aae0b2028f3f82a259963017c167 (patch) | |
tree | ba10110139e2835ef0cadfa0250f0c5a27dfcb5c /cmd-if-shell.c | |
parent | 575fd1e322b15a3e9f0d1892ebb82c2e8a30ba46 (diff) | |
download | rtmux-54ca7b230d08aae0b2028f3f82a259963017c167.tar.gz rtmux-54ca7b230d08aae0b2028f3f82a259963017c167.tar.bz2 rtmux-54ca7b230d08aae0b2028f3f82a259963017c167.zip |
Add -F to if-shell to allow it to be used to check for format or option
values rather than executing a command.
Diffstat (limited to 'cmd-if-shell.c')
-rw-r--r-- | cmd-if-shell.c | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/cmd-if-shell.c b/cmd-if-shell.c index da0220ca..15432919 100644 --- a/cmd-if-shell.c +++ b/cmd-if-shell.c @@ -37,8 +37,8 @@ void cmd_if_shell_free(void *); const struct cmd_entry cmd_if_shell_entry = { "if-shell", "if", - "bt:", 2, 3, - "[-b] " CMD_TARGET_PANE_USAGE " shell-command command [command]", + "bFt:", 2, 3, + "[-bF] " CMD_TARGET_PANE_USAGE " shell-command command [command]", 0, 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 cmd_if_shell_data *cdata; - char *shellcmd; + char *shellcmd, *cmd, *cause; + struct cmd_list *cmdlist; struct client *c; struct session *s = 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]); 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->cmd_if = xstrdup(args->argv[1]); if (args->argc == 3) |