Expand format variables in the run-shell and if-shell shell commands, from

Thiago Padilha.
This commit is contained in:
Nicholas Marriott 2013-02-23 19:24:42 +00:00
parent 357da035b9
commit 497b27dafb
3 changed files with 46 additions and 7 deletions

View File

@ -36,8 +36,8 @@ void cmd_if_shell_free(void *);
const struct cmd_entry cmd_if_shell_entry = {
"if-shell", "if",
"", 2, 3,
"shell-command command [command]",
"t:", 2, 3,
CMD_TARGET_PANE_USAGE " shell-command command [command]",
0,
NULL,
NULL,
@ -55,7 +55,22 @@ cmd_if_shell_exec(struct cmd *self, struct cmd_ctx *ctx)
{
struct args *args = self->args;
struct cmd_if_shell_data *cdata;
const char *shellcmd = args->argv[0];
const char *shellcmd;
struct session *s;
struct winlink *wl;
struct window_pane *wp;
struct format_tree *ft;
wl = cmd_find_pane(ctx, args_get(args, 't'), &s, &wp);
if (wl == NULL)
return (CMD_RETURN_ERROR);
ft = format_create();
format_session(ft, s);
format_winlink(ft, s, wl);
format_window_pane(ft, wp);
shellcmd = format_expand(ft, args->argv[0]);
format_free(ft);
cdata = xmalloc(sizeof *cdata);
cdata->cmd_if = xstrdup(args->argv[1]);
@ -68,6 +83,7 @@ cmd_if_shell_exec(struct cmd *self, struct cmd_ctx *ctx)
cmd_ref_ctx(ctx);
job_run(shellcmd, cmd_if_shell_callback, cmd_if_shell_free, cdata);
free(shellcmd);
return (CMD_RETURN_YIELD); /* don't let client exit */
}

View File

@ -75,14 +75,25 @@ cmd_run_shell_exec(struct cmd *self, struct cmd_ctx *ctx)
{
struct args *args = self->args;
struct cmd_run_shell_data *cdata;
const char *shellcmd = args->argv[0];
const char *shellcmd;
struct session *s;
struct winlink *wl;
struct window_pane *wp;
struct format_tree *ft;
if (cmd_find_pane(ctx, args_get(args, 't'), NULL, &wp) == NULL)
wl = cmd_find_pane(ctx, args_get(args, 't'), &s, &wp);
if (wl == NULL)
return (CMD_RETURN_ERROR);
ft = format_create();
format_session(ft, s);
format_winlink(ft, s, wl);
format_window_pane(ft, wp);
shellcmd = format_expand(ft, args->argv[0]);
format_free(ft);
cdata = xmalloc(sizeof *cdata);
cdata->cmd = xstrdup(args->argv[0]);
cdata->cmd = shellcmd;
cdata->wp_id = wp->id;
cdata->ctx = ctx;

14
tmux.1
View File

@ -3468,7 +3468,11 @@ Miscellaneous commands are as follows:
.Bl -tag -width Ds
.It Ic clock-mode Op Fl t Ar target-pane
Display a large clock.
.It Ic if-shell Ar shell-command command Op Ar command
.It Xo Ic if-shell
.Op Fl t Ar target-pane
.Ar shell-command command
.Op Ar command
.Xc
.D1 (alias: Ic if )
Execute the first
.Ar command
@ -3477,6 +3481,10 @@ if
returns success or the second
.Ar command
otherwise.
Before being executed, shell-command is expanded using the rules specified in the
.Sx FORMATS
section, including those relevant to
.Ar target-pane .
.It Ic lock-server
.D1 (alias: Ic lock )
Lock each client individually by running the command specified by the
@ -3490,6 +3498,10 @@ option.
Execute
.Ar shell-command
in the background without creating a window.
Before being executed, shell-command is expanded using the rules specified in
the
.Sx FORMATS
section.
After it finishes, any output to stdout is displayed in copy mode (in the pane
specified by
.Fl t