The branch, master has been updated
       via  e43fc6f08a2fcd54df6bcc0218ad77db8dea5603 (commit)
       via  31407b70e00cd3e18eb9107b99ba54a5f55b79d0 (commit)
      from  7d3c1016ce33d8a74af7b876e8e7c9ca00452ec1 (commit)

- Log -----------------------------------------------------------------
commit e43fc6f08a2fcd54df6bcc0218ad77db8dea5603
Merge: 31407b7 7d3c101
Author: Nicholas Marriott <nicholas.marri...@gmail.com>
Commit: Nicholas Marriott <nicholas.marri...@gmail.com>

    Merge branch 'master' of ssh://git.code.sf.net/p/tmux/tmux-code

 input.c         |    9 +++++++++
 server-client.c |   48 ++++++++++++++++++++++++++++++++++++++++++++++--
 tmux.h          |    2 ++
 tty.c           |    2 +-
 4 files changed, 58 insertions(+), 3 deletions(-)


commit 31407b70e00cd3e18eb9107b99ba54a5f55b79d0
Author: Nicholas Marriott <nicholas.marri...@gmail.com>
Commit: Nicholas Marriott <nicholas.marri...@gmail.com>

    Add option command-prefix which is automatically prepended to any command
    (apart from a naked default-shell). The default is "exec ".
---
 cmd-split-window.c |   17 +++++++++++++----
 names.c            |   24 ++++++++++++++----------
 options-table.c    |    6 +++++-
 tmux.1             |    7 +++++++
 window.c           |   18 ++++++++++++++++--
 5 files changed, 55 insertions(+), 17 deletions(-)

diff --git a/cmd-split-window.c b/cmd-split-window.c
index cac8095..859d5fd 100644
--- a/cmd-split-window.c
+++ b/cmd-split-window.c
@@ -58,8 +58,8 @@ cmd_split_window_exec(struct cmd *self, struct cmd_ctx *ctx)
        struct window           *w;
        struct window_pane      *wp, *new_wp = NULL;
        struct environ           env;
-       const char              *cmd, *cwd, *shell;
-       char                    *cause, *new_cause;
+       const char              *cmd, *cwd, *shell, *prefix;
+       char                    *cause, *new_cause, *cmd1;
        u_int                    hlimit;
        int                      size, percentage;
        enum layout_type         type;
@@ -121,9 +121,18 @@ cmd_split_window_exec(struct cmd *self, struct cmd_ctx 
*ctx)
                goto error;
        }
        new_wp = window_add_pane(w, hlimit);
-       if (window_pane_spawn(
-           new_wp, cmd, shell, cwd, &env, s->tio, &cause) != 0)
+
+       if (*cmd != '\0') {
+               prefix = options_get_string(&w->options, "command-prefix");
+               xasprintf(&cmd1, "%s%s", prefix, cmd);
+       } else
+               cmd1 = xstrdup("");
+       if (window_pane_spawn(new_wp, cmd1, shell, cwd, &env, s->tio,
+           &cause) != 0) {
+               free(cmd1);
                goto error;
+       }
+       free(cmd1);
        layout_assign_pane(lc, new_wp);
 
        server_redraw_window(w);
diff --git a/names.c b/names.c
index f536d2f..bcb6aaf 100644
--- a/names.c
+++ b/names.c
@@ -26,8 +26,8 @@
 
 #include "tmux.h"
 
-void    window_name_callback(unused int, unused short, void *);
-char   *parse_window_name(const char *);
+void    window_name_callback(int, short, void *);
+char   *parse_window_name(struct window *, const char *);
 
 void
 queue_window_name(struct window *w)
@@ -73,9 +73,9 @@ window_name_callback(unused int fd, unused short events, void 
*data)
                 */
                if (w->active->cmd != NULL && *w->active->cmd == '\0' &&
                    name != NULL && name[0] == '-' && name[1] != '\0')
-                       wname = parse_window_name(name + 1);
+                       wname = parse_window_name(w, name + 1);
                else
-                       wname = parse_window_name(name);
+                       wname = parse_window_name(w, name);
                free(name);
        }
 
@@ -98,18 +98,22 @@ default_window_name(struct window *w)
        if (w->active->screen != &w->active->base)
                return (xstrdup("[tmux]"));
        if (w->active->cmd != NULL && *w->active->cmd != '\0')
-               return (parse_window_name(w->active->cmd));
-       return (parse_window_name(w->active->shell));
+               return (parse_window_name(w, w->active->cmd));
+       return (parse_window_name(w, w->active->shell));
 }
 
 char *
