Applied with some minor tweaks, and changed to add -t to if-shell
too. Thanks.


On Sat, Feb 23, 2013 at 03:29:55PM -0300, Thiago Padilha wrote:
> Ok here is the updated patch
> 
> ---
>  cmd-if-shell.c  | 20 ++++++++++++++++++--
>  cmd-run-shell.c | 18 ++++++++++++++----
>  tmux.1          | 10 ++++++++--
>  3 files changed, 40 insertions(+), 8 deletions(-)

> diff --git a/cmd-if-shell.c b/cmd-if-shell.c
> index 6f0b151..011974f 100644
> --- a/cmd-if-shell.c
> +++ b/cmd-if-shell.c
> @@ -55,7 +55,21 @@ 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, NULL, &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]);
>  
>       cdata = xmalloc(sizeof *cdata);
>       cdata->cmd_if = xstrdup(args->argv[1]);
> @@ -68,7 +82,9 @@ 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);
> -
> +     format_free(ft);
> +     free(shellcmd);
> +     
>       return (CMD_RETURN_YIELD);      /* don't let client exit */
>  }
>  
> diff --git a/cmd-run-shell.c b/cmd-run-shell.c
> index 9b4c006..69423e5 100644
> --- a/cmd-run-shell.c
> +++ b/cmd-run-shell.c
> @@ -75,20 +75,30 @@ 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]);
> +
>       cdata = xmalloc(sizeof *cdata);
> -     cdata->cmd = xstrdup(args->argv[0]);
> +     cdata->cmd = shellcmd;
>       cdata->wp_id = wp->id;
> -
>       cdata->ctx = ctx;
>       cmd_ref_ctx(ctx);
>  
>       job_run(shellcmd, cmd_run_shell_callback, cmd_run_shell_free, cdata);
> +     format_free(ft);
>  
>       return (CMD_RETURN_YIELD);      /* don't let client exit */
>  }
> diff --git a/tmux.1 b/tmux.1
> index 882a71f..d01a150 100644
> --- a/tmux.1
> +++ b/tmux.1
> @@ -3476,7 +3476,10 @@ if
>  .Ar shell-command
>  returns success or the second
>  .Ar command
> -otherwise.
> +otherwise. Before being executed, shell-command is expanded using the rules
> +specified in the
> +.Sx FORMATS
> +section.
>  .It Ic lock-server
>  .D1 (alias: Ic lock )
>  Lock each client individually by running the command specified by the
> @@ -3489,7 +3492,10 @@ option.
>  .D1 (alias: Ic run )
>  Execute
>  .Ar shell-command
> -in the background without creating a window.
> +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


------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
_______________________________________________
tmux-users mailing list
tmux-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tmux-users

Reply via email to