aboutsummaryrefslogtreecommitdiff
path: root/window.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2013-02-22 14:31:38 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2013-02-22 14:31:38 +0000
commit31407b70e00cd3e18eb9107b99ba54a5f55b79d0 (patch)
treea413c24047bb94b287e95cb225948858772d29dc /window.c
parent374dae6635f797e480a7b0fc5a5c7bcd4fcca047 (diff)
downloadrtmux-31407b70e00cd3e18eb9107b99ba54a5f55b79d0.tar.gz
rtmux-31407b70e00cd3e18eb9107b99ba54a5f55b79d0.tar.bz2
rtmux-31407b70e00cd3e18eb9107b99ba54a5f55b79d0.zip
Add option command-prefix which is automatically prepended to any command
(apart from a naked default-shell). The default is "exec ".
Diffstat (limited to 'window.c')
-rw-r--r--window.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/window.c b/window.c
index 77f06f89..4bb53489 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);