-parse_window_name(const char *in)
+parse_window_name(struct window *w, const char *in)
 {
-       char    *copy, *name, *ptr;
+       char    *copy, *name, *ptr, *prefix;
+       size_t   prefixlen;
+
+       prefix = options_get_string(&w->options, "command-prefix");
+       prefixlen = strlen(prefix);
 
        name = copy = xstrdup(in);
-       if (strncmp(name, "exec ", (sizeof "exec ") - 1) == 0)
-               name = name + (sizeof "exec ") - 1;
+       if (strncmp(name, prefix, prefixlen) == 0)
+               name = name + prefixlen;
 
        while (*name == ' ')
                name++;
diff --git a/options-table.c b/options-table.c
index 37b3b10..e5f6c77 100644
--- a/options-table.c
+++ b/options-table.c
@@ -476,7 +476,6 @@ const struct options_table_entry window_options_table[] = {
          .default_num = 1
        },
 
-
        { .name = "c0-change-trigger",
          .type = OPTIONS_TABLE_NUMBER,
          .default_num = 250,
@@ -502,6 +501,11 @@ const struct options_table_entry window_options_table[] = {
          .default_num = 1
        },
 
+       { .name = "command-prefix",
+         .type = OPTIONS_TABLE_STRING,
+         .default_str = "exec "
+       },
+
        { .name = "force-height",
          .type = OPTIONS_TABLE_NUMBER,
          .minimum = 0,
diff --git a/tmux.1 b/tmux.1
index 8731efb..f52f17f 100644
--- a/tmux.1
+++ b/tmux.1
@@ -2708,6 +2708,13 @@ Set clock colour.
 .Xc
 Set clock hour format.
 .Pp
+.It Ic command-prefix Ar string
+String prefixed to commands (apart from a plain shell as set by the
+.Ic default-shell
+option).
+The default is
+.Ql "exec\ " .
+.Pp
 .It Ic force-height Ar height
 .It Ic force-width Ar width
 Prevent
diff --git a/window.c b/window.c
index 77f06f8..4bb5348 100644
--- a/window.c
+++ b/window.c
@@ -307,24 +307,36 @@ window_create1(u_int sx, u_int sy)
 struct window *
 window_create(const char *name, const char *cmd, const char *shell,
     const char *cwd, struct environ *env, struct termios *tio,
-    u_int sx, u_int sy, u_int hlimit,char **cause)
+    u_int sx, u_int sy, u_int hlimit, char **cause)
 {
        struct window           *w;
        struct window_pane      *wp;
+       const char              *prefix;
+       char                    *cmd1;
 
        w = window_create1(sx, sy);
        wp = window_add_pane(w, hlimit);
        layout_init(w);
-       if (window_pane_spawn(wp, cmd, shell, cwd, env, tio, cause) != 0) {
+
+       if (*cmd != '\0') {
+               prefix = options_get_string(&w->options, "command-prefix");
+               xasprintf(&cmd1, "%s%s", prefix, cmd);
+       } else
+               cmd1 = xstrdup("");
+       if (window_pane_spawn(wp, cmd1, shell, cwd, env, tio, cause) != 0) {
                window_destroy(w);
+               free(cmd1);
                return (NULL);
        }
+       free(cmd1);
+
        w->active = TAILQ_FIRST(&w->panes);
        if (name != NULL) {
                w->name = xstrdup(name);
                options_set_number(&w->options, "automatic-rename", 0);
        } else
                w->name = default_window_name(w);
+
        return (w);
 }
 
@@ -701,6 +713,8 @@ window_pane_spawn(struct window_pane *wp, const char *cmd, 
const char *shell,
                wp->cwd = xstrdup(cwd);
        }
 
+       log_debug("spawn: %s -- %s", wp->shell, wp->cmd);
+
        memset(&ws, 0, sizeof ws);
        ws.ws_col = screen_size_x(&wp->base);
        ws.ws_row = screen_size_y(&wp->base);


-----------------------------------------------------------------------

Summary of changes:
 cmd-split-window.c |   17 +++++++++++++----
 names.c            |   24 ++++++++++++++----------
 options-table.c    |    6 +++++-
 tmux.1             |    7 +++++++
 window.c           |   18 ++++++++++++++++--
 5 files changed, 55 insertions(+), 17 deletions(-)


hooks/post-receive
-- 
tmux

------------------------------------------------------------------------------
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-cvs mailing list
tmux-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tmux-cvs

Reply via email to