summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2013-03-24 09:27:19 +0000
committerNicholas Marriott <nicm@openbsd.org>2013-03-24 09:27:19 +0000
commitbb8457b166635bc8d069012bb33d94e44178bfdc (patch)
treefb327f1e877f6663043d8b8bb66b0513cb2146cb
parent3eae71b5b28cf591f6cff652e2f2c67be394c040 (diff)
Fix error reporting for client commands by adding a flag to
cmd_find_client to tell it whether or not to show errors, sometimes it's needed and sometimes not.
-rw-r--r--cmd-break-pane.c2
-rw-r--r--cmd-command-prompt.c2
-rw-r--r--cmd-confirm-before.c2
-rw-r--r--cmd-detach-client.c2
-rw-r--r--cmd-display-message.c6
-rw-r--r--cmd-display-panes.c2
-rw-r--r--cmd-lock-server.c2
-rw-r--r--cmd-new-window.c2
-rw-r--r--cmd-pipe-pane.c2
-rw-r--r--cmd-refresh-client.c2
-rw-r--r--cmd-show-messages.c2
-rw-r--r--cmd-split-window.c19
-rw-r--r--cmd-suspend-client.c2
-rw-r--r--cmd-switch-client.c2
-rw-r--r--cmd.c12
15 files changed, 36 insertions, 25 deletions
diff --git a/cmd-break-pane.c b/cmd-break-pane.c
index 57628a7a..a5a78077 100644
--- a/cmd-break-pane.c
+++ b/cmd-break-pane.c
@@ -97,7 +97,7 @@ cmd_break_pane_exec(struct cmd *self, struct cmd_ctx *ctx)
template = BREAK_PANE_TEMPLATE;
ft = format_create();
- if ((c = cmd_find_client(ctx, NULL)) != NULL)
+ if ((c = cmd_find_client(ctx, NULL, 1)) != NULL)
format_client(ft, c);
format_session(ft, s);
format_winlink(ft, s, wl);
diff --git a/cmd-command-prompt.c b/cmd-command-prompt.c
index 80407b7d..3a43b24f 100644
--- a/cmd-command-prompt.c
+++ b/cmd-command-prompt.c
@@ -94,7 +94,7 @@ cmd_command_prompt_exec(struct cmd *self, struct cmd_ctx *ctx)
char *prompt, *ptr, *input = NULL;
size_t n;
- if ((c = cmd_find_client(ctx, args_get(args, 't'))) == NULL)
+ if ((c = cmd_find_client(ctx, args_get(args, 't'), 0)) == NULL)
return (CMD_RETURN_ERROR);
if (c->prompt_string != NULL)
diff --git a/cmd-confirm-before.c b/cmd-confirm-before.c
index f9491095..765f58df 100644
--- a/cmd-confirm-before.c
+++ b/cmd-confirm-before.c
@@ -79,7 +79,7 @@ cmd_confirm_before_exec(struct cmd *self, struct cmd_ctx *ctx)
return (CMD_RETURN_ERROR);
}
- if ((c = cmd_find_client(ctx, args_get(args, 't'))) == NULL)
+ if ((c = cmd_find_client(ctx, args_get(args, 't'), 0)) == NULL)
return (CMD_RETURN_ERROR);
if ((prompt = args_get(args, 'p')) != NULL)
diff --git a/cmd-detach-client.c b/cmd-detach-client.c
index b437ddd3..a1d3a386 100644
--- a/cmd-detach-client.c
+++ b/cmd-detach-client.c
@@ -61,7 +61,7 @@ cmd_detach_client_exec(struct cmd *self, struct cmd_ctx *ctx)
server_write_client(c, msgtype, NULL, 0);
}
} else {
- c = cmd_find_client(ctx, args_get(args, 't'));
+ c = cmd_find_client(ctx, args_get(args, 't'), 0);
if (c == NULL)
return (CMD_RETURN_ERROR);
diff --git a/cmd-display-message.c b/cmd-display-message.c
index 899957f8..05c3a408 100644
--- a/cmd-display-message.c
+++ b/cmd-display-message.c
@@ -55,9 +55,6 @@ cmd_display_message_exec(struct cmd *self, struct cmd_ctx *ctx)
time_t t;
size_t len;
- if ((c = cmd_find_client(ctx, args_get(args, 'c'))) == NULL)
- return (CMD_RETURN_ERROR);
-
if (args_has(args, 't')) {
wl = cmd_find_pane(ctx, args_get(args, 't'), &s, &wp);
if (wl == NULL)
@@ -80,7 +77,8 @@ cmd_display_message_exec(struct cmd *self, struct cmd_ctx *ctx)
template = DISPLAY_MESSAGE_TEMPLATE;
ft = format_create();
- format_client(ft, c);
+ if ((c = cmd_find_client(ctx, args_get(args, 'c'), 1)) != NULL)
+ format_client(ft, c);
format_session(ft, s);
format_winlink(ft, s, wl);
format_window_pane(ft, wp);
diff --git a/cmd-display-panes.c b/cmd-display-panes.c
index 5f0893d4..b3e67fd2 100644
--- a/cmd-display-panes.c
+++ b/cmd-display-panes.c
@@ -42,7 +42,7 @@ cmd_display_panes_exec(struct cmd *self, struct cmd_ctx *ctx)
struct args *args = self->args;
struct client *c;
- if ((c = cmd_find_client(ctx, args_get(args, 't'))) == NULL)
+ if ((c = cmd_find_client(ctx, args_get(args, 't'), 0)) == NULL)
return (CMD_RETURN_ERROR);
server_set_identify(c);
diff --git a/cmd-lock-server.c b/cmd-lock-server.c
index 16a34a44..c95379ac 100644
--- a/cmd-lock-server.c
+++ b/cmd-lock-server.c
@@ -74,7 +74,7 @@ cmd_lock_server_exec(struct cmd *self, unused struct cmd_ctx *ctx)
return (CMD_RETURN_ERROR);
server_lock_session(s);
} else {
- if ((c = cmd_find_client(ctx, args_get(args, 't'))) == NULL)
+ if ((c = cmd_find_client(ctx, args_get(args, 't'), 0)) == NULL)
return (CMD_RETURN_ERROR);
server_lock_client(c);
}
diff --git a/cmd-new-window.c b/cmd-new-window.c
index 331c9fc8..0ab05e26 100644
--- a/cmd-new-window.c
+++ b/cmd-new-window.c
@@ -126,7 +126,7 @@ cmd_new_window_exec(struct cmd *self, struct cmd_ctx *ctx)
template = NEW_WINDOW_TEMPLATE;
ft = format_create();
- if ((c = cmd_find_client(ctx, NULL)) != NULL)
+ if ((c = cmd_find_client(ctx, NULL, 1)) != NULL)
format_client(ft, c);
format_session(ft, s);
format_winlink(ft, s, wl);
diff --git a/cmd-pipe-pane.c b/cmd-pipe-pane.c
index a332b0ca..bb17c6be 100644
--- a/cmd-pipe-pane.c
+++ b/cmd-pipe-pane.c
@@ -57,7 +57,7 @@ cmd_pipe_pane_exec(struct cmd *self, struct cmd_ctx *ctx)
if (cmd_find_pane(ctx, args_get(args, 't'), NULL, &wp) == NULL)
return (CMD_RETURN_ERROR);
- c = cmd_find_client(ctx, NULL);
+ c = cmd_find_client(ctx, NULL, 1);
/* Destroy the old pipe. */
old_fd = wp->pipe_fd;
diff --git a/cmd-refresh-client.c b/cmd-refresh-client.c
index 885e8165..25df230f 100644
--- a/cmd-refresh-client.c
+++ b/cmd-refresh-client.c
@@ -44,7 +44,7 @@ cmd_refresh_client_exec(struct cmd *self, struct cmd_ctx *ctx)
const char *size;
u_int w, h;
- if ((c = cmd_find_client(ctx, args_get(args, 't'))) == NULL)
+ if ((c = cmd_find_client(ctx, args_get(args, 't'), 0)) == NULL)
return (CMD_RETURN_ERROR);
if (args_has(args, 'C')) {
diff --git a/cmd-show-messages.c b/cmd-show-messages.c
index 038b673c..8394e3de 100644
--- a/cmd-show-messages.c
+++ b/cmd-show-messages.c
@@ -48,7 +48,7 @@ cmd_show_messages_exec(struct cmd *self, struct cmd_ctx *ctx)
char *tim;
u_int i;
- if ((c = cmd_find_client(ctx, args_get(args, 't'))) == NULL)
+ if ((c = cmd_find_client(ctx, args_get(args, 't'), 0)) == NULL)
return (CMD_RETURN_ERROR);
for (i = 0; i < ARRAY_LENGTH(&c->message_log); i++) {
diff --git a/cmd-split-window.c b/cmd-split-window.c
index d225ce23..b9eb92e3 100644
--- a/cmd-split-window.c
+++ b/cmd-split-window.c
@@ -59,8 +59,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;
@@ -122,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);
@@ -143,7 +152,7 @@ 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)
+ if ((c = cmd_find_client(ctx, NULL, 1)) != NULL)
format_client(ft, c);
format_session(ft, s);
format_winlink(ft, s, wl);
diff --git a/cmd-suspend-client.c b/cmd-suspend-client.c
index 24077d7f..c3806c6f 100644
--- a/cmd-suspend-client.c
+++ b/cmd-suspend-client.c
@@ -45,7 +45,7 @@ cmd_suspend_client_exec(struct cmd *self, struct cmd_ctx *ctx)
struct args *args = self->args;
struct client *c;
- if ((c = cmd_find_client(ctx, args_get(args, 't'))) == NULL)
+ if ((c = cmd_find_client(ctx, args_get(args, 't'), 0)) == NULL)
return (CMD_RETURN_ERROR);
tty_stop_tty(&c->tty);
diff --git a/cmd-switch-client.c b/cmd-switch-client.c
index 991974fd..0fcf0146 100644
--- a/cmd-switch-client.c
+++ b/cmd-switch-client.c
@@ -64,7 +64,7 @@ cmd_switch_client_exec(struct cmd *self, struct cmd_ctx *ctx)
struct client *c;
struct session *s;
- if ((c = cmd_find_client(ctx, args_get(args, 'c'))) == NULL)
+ if ((c = cmd_find_client(ctx, args_get(args, 'c'), 0)) == NULL)
return (CMD_RETURN_ERROR);
if (args_has(args, 'r')) {
diff --git a/cmd.c b/cmd.c
index 6ab1f430..6fe4d565 100644
--- a/cmd.c
+++ b/cmd.c
@@ -517,15 +517,19 @@ cmd_choose_client(struct clients *cc)
/* Find the target client or report an error and return NULL. */
struct client *
-cmd_find_client(struct cmd_ctx *ctx, const char *arg)
+cmd_find_client(struct cmd_ctx *ctx, const char *arg, int quiet)
{
struct client *c;
char *tmparg;
size_t arglen;
/* A NULL argument means the current client. */
- if (arg == NULL)
- return (cmd_current_client(ctx));
+ if (arg == NULL) {
+ c = cmd_current_client(ctx);
+ if (c == NULL && !quiet)
+ ctx->error(ctx, "no clients");
+ return (c);
+ }
tmparg = xstrdup(arg);
/* Trim a single trailing colon if any. */
@@ -537,7 +541,7 @@ cmd_find_client(struct cmd_ctx *ctx, const char *arg)
c = cmd_lookup_client(tmparg);
/* If no client found, report an error. */
- if (c == NULL)
+ if (c == NULL && !quiet)
ctx->error(ctx, "client not found: %s", tmparg);
free(tmparg);