diff options
author | Thomas Adam <thomas.adam@smoothwall.net> | 2013-03-25 14:59:29 +0000 |
---|---|---|
committer | Thomas Adam <thomas.adam@smoothwall.net> | 2013-03-25 14:59:29 +0000 |
commit | f90eb43fcb12720711ea01b110c5b474111e6600 (patch) | |
tree | 43b2e85bcf1626e3810ade10578ac18399931772 /cmd-split-window.c | |
parent | 418ba99078a2712ece398e17a5a9bc1f6600126b (diff) | |
parent | 58bb6f8c5650d496fb3b872766c0278aa024631d (diff) | |
download | rtmux-f90eb43fcb12720711ea01b110c5b474111e6600.tar.gz rtmux-f90eb43fcb12720711ea01b110c5b474111e6600.tar.bz2 rtmux-f90eb43fcb12720711ea01b110c5b474111e6600.zip |
Merge branch 'obsd-master'
Diffstat (limited to 'cmd-split-window.c')
-rw-r--r-- | cmd-split-window.c | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/cmd-split-window.c b/cmd-split-window.c index cac8095e..139f7e50 100644 --- a/cmd-split-window.c +++ b/cmd-split-window.c @@ -28,7 +28,7 @@ */ void cmd_split_window_key_binding(struct cmd *, int); -enum cmd_retval cmd_split_window_exec(struct cmd *, struct cmd_ctx *); +enum cmd_retval cmd_split_window_exec(struct cmd *, struct cmd_q *); const struct cmd_entry cmd_split_window_entry = { "split-window", "splitw", @@ -50,7 +50,7 @@ cmd_split_window_key_binding(struct cmd *self, int key) } enum cmd_retval -cmd_split_window_exec(struct cmd *self, struct cmd_ctx *ctx) +cmd_split_window_exec(struct cmd *self, struct cmd_q *cmdq) { struct args *args = self->args; struct session *s; @@ -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; @@ -69,9 +69,10 @@ cmd_split_window_exec(struct cmd *self, struct cmd_ctx *ctx) struct format_tree *ft; char *cp; - if ((wl = cmd_find_pane(ctx, args_get(args, 't'), &s, &wp)) == NULL) + if ((wl = cmd_find_pane(cmdq, args_get(args, 't'), &s, &wp)) == NULL) return (CMD_RETURN_ERROR); w = wl->window; + server_unzoom_window(w); environ_init(&env); environ_copy(&global_environ, &env); @@ -82,7 +83,7 @@ cmd_split_window_exec(struct cmd *self, struct cmd_ctx *ctx) cmd = options_get_string(&s->options, "default-command"); else cmd = args->argv[0]; - cwd = cmd_get_default_path(ctx, args_get(args, 'c')); + cwd = cmd_get_default_path(cmdq, args_get(args, 'c')); type = LAYOUT_TOPBOTTOM; if (args_has(args, 'h')) @@ -121,9 +122,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); @@ -142,14 +152,14 @@ cmd_split_window_exec(struct cmd *self, struct cmd_ctx *ctx) template = SPLIT_WINDOW_TEMPLATE; ft = format_create(); - if ((c = cmd_find_client(ctx, NULL)) != NULL) - format_client(ft, c); + if ((c = cmd_find_client(cmdq, NULL, 1)) != NULL) + format_client(ft, c); format_session(ft, s); format_winlink(ft, s, wl); format_window_pane(ft, new_wp); cp = format_expand(ft, template); - ctx->print(ctx, "%s", cp); + cmdq_print(cmdq, "%s", cp); free(cp); format_free(ft); @@ -161,7 +171,7 @@ error: environ_free(&env); if (new_wp != NULL) window_remove_pane(w, new_wp); - ctx->error(ctx, "create pane failed: %s", cause); + cmdq_error(cmdq, "create pane failed: %s", cause); free(cause); return (CMD_RETURN_ERROR); } |