diff --git a/CHANGES b/CHANGES index 92cc08bf..0545f2db 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,8 @@ 19 January 2009 +* An error in a command sequence now stops execution of that sequence. + Internally, each command code now passes a return code back rather than + talking to the calling client (if any) directly. * attach-session now tries to start the server if it isn't already started - if no sessions are created in .tmux.conf this will cause an error. * Clean up starting server by making initial client get a special socketpair. @@ -23,9 +26,9 @@ bind x lsk \; lsc - Commands are executed from left to right and, importantly, an error does NOT - stop execution. Also note that command sequences do not support repeat-time - repetition unless all commands making up the sequence support it. + Commands are executed from left to right. Also note that command sequences do + not support repeat-time repetition unless all commands making up the sequence + support it. * suspend-client command to suspend a client. Don't try to background it though... * Mark attached sessions in sessions lists. Suggested by Simon Kuhnle. @@ -964,7 +967,7 @@ (including mutt, emacs). No status bar yet and no key remapping or other customisation. -$Id: CHANGES,v 1.221 2009-01-19 17:16:09 nicm Exp $ +$Id: CHANGES,v 1.222 2009-01-19 18:23:40 nicm Exp $ LocalWords: showw utf UTF fulvio ciriaco joshe OSC APC gettime abc DEF OA clr LocalWords: rivo nurges lscm Erdely eol smysession mysession ek dstname RB ms diff --git a/TODO b/TODO index 5ce465b1..c3490bbe 100644 --- a/TODO +++ b/TODO @@ -83,4 +83,3 @@ - bring back -l/-p on splitw so i can do "splitw -p 75 elinks" - UTF-8 combining characters don't work (probably should be width 1 but are listed as 2) - diff --git a/cmd-attach-session.c b/cmd-attach-session.c index 2686563a..1a403c65 100644 --- a/cmd-attach-session.c +++ b/cmd-attach-session.c @@ -1,4 +1,4 @@ -/* $Id: cmd-attach-session.c,v 1.22 2009-01-19 17:16:09 nicm Exp $ */ +/* $Id: cmd-attach-session.c,v 1.23 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -24,7 +24,7 @@ * Attach existing session to the current terminal. */ -void cmd_attach_session_exec(struct cmd *, struct cmd_ctx *); +int cmd_attach_session_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_attach_session_entry = { "attach-session", "attach", @@ -39,7 +39,7 @@ const struct cmd_entry cmd_attach_session_entry = { cmd_target_print }; -void +int cmd_attach_session_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; @@ -47,24 +47,24 @@ cmd_attach_session_exec(struct cmd *self, struct cmd_ctx *ctx) char *cause; if (ctx->curclient != NULL) - return; + return (0); if (ARRAY_LENGTH(&sessions) == 0) { ctx->error(ctx, "no sessions"); - return; + return (-1); } if ((s = cmd_find_session(ctx, data->target)) == NULL) - return; + return (-1); if (!(ctx->cmdclient->flags & CLIENT_TERMINAL)) { ctx->error(ctx, "not a terminal"); - return; + return (-1); } if (tty_open(&ctx->cmdclient->tty, &cause) != 0) { ctx->error(ctx, "%s", cause); xfree(cause); - return; + return (-1); } if (data->flags & CMD_DFLAG) @@ -74,5 +74,7 @@ cmd_attach_session_exec(struct cmd *self, struct cmd_ctx *ctx) server_write_client(ctx->cmdclient, MSG_READY, NULL, 0); recalculate_sizes(); server_redraw_client(ctx->cmdclient); + + return (1); } diff --git a/cmd-bind-key.c b/cmd-bind-key.c index ba00f244..d8dc0dff 100644 --- a/cmd-bind-key.c +++ b/cmd-bind-key.c @@ -1,4 +1,4 @@ -/* $Id: cmd-bind-key.c,v 1.18 2009-01-18 14:40:48 nicm Exp $ */ +/* $Id: cmd-bind-key.c,v 1.19 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -25,7 +25,7 @@ */ int cmd_bind_key_parse(struct cmd *, int, char **, char **); -void cmd_bind_key_exec(struct cmd *, struct cmd_ctx *); +int cmd_bind_key_exec(struct cmd *, struct cmd_ctx *); void cmd_bind_key_send(struct cmd *, struct buffer *); void cmd_bind_key_recv(struct cmd *, struct buffer *); void cmd_bind_key_free(struct cmd *); @@ -89,19 +89,18 @@ error: return (-1); } -void -cmd_bind_key_exec(struct cmd *self, struct cmd_ctx *ctx) +int +cmd_bind_key_exec(struct cmd *self, unused struct cmd_ctx *ctx) { struct cmd_bind_key_data *data = self->data; if (data == NULL) - return; + return (0); key_bindings_add(data->key, data->cmdlist); data->cmdlist = NULL; /* avoid free */ - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } void diff --git a/cmd-choose-session.c b/cmd-choose-session.c index 151a8e64..dd637a55 100644 --- a/cmd-choose-session.c +++ b/cmd-choose-session.c @@ -1,4 +1,4 @@ -/* $Id: cmd-choose-session.c,v 1.5 2009-01-18 19:10:08 nicm Exp $ */ +/* $Id: cmd-choose-session.c,v 1.6 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -24,7 +24,7 @@ * Enter choice mode to choose a session. */ -void cmd_choose_session_exec(struct cmd *, struct cmd_ctx *); +int cmd_choose_session_exec(struct cmd *, struct cmd_ctx *); void cmd_choose_session_callback(void *, int); @@ -45,7 +45,7 @@ struct cmd_choose_session_data { u_int client; }; -void +int cmd_choose_session_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; @@ -56,14 +56,14 @@ cmd_choose_session_exec(struct cmd *self, struct cmd_ctx *ctx) if (ctx->curclient == NULL) { ctx->error(ctx, "must be run interactively"); - return; + return (-1); } if ((wl = cmd_find_window(ctx, data->target, NULL)) == NULL) - return; + return (-1); if (window_pane_set_mode(wl->window->active, &window_choose_mode) != 0) - goto out; + return (0); cur = idx = 0; for (i = 0; i < ARRAY_LENGTH(&sessions); i++) { @@ -86,9 +86,7 @@ cmd_choose_session_exec(struct cmd *self, struct cmd_ctx *ctx) window_choose_ready( wl->window->active, cur, cmd_choose_session_callback, cdata); -out: - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } void diff --git a/cmd-choose-window.c b/cmd-choose-window.c index b7f90dc6..9820c01e 100644 --- a/cmd-choose-window.c +++ b/cmd-choose-window.c @@ -1,4 +1,4 @@ -/* $Id: cmd-choose-window.c,v 1.6 2009-01-18 19:10:08 nicm Exp $ */ +/* $Id: cmd-choose-window.c,v 1.7 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -24,7 +24,7 @@ * Enter choice mode to choose a window. */ -void cmd_choose_window_exec(struct cmd *, struct cmd_ctx *); +int cmd_choose_window_exec(struct cmd *, struct cmd_ctx *); void cmd_choose_window_callback(void *, int); @@ -45,7 +45,7 @@ struct cmd_choose_window_data { u_int session; }; -void +int cmd_choose_window_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; @@ -57,15 +57,15 @@ cmd_choose_window_exec(struct cmd *self, struct cmd_ctx *ctx) if (ctx->curclient == NULL) { ctx->error(ctx, "must be run interactively"); - return; + return (-1); } s = ctx->curclient->session; if ((wl = cmd_find_window(ctx, data->target, NULL)) == NULL) - return; + return (-1); if (window_pane_set_mode(wl->window->active, &window_choose_mode) != 0) - goto out; + return (0); cur = idx = 0; RB_FOREACH(wm, winlinks, &s->windows) { @@ -87,9 +87,7 @@ cmd_choose_window_exec(struct cmd *self, struct cmd_ctx *ctx) window_choose_ready( wl->window->active, cur, cmd_choose_window_callback, cdata); -out: - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } void diff --git a/cmd-clock-mode.c b/cmd-clock-mode.c index 9c8e72d0..de10833d 100644 --- a/cmd-clock-mode.c +++ b/cmd-clock-mode.c @@ -1,4 +1,4 @@ -/* $Id: cmd-clock-mode.c,v 1.2 2009-01-11 23:31:46 nicm Exp $ */ +/* $Id: cmd-clock-mode.c,v 1.3 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -24,7 +24,7 @@ * Enter clock mode. */ -void cmd_clock_mode_exec(struct cmd *, struct cmd_ctx *); +int cmd_clock_mode_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_clock_mode_entry = { "clock-mode", NULL, @@ -39,17 +39,16 @@ const struct cmd_entry cmd_clock_mode_entry = { cmd_target_print }; -void +int cmd_clock_mode_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; struct winlink *wl; if ((wl = cmd_find_window(ctx, data->target, NULL)) == NULL) - return; + return (-1); window_pane_set_mode(wl->window->active, &window_clock_mode); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-command-prompt.c b/cmd-command-prompt.c index eca662fe..be962173 100644 --- a/cmd-command-prompt.c +++ b/cmd-command-prompt.c @@ -1,4 +1,4 @@ -/* $Id: cmd-command-prompt.c,v 1.11 2009-01-18 17:20:52 nicm Exp $ */ +/* $Id: cmd-command-prompt.c,v 1.12 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott @@ -28,7 +28,7 @@ */ void cmd_command_prompt_init(struct cmd *, int); -void cmd_command_prompt_exec(struct cmd *, struct cmd_ctx *); +int cmd_command_prompt_exec(struct cmd *, struct cmd_ctx *); int cmd_command_prompt_callback(void *, const char *); @@ -68,7 +68,7 @@ cmd_command_prompt_init(struct cmd *self, int key) } } -void +int cmd_command_prompt_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; @@ -77,10 +77,10 @@ cmd_command_prompt_exec(struct cmd *self, struct cmd_ctx *ctx) char *hdr, *ptr; if ((c = cmd_find_client(ctx, data->target)) == NULL) - return; + return (-1); if (c->prompt_string != NULL) - return; + return (0); cdata = xmalloc(sizeof *cdata); cdata->c = c; @@ -96,8 +96,7 @@ cmd_command_prompt_exec(struct cmd *self, struct cmd_ctx *ctx) server_set_client_prompt(c, hdr, cmd_command_prompt_callback, cdata, 0); xfree(hdr); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } int diff --git a/cmd-copy-mode.c b/cmd-copy-mode.c index f342e3fe..b15106e9 100644 --- a/cmd-copy-mode.c +++ b/cmd-copy-mode.c @@ -1,4 +1,4 @@ -/* $Id: cmd-copy-mode.c,v 1.13 2009-01-11 23:31:46 nicm Exp $ */ +/* $Id: cmd-copy-mode.c,v 1.14 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -24,7 +24,7 @@ * Enter copy mode. */ -void cmd_copy_mode_exec(struct cmd *, struct cmd_ctx *); +int cmd_copy_mode_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_copy_mode_entry = { "copy-mode", NULL, @@ -39,17 +39,16 @@ const struct cmd_entry cmd_copy_mode_entry = { NULL }; -void +int cmd_copy_mode_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; struct winlink *wl; if ((wl = cmd_find_window(ctx, data->target, NULL)) == NULL) - return; + return (-1); window_pane_set_mode(wl->window->active, &window_copy_mode); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-delete-buffer.c b/cmd-delete-buffer.c index 073dbf04..377ff622 100644 --- a/cmd-delete-buffer.c +++ b/cmd-delete-buffer.c @@ -1,4 +1,4 @@ -/* $Id: cmd-delete-buffer.c,v 1.3 2008-12-10 20:25:41 nicm Exp $ */ +/* $Id: cmd-delete-buffer.c,v 1.4 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -26,7 +26,7 @@ * Delete a paste buffer. */ -void cmd_delete_buffer_exec(struct cmd *, struct cmd_ctx *); +int cmd_delete_buffer_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_delete_buffer_entry = { "delete-buffer", "deleteb", @@ -41,22 +41,21 @@ const struct cmd_entry cmd_delete_buffer_entry = { cmd_buffer_print }; -void +int cmd_delete_buffer_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_buffer_data *data = self->data; struct session *s; if ((s = cmd_find_session(ctx, data->target)) == NULL) - return; + return (-1); if (data->buffer == -1) paste_free_top(&s->buffers); - else { - if (paste_free_index(&s->buffers, data->buffer) != 0) - ctx->error(ctx, "no buffer %d", data->buffer); + else if (paste_free_index(&s->buffers, data->buffer) != 0) { + ctx->error(ctx, "no buffer %d", data->buffer); + return (-1); } - - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + + return (0); } diff --git a/cmd-detach-client.c b/cmd-detach-client.c index 1697adcd..3c0879e1 100644 --- a/cmd-detach-client.c +++ b/cmd-detach-client.c @@ -1,4 +1,4 @@ -/* $Id: cmd-detach-client.c,v 1.6 2008-06-05 21:25:00 nicm Exp $ */ +/* $Id: cmd-detach-client.c,v 1.7 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -24,7 +24,7 @@ * Detach a client. */ -void cmd_detach_client_exec(struct cmd *, struct cmd_ctx *); +int cmd_detach_client_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_detach_client_entry = { "detach-client", "detach", @@ -39,17 +39,16 @@ const struct cmd_entry cmd_detach_client_entry = { cmd_target_print }; -void +int cmd_detach_client_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; struct client *c; if ((c = cmd_find_client(ctx, data->target)) == NULL) - return; + return (-1); server_write_client(c, MSG_DETACH, NULL, 0); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-down-pane.c b/cmd-down-pane.c index 8958a353..7e436fe0 100644 --- a/cmd-down-pane.c +++ b/cmd-down-pane.c @@ -1,4 +1,4 @@ -/* $Id: cmd-down-pane.c,v 1.2 2009-01-14 22:13:30 nicm Exp $ */ +/* $Id: cmd-down-pane.c,v 1.3 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -24,7 +24,7 @@ * Move down a pane. */ -void cmd_down_pane_exec(struct cmd *, struct cmd_ctx *); +int cmd_down_pane_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_down_pane_entry = { "down-pane", "downp", @@ -39,7 +39,7 @@ const struct cmd_entry cmd_down_pane_entry = { cmd_target_print }; -void +int cmd_down_pane_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; @@ -47,7 +47,7 @@ cmd_down_pane_exec(struct cmd *self, struct cmd_ctx *ctx) struct window *w; if ((wl = cmd_find_window(ctx, data->target, NULL)) == NULL) - return; + return (-1); w = wl->window; do { @@ -56,6 +56,5 @@ cmd_down_pane_exec(struct cmd *self, struct cmd_ctx *ctx) w->active = TAILQ_FIRST(&w->panes); } while (w->active->flags & PANE_HIDDEN); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-find-window.c b/cmd-find-window.c index b46884e0..cae763fe 100644 --- a/cmd-find-window.c +++ b/cmd-find-window.c @@ -1,4 +1,4 @@ -/* $Id: cmd-find-window.c,v 1.2 2009-01-18 19:10:08 nicm Exp $ */ +/* $Id: cmd-find-window.c,v 1.3 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -26,7 +26,7 @@ * Find window containing text. */ -void cmd_find_window_exec(struct cmd *, struct cmd_ctx *); +int cmd_find_window_exec(struct cmd *, struct cmd_ctx *); void cmd_find_window_callback(void *, int); char *cmd_find_window_search(struct window_pane *, const char *); @@ -48,7 +48,7 @@ struct cmd_find_window_data { u_int session; }; -void +int cmd_find_window_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; @@ -64,12 +64,12 @@ cmd_find_window_exec(struct cmd *self, struct cmd_ctx *ctx) if (ctx->curclient == NULL) { ctx->error(ctx, "must be run interactively"); - return; + return (-1); } s = ctx->curclient->session; if ((wl = cmd_find_window(ctx, data->target, NULL)) == NULL) - return; + return (-1); ARRAY_INIT(&list_idx); ARRAY_INIT(&list_ctx); @@ -106,7 +106,7 @@ cmd_find_window_exec(struct cmd *self, struct cmd_ctx *ctx) ctx->error(ctx, "no windows matching: %s", data->arg); ARRAY_FREE(&list_idx); ARRAY_FREE(&list_ctx); - return; + return (-1); } if (ARRAY_LENGTH(&list_idx) == 1) { @@ -142,8 +142,7 @@ out: ARRAY_FREE(&list_idx); ARRAY_FREE(&list_ctx); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } void diff --git a/cmd-has-session.c b/cmd-has-session.c index e5aa2e22..9cd3f128 100644 --- a/cmd-has-session.c +++ b/cmd-has-session.c @@ -1,4 +1,4 @@ -/* $Id: cmd-has-session.c,v 1.11 2008-06-23 19:51:48 nicm Exp $ */ +/* $Id: cmd-has-session.c,v 1.12 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -24,7 +24,7 @@ * Cause client to report an error and exit with 1 if session doesn't exist. */ -void cmd_has_session_exec(struct cmd *, struct cmd_ctx *); +int cmd_has_session_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_has_session_entry = { "has-session", "has", @@ -39,14 +39,13 @@ const struct cmd_entry cmd_has_session_entry = { cmd_target_print }; -void +int cmd_has_session_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; if (cmd_find_session(ctx, data->target) == NULL) - return; + return (-1); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-kill-pane.c b/cmd-kill-pane.c index 81040cc1..aaeea59b 100644 --- a/cmd-kill-pane.c +++ b/cmd-kill-pane.c @@ -1,4 +1,4 @@ -/* $Id: cmd-kill-pane.c,v 1.2 2009-01-14 19:29:32 nicm Exp $ */ +/* $Id: cmd-kill-pane.c,v 1.3 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -26,7 +26,7 @@ * Kill pane. */ -void cmd_kill_pane_exec(struct cmd *, struct cmd_ctx *); +int cmd_kill_pane_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_kill_pane_entry = { "kill-pane", "killp", @@ -41,7 +41,7 @@ const struct cmd_entry cmd_kill_pane_entry = { cmd_pane_print }; -void +int cmd_kill_pane_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_pane_data *data = self->data; @@ -49,24 +49,23 @@ cmd_kill_pane_exec(struct cmd *self, struct cmd_ctx *ctx) struct window_pane *wp; if ((wl = cmd_find_window(ctx, data->target, NULL)) == NULL) - return; + return (-1); if (data->pane == -1) wp = wl->window->active; else { wp = window_pane_at_index(wl->window, data->pane); if (wp == NULL) { ctx->error(ctx, "no pane: %d", data->pane); - return; + return (-1); } } if (window_count_panes(wl->window) == 1) { ctx->error(ctx, "can't kill pane: %d", data->pane); - return; + return (-1); } window_remove_pane(wl->window, wp); server_redraw_window(wl->window); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-kill-server.c b/cmd-kill-server.c index 0e80b94a..b35a1c9c 100644 --- a/cmd-kill-server.c +++ b/cmd-kill-server.c @@ -1,4 +1,4 @@ -/* $Id: cmd-kill-server.c,v 1.5 2008-06-05 21:25:00 nicm Exp $ */ +/* $Id: cmd-kill-server.c,v 1.6 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -27,7 +27,7 @@ * Kill the server and do nothing else. */ -void cmd_kill_server_exec(struct cmd *, struct cmd_ctx *); +int cmd_kill_server_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_kill_server_entry = { "kill-server", NULL, @@ -42,11 +42,10 @@ const struct cmd_entry cmd_kill_server_entry = { NULL }; -void -cmd_kill_server_exec(unused struct cmd *self, struct cmd_ctx *ctx) +int +cmd_kill_server_exec(unused struct cmd *self, unused struct cmd_ctx *ctx) { sigterm = 1; - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-kill-session.c b/cmd-kill-session.c index 909ce295..5b0e643c 100644 --- a/cmd-kill-session.c +++ b/cmd-kill-session.c @@ -1,4 +1,4 @@ -/* $Id: cmd-kill-session.c,v 1.11 2008-06-06 20:02:27 nicm Exp $ */ +/* $Id: cmd-kill-session.c,v 1.12 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -27,7 +27,7 @@ * Note this deliberately has no alias to make it hard to hit by accident. */ -void cmd_kill_session_exec(struct cmd *, struct cmd_ctx *); +int cmd_kill_session_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_kill_session_entry = { "kill-session", NULL, @@ -42,7 +42,7 @@ const struct cmd_entry cmd_kill_session_entry = { cmd_target_print }; -void +int cmd_kill_session_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; @@ -51,7 +51,7 @@ cmd_kill_session_exec(struct cmd *self, struct cmd_ctx *ctx) u_int i; if ((s = cmd_find_session(ctx, data->target)) == NULL) - return; + return (-1); for (i = 0; i < ARRAY_LENGTH(&clients); i++) { c = ARRAY_ITEM(&clients, i); @@ -64,6 +64,5 @@ cmd_kill_session_exec(struct cmd *self, struct cmd_ctx *ctx) session_destroy(s); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-kill-window.c b/cmd-kill-window.c index 24b12c12..e7fb4d62 100644 --- a/cmd-kill-window.c +++ b/cmd-kill-window.c @@ -1,4 +1,4 @@ -/* $Id: cmd-kill-window.c,v 1.14 2008-06-06 20:02:27 nicm Exp $ */ +/* $Id: cmd-kill-window.c,v 1.15 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -24,7 +24,7 @@ * Destroy window. */ -void cmd_kill_window_exec(struct cmd *, struct cmd_ctx *); +int cmd_kill_window_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_kill_window_entry = { "kill-window", "killw", @@ -39,7 +39,7 @@ const struct cmd_entry cmd_kill_window_entry = { cmd_target_print }; -void +int cmd_kill_window_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; @@ -50,7 +50,7 @@ cmd_kill_window_exec(struct cmd *self, struct cmd_ctx *ctx) int destroyed; if ((wl = cmd_find_window(ctx, data->target, &s)) == NULL) - return; + return (-1); destroyed = session_detach(s, wl); for (i = 0; i < ARRAY_LENGTH(&clients); i++) { @@ -65,6 +65,5 @@ cmd_kill_window_exec(struct cmd *self, struct cmd_ctx *ctx) } recalculate_sizes(); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-last-window.c b/cmd-last-window.c index f8f85d60..e040eb3a 100644 --- a/cmd-last-window.c +++ b/cmd-last-window.c @@ -1,4 +1,4 @@ -/* $Id: cmd-last-window.c,v 1.15 2009-01-14 22:40:17 nicm Exp $ */ +/* $Id: cmd-last-window.c,v 1.16 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -24,7 +24,7 @@ * Move to last window. */ -void cmd_last_window_exec(struct cmd *, struct cmd_ctx *); +int cmd_last_window_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_last_window_entry = { "last-window", "last", @@ -39,21 +39,22 @@ const struct cmd_entry cmd_last_window_entry = { cmd_target_print }; -void +int cmd_last_window_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; struct session *s; if ((s = cmd_find_session(ctx, data->target)) == NULL) - return; + return (-1); if (session_last(s) == 0) server_redraw_session(s); - else + else { ctx->error(ctx, "no last window"); + return (-1); + } recalculate_sizes(); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-link-window.c b/cmd-link-window.c index ac3e4a25..9227221a 100644 --- a/cmd-link-window.c +++ b/cmd-link-window.c @@ -1,4 +1,4 @@ -/* $Id: cmd-link-window.c,v 1.26 2008-12-10 20:25:41 nicm Exp $ */ +/* $Id: cmd-link-window.c,v 1.27 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -26,7 +26,7 @@ * Link a window into another session. */ -void cmd_link_window_exec(struct cmd *, struct cmd_ctx *); +int cmd_link_window_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_link_window_entry = { "link-window", "linkw", @@ -41,7 +41,7 @@ const struct cmd_entry cmd_link_window_entry = { cmd_srcdst_print }; -void +int cmd_link_window_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_srcdst_data *data = self->data; @@ -50,11 +50,11 @@ cmd_link_window_exec(struct cmd *self, struct cmd_ctx *ctx) int idx; if ((wl_src = cmd_find_window(ctx, data->src, NULL)) == NULL) - return; + return (-1); if (arg_parse_window(data->dst, &dst, &idx) != 0) { ctx->error(ctx, "bad window: %s", data->dst); - return; + return (-1); } if (dst == NULL) dst = ctx->cursession; @@ -62,7 +62,7 @@ cmd_link_window_exec(struct cmd *self, struct cmd_ctx *ctx) dst = cmd_current_session(ctx); if (dst == NULL) { ctx->error(ctx, "session not found: %s", data->dst); - return; + return (-1); } wl_dst = NULL; @@ -70,7 +70,7 @@ cmd_link_window_exec(struct cmd *self, struct cmd_ctx *ctx) wl_dst = winlink_find_by_index(&dst->windows, idx); if (wl_dst != NULL) { if (wl_dst->window == wl_src->window) - goto out; + return (0); if (data->flags & CMD_KFLAG) { /* @@ -92,7 +92,7 @@ cmd_link_window_exec(struct cmd *self, struct cmd_ctx *ctx) wl_dst = session_attach(dst, wl_src->window, idx); if (wl_dst == NULL) { ctx->error(ctx, "index in use: %d", idx); - return; + return (-1); } if (data->flags & CMD_DFLAG) @@ -103,7 +103,5 @@ cmd_link_window_exec(struct cmd *self, struct cmd_ctx *ctx) } recalculate_sizes(); -out: - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-list-buffers.c b/cmd-list-buffers.c index 7ffe558d..c4c042f2 100644 --- a/cmd-list-buffers.c +++ b/cmd-list-buffers.c @@ -1,4 +1,4 @@ -/* $Id: cmd-list-buffers.c,v 1.6 2009-01-18 17:20:52 nicm Exp $ */ +/* $Id: cmd-list-buffers.c,v 1.7 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -26,7 +26,7 @@ * List paste buffers. */ -void cmd_list_buffers_exec(struct cmd *, struct cmd_ctx *); +int cmd_list_buffers_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_list_buffers_entry = { "list-buffers", "lsb", @@ -41,7 +41,7 @@ const struct cmd_entry cmd_list_buffers_entry = { cmd_target_print }; -void +int cmd_list_buffers_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; @@ -52,7 +52,7 @@ cmd_list_buffers_exec(struct cmd *self, struct cmd_ctx *ctx) size_t size, in, out; if ((s = cmd_find_session(ctx, data->target)) == NULL) - return; + return (-1); if (s->sx > 35) { /* leave three for ... */ size = s->sx - 32; @@ -87,6 +87,5 @@ cmd_list_buffers_exec(struct cmd *self, struct cmd_ctx *ctx) if (tmp != NULL) xfree(tmp); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-list-clients.c b/cmd-list-clients.c index bef421e6..c920f4dc 100644 --- a/cmd-list-clients.c +++ b/cmd-list-clients.c @@ -1,4 +1,4 @@ -/* $Id: cmd-list-clients.c,v 1.11 2009-01-10 01:30:38 nicm Exp $ */ +/* $Id: cmd-list-clients.c,v 1.12 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -27,7 +27,7 @@ * List all clients. */ -void cmd_list_clients_exec(struct cmd *, struct cmd_ctx *); +int cmd_list_clients_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_list_clients_entry = { "list-clients", "lsc", @@ -42,7 +42,7 @@ const struct cmd_entry cmd_list_clients_entry = { NULL }; -void +int cmd_list_clients_exec(unused struct cmd *self, struct cmd_ctx *ctx) { struct client *c; @@ -57,6 +57,5 @@ cmd_list_clients_exec(unused struct cmd *self, struct cmd_ctx *ctx) c->session->name, c->sx, c->sy, c->tty.termname); } - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-list-commands.c b/cmd-list-commands.c index 91862c0b..99451123 100644 --- a/cmd-list-commands.c +++ b/cmd-list-commands.c @@ -1,4 +1,4 @@ -/* $Id: cmd-list-commands.c,v 1.2 2008-09-26 06:45:25 nicm Exp $ */ +/* $Id: cmd-list-commands.c,v 1.3 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -24,7 +24,7 @@ * List all commands with usages. */ -void cmd_list_commands_exec(struct cmd *, struct cmd_ctx *); +int cmd_list_commands_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_list_commands_entry = { "list-commands", "lscm", @@ -39,7 +39,7 @@ const struct cmd_entry cmd_list_commands_entry = { NULL }; -void +int cmd_list_commands_exec(unused struct cmd *self, struct cmd_ctx *ctx) { const struct cmd_entry **entryp; @@ -47,6 +47,5 @@ cmd_list_commands_exec(unused struct cmd *self, struct cmd_ctx *ctx) for (entryp = cmd_table; *entryp != NULL; entryp++) ctx->print(ctx, "%s %s", (*entryp)->name, (*entryp)->usage); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-list-keys.c b/cmd-list-keys.c index faa29916..a32f6b1a 100644 --- a/cmd-list-keys.c +++ b/cmd-list-keys.c @@ -1,4 +1,4 @@ -/* $Id: cmd-list-keys.c,v 1.12 2009-01-18 14:40:48 nicm Exp $ */ +/* $Id: cmd-list-keys.c,v 1.13 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -24,7 +24,7 @@ * List key bindings. */ -void cmd_list_keys_exec(struct cmd *, struct cmd_ctx *); +int cmd_list_keys_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_list_keys_entry = { "list-keys", "lsk", @@ -39,7 +39,7 @@ const struct cmd_entry cmd_list_keys_entry = { NULL }; -void +int cmd_list_keys_exec(unused struct cmd *self, struct cmd_ctx *ctx) { struct key_binding *bd; @@ -55,6 +55,5 @@ cmd_list_keys_exec(unused struct cmd *self, struct cmd_ctx *ctx) ctx->print(ctx, "%11s: %s", key, tmp); } - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-list-sessions.c b/cmd-list-sessions.c index e2d66ac6..135adbd6 100644 --- a/cmd-list-sessions.c +++ b/cmd-list-sessions.c @@ -1,4 +1,4 @@ -/* $Id: cmd-list-sessions.c,v 1.18 2009-01-18 12:13:21 nicm Exp $ */ +/* $Id: cmd-list-sessions.c,v 1.19 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -27,7 +27,7 @@ * List all sessions. */ -void cmd_list_sessions_exec(struct cmd *, struct cmd_ctx *); +int cmd_list_sessions_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_list_sessions_entry = { "list-sessions", "ls", "", @@ -41,7 +41,7 @@ const struct cmd_entry cmd_list_sessions_entry = { NULL }; -void +int cmd_list_sessions_exec(unused struct cmd *self, struct cmd_ctx *ctx) { struct session *s; @@ -63,6 +63,5 @@ cmd_list_sessions_exec(unused struct cmd *self, struct cmd_ctx *ctx) s->flags & SESSION_UNATTACHED ? "" : " (attached)"); } - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-list-windows.c b/cmd-list-windows.c index 9c776a6c..d84f93f0 100644 --- a/cmd-list-windows.c +++ b/cmd-list-windows.c @@ -1,4 +1,4 @@ -/* $Id: cmd-list-windows.c,v 1.29 2009-01-14 23:39:14 nicm Exp $ */ +/* $Id: cmd-list-windows.c,v 1.30 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -26,7 +26,7 @@ * List windows on given session. */ -void cmd_list_windows_exec(struct cmd *, struct cmd_ctx *); +int cmd_list_windows_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_list_windows_entry = { "list-windows", "lsw", @@ -41,7 +41,7 @@ const struct cmd_entry cmd_list_windows_entry = { cmd_target_print }; -void +int cmd_list_windows_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; @@ -55,7 +55,7 @@ cmd_list_windows_exec(struct cmd *self, struct cmd_ctx *ctx) const char *name; if ((s = cmd_find_session(ctx, data->target)) == NULL) - return; + return (-1); RB_FOREACH(wl, winlinks, &s->windows) { w = wl->window; @@ -81,6 +81,5 @@ cmd_list_windows_exec(struct cmd *self, struct cmd_ctx *ctx) } } - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-list.c b/cmd-list.c index 8edaff56..870de3da 100644 --- a/cmd-list.c +++ b/cmd-list.c @@ -1,4 +1,4 @@ -/* $Id: cmd-list.c,v 1.1 2009-01-18 14:40:48 nicm Exp $ */ +/* $Id: cmd-list.c,v 1.2 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -60,13 +60,17 @@ bad: return (NULL); } -void +int cmd_list_exec(struct cmd_list *cmdlist, struct cmd_ctx *ctx) { struct cmd *cmd; + int n; - TAILQ_FOREACH(cmd, cmdlist, qentry) - cmd_exec(cmd, ctx); + TAILQ_FOREACH(cmd, cmdlist, qentry) { + if ((n = cmd_exec(cmd, ctx)) != 0) + return (n); + } + return (0); } void diff --git a/cmd-lock-server.c b/cmd-lock-server.c index f1cf4d48..102898ad 100644 --- a/cmd-lock-server.c +++ b/cmd-lock-server.c @@ -1,4 +1,4 @@ -/* $Id: cmd-lock-server.c,v 1.1 2009-01-11 00:48:42 nicm Exp $ */ +/* $Id: cmd-lock-server.c,v 1.2 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott @@ -28,7 +28,7 @@ * Lock server. */ -void cmd_lock_server_exec(struct cmd *, struct cmd_ctx *); +int cmd_lock_server_exec(struct cmd *, struct cmd_ctx *); int cmd_lock_server_callback(void *, const char *); @@ -45,11 +45,10 @@ const struct cmd_entry cmd_lock_server_entry = { NULL, }; -void -cmd_lock_server_exec(unused struct cmd *self, struct cmd_ctx *ctx) +int +cmd_lock_server_exec(unused struct cmd *self, unused struct cmd_ctx *ctx) { server_lock(); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-move-window.c b/cmd-move-window.c index 4420006f..65812b17 100644 --- a/cmd-move-window.c +++ b/cmd-move-window.c @@ -1,4 +1,4 @@ -/* $Id: cmd-move-window.c,v 1.3 2008-12-10 20:25:41 nicm Exp $ */ +/* $Id: cmd-move-window.c,v 1.4 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott @@ -26,7 +26,7 @@ * Move a window. */ -void cmd_move_window_exec(struct cmd *, struct cmd_ctx *); +int cmd_move_window_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_move_window_entry = { "move-window", "movew", @@ -41,7 +41,7 @@ const struct cmd_entry cmd_move_window_entry = { cmd_srcdst_print }; -void +int cmd_move_window_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_srcdst_data *data = self->data; @@ -52,11 +52,11 @@ cmd_move_window_exec(struct cmd *self, struct cmd_ctx *ctx) int destroyed, idx; if ((wl_src = cmd_find_window(ctx, data->src, &src)) == NULL) - return; + return (-1); if (arg_parse_window(data->dst, &dst, &idx) != 0) { ctx->error(ctx, "bad window: %s", data->dst); - return; + return (-1); } if (dst == NULL) dst = ctx->cursession; @@ -64,7 +64,7 @@ cmd_move_window_exec(struct cmd *self, struct cmd_ctx *ctx) dst = cmd_current_session(ctx); if (dst == NULL) { ctx->error(ctx, "session not found: %s", data->dst); - return; + return (-1); } wl_dst = NULL; @@ -72,7 +72,7 @@ cmd_move_window_exec(struct cmd *self, struct cmd_ctx *ctx) wl_dst = winlink_find_by_index(&dst->windows, idx); if (wl_dst != NULL) { if (wl_dst->window == wl_src->window) - goto out; + return (0); if (data->flags & CMD_KFLAG) { /* @@ -94,7 +94,7 @@ cmd_move_window_exec(struct cmd *self, struct cmd_ctx *ctx) wl_dst = session_attach(dst, wl_src->window, idx); if (wl_dst == NULL) { ctx->error(ctx, "index in use: %d", idx); - return; + return (-1); } destroyed = session_detach(src, wl_src); @@ -117,7 +117,5 @@ cmd_move_window_exec(struct cmd *self, struct cmd_ctx *ctx) } recalculate_sizes(); -out: - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-new-session.c b/cmd-new-session.c index e8315d16..ed7f129a 100644 --- a/cmd-new-session.c +++ b/cmd-new-session.c @@ -1,4 +1,4 @@ -/* $Id: cmd-new-session.c,v 1.35 2009-01-18 14:40:48 nicm Exp $ */ +/* $Id: cmd-new-session.c,v 1.36 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -25,7 +25,7 @@ */ int cmd_new_session_parse(struct cmd *, int, char **, char **); -void cmd_new_session_exec(struct cmd *, struct cmd_ctx *); +int cmd_new_session_exec(struct cmd *, struct cmd_ctx *); void cmd_new_session_send(struct cmd *, struct buffer *); void cmd_new_session_recv(struct cmd *, struct buffer *); void cmd_new_session_free(struct cmd *); @@ -107,7 +107,7 @@ usage: return (-1); } -void +int cmd_new_session_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_new_session_data *data = self->data; @@ -117,22 +117,22 @@ cmd_new_session_exec(struct cmd *self, struct cmd_ctx *ctx) u_int sx, sy; if (ctx->curclient != NULL) - return; + return (0); if (!data->flag_detached) { if (c == NULL) { ctx->error(ctx, "no client to attach to"); - return; + return (-1); } if (!(c->flags & CLIENT_TERMINAL)) { ctx->error(ctx, "not a terminal"); - return; + return (-1); } } if (data->newname != NULL && session_find(data->newname) != NULL) { ctx->error(ctx, "duplicate session: %s", data->newname); - return; + return (-1); } cmd = data->cmd; @@ -160,7 +160,7 @@ cmd_new_session_exec(struct cmd *self, struct cmd_ctx *ctx) if (!data->flag_detached && tty_open(&c->tty, &cause) != 0) { ctx->error(ctx, "%s", cause); xfree(cause); - return; + return (-1); } @@ -179,6 +179,8 @@ cmd_new_session_exec(struct cmd *self, struct cmd_ctx *ctx) server_write_client(c, MSG_READY, NULL, 0); server_redraw_client(c); } + + return (1); } void diff --git a/cmd-new-window.c b/cmd-new-window.c index 25a1fb21..f9dec3ee 100644 --- a/cmd-new-window.c +++ b/cmd-new-window.c @@ -1,4 +1,4 @@ -/* $Id: cmd-new-window.c,v 1.28 2009-01-18 14:40:48 nicm Exp $ */ +/* $Id: cmd-new-window.c,v 1.29 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -27,7 +27,7 @@ */ int cmd_new_window_parse(struct cmd *, int, char **, char **); -void cmd_new_window_exec(struct cmd *, struct cmd_ctx *); +int cmd_new_window_exec(struct cmd *, struct cmd_ctx *); void cmd_new_window_send(struct cmd *, struct buffer *); void cmd_new_window_recv(struct cmd *, struct buffer *); void cmd_new_window_free(struct cmd *); @@ -109,7 +109,7 @@ usage: return (-1); } -void +int cmd_new_window_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_new_window_data *data = self->data; @@ -119,11 +119,11 @@ cmd_new_window_exec(struct cmd *self, struct cmd_ctx *ctx) int idx; if (data == NULL) - return; + return (0); if (arg_parse_window(data->target, &s, &idx) != 0) { ctx->error(ctx, "bad window: %s", data->target); - return; + return (-1); } if (s == NULL) s = ctx->cursession; @@ -131,7 +131,7 @@ cmd_new_window_exec(struct cmd *self, struct cmd_ctx *ctx) s = cmd_current_session(ctx); if (s == NULL) { ctx->error(ctx, "session not found: %s", data->target); - return; + return (-1); } cmd = data->cmd; @@ -145,7 +145,7 @@ cmd_new_window_exec(struct cmd *self, struct cmd_ctx *ctx) wl = session_new(s, data->name, cmd, cwd, idx); if (wl == NULL) { ctx->error(ctx, "command failed: %s", cmd); - return; + return (-1); } if (!data->flag_detached) { session_select(s, wl->idx); @@ -153,8 +153,7 @@ cmd_new_window_exec(struct cmd *self, struct cmd_ctx *ctx) } else server_status_session(s); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } void diff --git a/cmd-next-window.c b/cmd-next-window.c index 72c0f033..cbd74c20 100644 --- a/cmd-next-window.c +++ b/cmd-next-window.c @@ -1,4 +1,4 @@ -/* $Id: cmd-next-window.c,v 1.14 2009-01-18 18:31:45 nicm Exp $ */ +/* $Id: cmd-next-window.c,v 1.15 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -25,7 +25,7 @@ */ void cmd_next_window_init(struct cmd *, int); -void cmd_next_window_exec(struct cmd *, struct cmd_ctx *); +int cmd_next_window_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_next_window_entry = { "next-window", "next", @@ -52,7 +52,7 @@ cmd_next_window_init(struct cmd *self, int key) data->flags |= CMD_AFLAG; } -void +int cmd_next_window_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; @@ -60,7 +60,7 @@ cmd_next_window_exec(struct cmd *self, struct cmd_ctx *ctx) int activity; if ((s = cmd_find_session(ctx, data->target)) == NULL) - return; + return (-1); activity = 0; if (data->flags & CMD_AFLAG) @@ -68,10 +68,11 @@ cmd_next_window_exec(struct cmd *self, struct cmd_ctx *ctx) if (session_next(s, activity) == 0) server_redraw_session(s); - else + else { ctx->error(ctx, "no next window"); + return (-1); + } recalculate_sizes(); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-paste-buffer.c b/cmd-paste-buffer.c index 5077b392..2598b39d 100644 --- a/cmd-paste-buffer.c +++ b/cmd-paste-buffer.c @@ -1,4 +1,4 @@ -/* $Id: cmd-paste-buffer.c,v 1.14 2009-01-11 23:31:46 nicm Exp $ */ +/* $Id: cmd-paste-buffer.c,v 1.15 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -26,7 +26,7 @@ * Paste paste buffer if present. */ -void cmd_paste_buffer_exec(struct cmd *, struct cmd_ctx *); +int cmd_paste_buffer_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_paste_buffer_entry = { "paste-buffer", "pasteb", @@ -41,7 +41,7 @@ const struct cmd_entry cmd_paste_buffer_entry = { cmd_buffer_print }; -void +int cmd_paste_buffer_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_buffer_data *data = self->data; @@ -51,14 +51,16 @@ cmd_paste_buffer_exec(struct cmd *self, struct cmd_ctx *ctx) struct paste_buffer *pb; if ((wl = cmd_find_window(ctx, data->target, &s)) == NULL) - return; + return (-1); w = wl->window; if (data->buffer == -1) pb = paste_get_top(&s->buffers); else { - if ((pb = paste_get_index(&s->buffers, data->buffer)) == NULL) + if ((pb = paste_get_index(&s->buffers, data->buffer)) == NULL) { ctx->error(ctx, "no buffer %d", data->buffer); + return (-1); + } } if (pb != NULL) @@ -72,6 +74,5 @@ cmd_paste_buffer_exec(struct cmd *self, struct cmd_ctx *ctx) paste_free_index(&s->buffers, data->buffer); } - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-previous-window.c b/cmd-previous-window.c index 1c4148df..b2372777 100644 --- a/cmd-previous-window.c +++ b/cmd-previous-window.c @@ -1,4 +1,4 @@ -/* $Id: cmd-previous-window.c,v 1.14 2009-01-18 18:31:45 nicm Exp $ */ +/* $Id: cmd-previous-window.c,v 1.15 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -25,7 +25,7 @@ */ void cmd_previous_window_init(struct cmd *, int); -void cmd_previous_window_exec(struct cmd *, struct cmd_ctx *); +int cmd_previous_window_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_previous_window_entry = { "previous-window", "prev", @@ -52,7 +52,7 @@ cmd_previous_window_init(struct cmd *self, int key) data->flags |= CMD_AFLAG; } -void +int cmd_previous_window_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; @@ -60,7 +60,7 @@ cmd_previous_window_exec(struct cmd *self, struct cmd_ctx *ctx) int activity; if ((s = cmd_find_session(ctx, data->target)) == NULL) - return; + return (-1); activity = 0; if (data->flags & CMD_AFLAG) @@ -68,10 +68,11 @@ cmd_previous_window_exec(struct cmd *self, struct cmd_ctx *ctx) if (session_previous(s, activity) == 0) server_redraw_session(s); - else + else { ctx->error(ctx, "no previous window"); + return (-1); + } recalculate_sizes(); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-refresh-client.c b/cmd-refresh-client.c index 9c413aa0..31168045 100644 --- a/cmd-refresh-client.c +++ b/cmd-refresh-client.c @@ -1,4 +1,4 @@ -/* $Id: cmd-refresh-client.c,v 1.7 2008-06-18 22:21:51 nicm Exp $ */ +/* $Id: cmd-refresh-client.c,v 1.8 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -24,7 +24,7 @@ * Refresh client. */ -void cmd_refresh_client_exec(struct cmd *, struct cmd_ctx *); +int cmd_refresh_client_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_refresh_client_entry = { "refresh-client", "refresh", @@ -39,17 +39,16 @@ const struct cmd_entry cmd_refresh_client_entry = { cmd_target_print }; -void +int cmd_refresh_client_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; struct client *c; if ((c = cmd_find_client(ctx, data->target)) == NULL) - return; + return (-1); server_redraw_client(c); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-rename-session.c b/cmd-rename-session.c index 13f7b485..02e59fdb 100644 --- a/cmd-rename-session.c +++ b/cmd-rename-session.c @@ -1,4 +1,4 @@ -/* $Id: cmd-rename-session.c,v 1.14 2009-01-14 22:16:56 nicm Exp $ */ +/* $Id: cmd-rename-session.c,v 1.15 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -26,7 +26,7 @@ * Change session name. */ -void cmd_rename_session_exec(struct cmd *, struct cmd_ctx *); +int cmd_rename_session_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_rename_session_entry = { "rename-session", "rename", @@ -41,18 +41,17 @@ const struct cmd_entry cmd_rename_session_entry = { cmd_target_print }; -void +int cmd_rename_session_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; struct session *s; if ((s = cmd_find_session(ctx, data->target)) == NULL) - return; + return (-1); xfree(s->name); s->name = xstrdup(data->arg); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-rename-window.c b/cmd-rename-window.c index 1180414a..bf504cdb 100644 --- a/cmd-rename-window.c +++ b/cmd-rename-window.c @@ -1,4 +1,4 @@ -/* $Id: cmd-rename-window.c,v 1.24 2009-01-14 22:16:57 nicm Exp $ */ +/* $Id: cmd-rename-window.c,v 1.25 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -26,7 +26,7 @@ * Rename a window. */ -void cmd_rename_window_exec(struct cmd *, struct cmd_ctx *); +int cmd_rename_window_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_rename_window_entry = { "rename-window", "renamew", @@ -41,7 +41,7 @@ const struct cmd_entry cmd_rename_window_entry = { cmd_target_print }; -void +int cmd_rename_window_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; @@ -49,13 +49,12 @@ cmd_rename_window_exec(struct cmd *self, struct cmd_ctx *ctx) struct winlink *wl; if ((wl = cmd_find_window(ctx, data->target, &s)) == NULL) - return; + return (-1); xfree(wl->window->name); wl->window->name = xstrdup(data->arg); server_status_session(s); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-resize-pane-down.c b/cmd-resize-pane-down.c index 6ec2b5b9..d6839ea3 100644 --- a/cmd-resize-pane-down.c +++ b/cmd-resize-pane-down.c @@ -1,4 +1,4 @@ -/* $Id: cmd-resize-pane-down.c,v 1.5 2009-01-14 22:16:57 nicm Exp $ */ +/* $Id: cmd-resize-pane-down.c,v 1.6 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -27,7 +27,7 @@ */ void cmd_resize_pane_down_init(struct cmd *, int); -void cmd_resize_pane_down_exec(struct cmd *, struct cmd_ctx *); +int cmd_resize_pane_down_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_resize_pane_down_entry = { "resize-pane-down", "resizep-down", @@ -54,7 +54,7 @@ cmd_resize_pane_down_init(struct cmd *self, int key) data->arg = xstrdup("5"); } -void +int cmd_resize_pane_down_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_pane_data *data = self->data; @@ -64,14 +64,14 @@ cmd_resize_pane_down_exec(struct cmd *self, struct cmd_ctx *ctx) u_int adjust; if ((wl = cmd_find_window(ctx, data->target, NULL)) == NULL) - return; + return (-1); if (data->pane == -1) wp = wl->window->active; else { wp = window_pane_at_index(wl->window, data->pane); if (wp == NULL) { ctx->error(ctx, "no pane: %d", data->pane); - return; + return (-1); } } @@ -81,7 +81,7 @@ cmd_resize_pane_down_exec(struct cmd *self, struct cmd_ctx *ctx) adjust = strtonum(data->arg, 1, INT_MAX, &errstr); if (errstr != NULL) { ctx->error(ctx, "adjustment %s: %s", errstr, data->arg); - return; + return (-1); } } @@ -93,7 +93,7 @@ cmd_resize_pane_down_exec(struct cmd *self, struct cmd_ctx *ctx) if (TAILQ_NEXT(wp, entry) == NULL) { if (wp == TAILQ_FIRST(&wl->window->panes)) { /* Only one pane. */ - goto out; + return (0); } wp = TAILQ_PREV(wp, window_panes, entry); } @@ -114,7 +114,5 @@ cmd_resize_pane_down_exec(struct cmd *self, struct cmd_ctx *ctx) server_redraw_window(wl->window); -out: - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-resize-pane-up.c b/cmd-resize-pane-up.c index b89c39a0..578a4316 100644 --- a/cmd-resize-pane-up.c +++ b/cmd-resize-pane-up.c @@ -1,4 +1,4 @@ -/* $Id: cmd-resize-pane-up.c,v 1.5 2009-01-14 22:16:57 nicm Exp $ */ +/* $Id: cmd-resize-pane-up.c,v 1.6 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -27,7 +27,7 @@ */ void cmd_resize_pane_up_init(struct cmd *, int); -void cmd_resize_pane_up_exec(struct cmd *, struct cmd_ctx *); +int cmd_resize_pane_up_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_resize_pane_up_entry = { "resize-pane-up", "resizep-up", @@ -54,7 +54,7 @@ cmd_resize_pane_up_init(struct cmd *self, int key) data->arg = xstrdup("5"); } -void +int cmd_resize_pane_up_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_pane_data *data = self->data; @@ -64,14 +64,14 @@ cmd_resize_pane_up_exec(struct cmd *self, struct cmd_ctx *ctx) u_int adjust; if ((wl = cmd_find_window(ctx, data->target, NULL)) == NULL) - return; + return (-1); if (data->pane == -1) wp = wl->window->active; else { wp = window_pane_at_index(wl->window, data->pane); if (wp == NULL) { ctx->error(ctx, "no pane: %d", data->pane); - return; + return (-1); } } @@ -81,7 +81,7 @@ cmd_resize_pane_up_exec(struct cmd *self, struct cmd_ctx *ctx) adjust = strtonum(data->arg, 1, INT_MAX, &errstr); if (errstr != NULL) { ctx->error(ctx, "adjustment %s: %s", errstr, data->arg); - return; + return (-1); } } @@ -94,7 +94,7 @@ cmd_resize_pane_up_exec(struct cmd *self, struct cmd_ctx *ctx) if (wq == NULL) { if (wp == TAILQ_FIRST(&wl->window->panes)) { /* Only one pane. */ - goto out; + return (0); } wq = wp; wp = TAILQ_PREV(wq, window_panes, entry); @@ -109,7 +109,5 @@ cmd_resize_pane_up_exec(struct cmd *self, struct cmd_ctx *ctx) server_redraw_window(wl->window); -out: - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-respawn-window.c b/cmd-respawn-window.c index a89a8f0a..deccb6f8 100644 --- a/cmd-respawn-window.c +++ b/cmd-respawn-window.c @@ -1,4 +1,4 @@ -/* $Id: cmd-respawn-window.c,v 1.11 2009-01-14 22:16:57 nicm Exp $ */ +/* $Id: cmd-respawn-window.c,v 1.12 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott @@ -26,7 +26,7 @@ * Respawn a window (restart the command). Kill existing if -k given. */ -void cmd_respawn_window_exec(struct cmd *, struct cmd_ctx *); +int cmd_respawn_window_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_respawn_window_entry = { "respawn-window", "respawnw", @@ -41,7 +41,7 @@ const struct cmd_entry cmd_respawn_window_entry = { cmd_target_print }; -void +int cmd_respawn_window_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; @@ -54,7 +54,7 @@ cmd_respawn_window_exec(struct cmd *self, struct cmd_ctx *ctx) u_int i; if ((wl = cmd_find_window(ctx, data->target, &s)) == NULL) - return; + return (-1); w = wl->window; if (!(data->flags & CMD_KFLAG)) { @@ -63,7 +63,7 @@ cmd_respawn_window_exec(struct cmd *self, struct cmd_ctx *ctx) continue; ctx->error(ctx, "window still active: %s:%d", s->name, wl->idx); - return; + return (-1); } } @@ -79,13 +79,12 @@ cmd_respawn_window_exec(struct cmd *self, struct cmd_ctx *ctx) window_pane_resize(wp, w->sx, w->sy); if (window_pane_spawn(wp, data->arg, NULL, env) != 0) { ctx->error(ctx, "respawn failed: %s:%d", s->name, wl->idx); - return; + return (-1); } screen_reinit(&wp->base); recalculate_sizes(); server_redraw_window(w); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-save-buffer.c b/cmd-save-buffer.c index 9d6a026e..696e9545 100644 --- a/cmd-save-buffer.c +++ b/cmd-save-buffer.c @@ -1,4 +1,4 @@ -/* $Id: cmd-save-buffer.c,v 1.2 2009-01-14 22:16:57 nicm Exp $ */ +/* $Id: cmd-save-buffer.c,v 1.3 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2009 Tiago Cunha @@ -28,7 +28,7 @@ * Saves a session paste buffer to a file. */ -void cmd_save_buffer_exec(struct cmd *, struct cmd_ctx *); +int cmd_save_buffer_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_save_buffer_entry = { "save-buffer", "saveb", @@ -43,7 +43,7 @@ const struct cmd_entry cmd_save_buffer_entry = { cmd_buffer_print }; -void +int cmd_save_buffer_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_buffer_data *data = self->data; @@ -53,18 +53,22 @@ cmd_save_buffer_exec(struct cmd *self, struct cmd_ctx *ctx) FILE *f; if ((s = cmd_find_session(ctx, data->target)) == NULL) - return; + return (-1); if (data->buffer == -1) { - if ((pb = paste_get_top(&s->buffers)) == NULL) + if ((pb = paste_get_top(&s->buffers)) == NULL) { ctx->error(ctx, "no buffers"); + return (-1); + } } else { - if ((pb = paste_get_index(&s->buffers, data->buffer)) == NULL) + if ((pb = paste_get_index(&s->buffers, data->buffer)) == NULL) { ctx->error(ctx, "no buffer %d", data->buffer); + return (-1); + } } if (pb == NULL) - return; + return (0); mask = umask(S_IRWXG | S_IRWXO); if (data->flags & CMD_AFLAG) @@ -73,18 +77,17 @@ cmd_save_buffer_exec(struct cmd *self, struct cmd_ctx *ctx) f = fopen(data->arg, "w"); if (f == NULL) { ctx->error(ctx, "%s: %s", data->arg, strerror(errno)); - return; + return (-1); } if (fwrite(pb->data, 1, strlen(pb->data), f) != strlen(pb->data)) { ctx->error(ctx, "%s: fwrite error", data->arg); fclose(f); - return; + return (-1); } fclose(f); umask(mask); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-scroll-mode.c b/cmd-scroll-mode.c index f1f448bd..def0d213 100644 --- a/cmd-scroll-mode.c +++ b/cmd-scroll-mode.c @@ -1,4 +1,4 @@ -/* $Id: cmd-scroll-mode.c,v 1.14 2009-01-11 23:31:46 nicm Exp $ */ +/* $Id: cmd-scroll-mode.c,v 1.15 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -24,7 +24,7 @@ * Enter scroll mode. */ -void cmd_scroll_mode_exec(struct cmd *, struct cmd_ctx *); +int cmd_scroll_mode_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_scroll_mode_entry = { "scroll-mode", NULL, @@ -39,17 +39,16 @@ const struct cmd_entry cmd_scroll_mode_entry = { cmd_target_print }; -void +int cmd_scroll_mode_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; struct winlink *wl; if ((wl = cmd_find_window(ctx, data->target, NULL)) == NULL) - return; + return (-1); window_pane_set_mode(wl->window->active, &window_scroll_mode); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-select-pane.c b/cmd-select-pane.c index 0c1b5bef..b7f4e65a 100644 --- a/cmd-select-pane.c +++ b/cmd-select-pane.c @@ -1,4 +1,4 @@ -/* $Id: cmd-select-pane.c,v 1.1 2009-01-14 19:56:55 nicm Exp $ */ +/* $Id: cmd-select-pane.c,v 1.2 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -24,7 +24,7 @@ * Select pane. */ -void cmd_select_pane_exec(struct cmd *, struct cmd_ctx *); +int cmd_select_pane_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_select_pane_entry = { "select-pane", "selectp", @@ -39,7 +39,7 @@ const struct cmd_entry cmd_select_pane_entry = { cmd_pane_print }; -void +int cmd_select_pane_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_pane_data *data = self->data; @@ -47,23 +47,22 @@ cmd_select_pane_exec(struct cmd *self, struct cmd_ctx *ctx) struct window_pane *wp; if ((wl = cmd_find_window(ctx, data->target, NULL)) == NULL) - return; + return (-1); if (data->pane == -1) wp = wl->window->active; else { wp = window_pane_at_index(wl->window, data->pane); if (wp == NULL) { ctx->error(ctx, "no pane: %d", data->pane); - return; + return (-1); } } if (wp->flags & PANE_HIDDEN) { ctx->error(ctx, "pane %d is hidden", data->pane); - return; + return (-1); } window_set_active_pane(wl->window, wp); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-select-prompt.c b/cmd-select-prompt.c index 16c6fe53..753476b0 100644 --- a/cmd-select-prompt.c +++ b/cmd-select-prompt.c @@ -1,4 +1,4 @@ -/* $Id: cmd-select-prompt.c,v 1.5 2009-01-11 00:48:42 nicm Exp $ */ +/* $Id: cmd-select-prompt.c,v 1.6 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott @@ -26,7 +26,7 @@ * Prompt for window index and select it. */ -void cmd_select_prompt_exec(struct cmd *, struct cmd_ctx *); +int cmd_select_prompt_exec(struct cmd *, struct cmd_ctx *); int cmd_select_prompt_callback(void *, const char *); @@ -43,22 +43,21 @@ const struct cmd_entry cmd_select_prompt_entry = { cmd_target_print }; -void +int cmd_select_prompt_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; struct client *c; if ((c = cmd_find_client(ctx, data->target)) == NULL) - return; + return (-1); if (c->prompt_string != NULL) - return; + return (0); server_set_client_prompt(c, "index ", cmd_select_prompt_callback, c, 0); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } int diff --git a/cmd-select-window.c b/cmd-select-window.c index 716e633a..a5780769 100644 --- a/cmd-select-window.c +++ b/cmd-select-window.c @@ -1,4 +1,4 @@ -/* $Id: cmd-select-window.c,v 1.20 2008-12-10 20:25:41 nicm Exp $ */ +/* $Id: cmd-select-window.c,v 1.21 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -27,7 +27,7 @@ */ void cmd_select_window_init(struct cmd *, int); -void cmd_select_window_exec(struct cmd *, struct cmd_ctx *); +int cmd_select_window_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_select_window_entry = { "select-window", "selectw", @@ -53,7 +53,7 @@ cmd_select_window_init(struct cmd *self, int key) xasprintf(&data->target, ":%d", key - '0'); } -void +int cmd_select_window_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; @@ -61,12 +61,11 @@ cmd_select_window_exec(struct cmd *self, struct cmd_ctx *ctx) struct session *s; if ((wl = cmd_find_window(ctx, data->target, &s)) == NULL) - return; + return (-1); if (session_select(s, wl->idx) == 0) server_redraw_session(s); recalculate_sizes(); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-send-keys.c b/cmd-send-keys.c index 95e73f02..4443729e 100644 --- a/cmd-send-keys.c +++ b/cmd-send-keys.c @@ -1,4 +1,4 @@ -/* $Id: cmd-send-keys.c,v 1.17 2009-01-18 14:40:48 nicm Exp $ */ +/* $Id: cmd-send-keys.c,v 1.18 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott @@ -27,7 +27,7 @@ */ int cmd_send_keys_parse(struct cmd *, int, char **, char **); -void cmd_send_keys_exec(struct cmd *, struct cmd_ctx *); +int cmd_send_keys_exec(struct cmd *, struct cmd_ctx *); void cmd_send_keys_send(struct cmd *, struct buffer *); void cmd_send_keys_recv(struct cmd *, struct buffer *); void cmd_send_keys_free(struct cmd *); @@ -106,7 +106,7 @@ usage: return (-1); } -void +int cmd_send_keys_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_send_keys_data *data = self->data; @@ -114,18 +114,17 @@ cmd_send_keys_exec(struct cmd *self, struct cmd_ctx *ctx) u_int i; if (data == NULL) - return; + return (-1); if ((wl = cmd_find_window(ctx, data->target, NULL)) == NULL) - return; + return (-1); for (i = 0; i < data->nkeys; i++) { window_pane_key( wl->window->active, ctx->curclient, data->keys[i]); } - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } void diff --git a/cmd-send-prefix.c b/cmd-send-prefix.c index 26cdd6cc..810202a8 100644 --- a/cmd-send-prefix.c +++ b/cmd-send-prefix.c @@ -1,4 +1,4 @@ -/* $Id: cmd-send-prefix.c,v 1.22 2009-01-14 22:13:30 nicm Exp $ */ +/* $Id: cmd-send-prefix.c,v 1.23 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -24,7 +24,7 @@ * Send prefix key as a key. */ -void cmd_send_prefix_exec(struct cmd *, struct cmd_ctx *); +int cmd_send_prefix_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_send_prefix_entry = { "send-prefix", NULL, @@ -39,7 +39,7 @@ const struct cmd_entry cmd_send_prefix_entry = { cmd_target_print }; -void +int cmd_send_prefix_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; @@ -48,11 +48,10 @@ cmd_send_prefix_exec(struct cmd *self, struct cmd_ctx *ctx) int key; if ((wl = cmd_find_window(ctx, data->target, &s)) == NULL) - return; + return (-1); key = options_get_number(&s->options, "prefix"); window_pane_key(wl->window->active, ctx->curclient, key); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-server-info.c b/cmd-server-info.c index 5f1e1120..11b55468 100644 --- a/cmd-server-info.c +++ b/cmd-server-info.c @@ -1,4 +1,4 @@ -/* $Id: cmd-server-info.c,v 1.8 2009-01-18 18:06:37 nicm Exp $ */ +/* $Id: cmd-server-info.c,v 1.9 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott @@ -31,7 +31,7 @@ * Show various information about server. */ -void cmd_server_info_exec(struct cmd *, struct cmd_ctx *); +int cmd_server_info_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_server_info_entry = { "server-info", "info", @@ -46,7 +46,7 @@ const struct cmd_entry cmd_server_info_entry = { NULL }; -void +int cmd_server_info_exec(unused struct cmd *self, struct cmd_ctx *ctx) { struct tty_term *term; @@ -141,6 +141,5 @@ cmd_server_info_exec(unused struct cmd *self, struct cmd_ctx *ctx) } ctx->print(ctx, ""); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-set-buffer.c b/cmd-set-buffer.c index 9f93afe4..dd8f4336 100644 --- a/cmd-set-buffer.c +++ b/cmd-set-buffer.c @@ -1,4 +1,4 @@ -/* $Id: cmd-set-buffer.c,v 1.5 2009-01-14 22:16:57 nicm Exp $ */ +/* $Id: cmd-set-buffer.c,v 1.6 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -26,7 +26,7 @@ * Add or set a session paste buffer. */ -void cmd_set_buffer_exec(struct cmd *, struct cmd_ctx *); +int cmd_set_buffer_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_set_buffer_entry = { "set-buffer", "setb", @@ -41,7 +41,7 @@ const struct cmd_entry cmd_set_buffer_entry = { cmd_buffer_print }; -void +int cmd_set_buffer_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_buffer_data *data = self->data; @@ -49,16 +49,15 @@ cmd_set_buffer_exec(struct cmd *self, struct cmd_ctx *ctx) u_int limit; if ((s = cmd_find_session(ctx, data->target)) == NULL) - return; + return (-1); limit = options_get_number(&s->options, "buffer-limit"); if (data->buffer == -1) paste_add(&s->buffers, data->arg, limit); - else { - if (paste_replace(&s->buffers, data->buffer, data->arg) != 0) - ctx->error(ctx, "no buffer %d", data->buffer); + else if (paste_replace(&s->buffers, data->buffer, data->arg) != 0) { + ctx->error(ctx, "no buffer %d", data->buffer); + return (-1); } - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-set-option.c b/cmd-set-option.c index d63cc938..cad32e58 100644 --- a/cmd-set-option.c +++ b/cmd-set-option.c @@ -1,4 +1,4 @@ -/* $Id: cmd-set-option.c,v 1.54 2009-01-14 22:13:30 nicm Exp $ */ +/* $Id: cmd-set-option.c,v 1.55 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -27,7 +27,7 @@ * Set an option. */ -void cmd_set_option_exec(struct cmd *, struct cmd_ctx *); +int cmd_set_option_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_set_option_entry = { "set-option", "set", @@ -68,7 +68,7 @@ const struct set_option_entry set_option_table[NSETOPTION] = { { "status-right-length", SET_OPTION_NUMBER, 0, SHRT_MAX, NULL }, }; -void +int cmd_set_option_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_option_data *data = self->data; @@ -82,13 +82,13 @@ cmd_set_option_exec(struct cmd *self, struct cmd_ctx *ctx) oo = &global_options; else { if ((s = cmd_find_session(ctx, data->target)) == NULL) - return; + return (-1); oo = &s->options; } if (*data->option == '\0') { ctx->error(ctx, "invalid option"); - return; + return (-1); } entry = NULL; @@ -98,7 +98,7 @@ cmd_set_option_exec(struct cmd *self, struct cmd_ctx *ctx) continue; if (entry != NULL) { ctx->error(ctx, "ambiguous option: %s", data->option); - return; + return (-1); } entry = &set_option_table[i]; @@ -108,25 +108,25 @@ cmd_set_option_exec(struct cmd *self, struct cmd_ctx *ctx) } if (entry == NULL) { ctx->error(ctx, "unknown option: %s", data->option); - return; + return (-1); } if (data->flags & CMD_UFLAG) { if (data->flags & CMD_GFLAG) { ctx->error(ctx, "can't unset global option: %s", entry->name); - return; + return (-1); } if (data->value != NULL) { ctx->error(ctx, "value passed to unset option: %s", entry->name); - return; + return (-1); } if (options_remove(oo, entry->name) != 0) { ctx->error(ctx, "can't unset option, not set: %s", entry->name); - return; + return (-1); } ctx->info(ctx, "unset option: %s", entry->name); } else { @@ -159,6 +159,5 @@ cmd_set_option_exec(struct cmd *self, struct cmd_ctx *ctx) server_redraw_client(c); } - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-set-password.c b/cmd-set-password.c index 17817ac1..ae64b4c5 100644 --- a/cmd-set-password.c +++ b/cmd-set-password.c @@ -1,4 +1,4 @@ -/* $Id: cmd-set-password.c,v 1.2 2009-01-18 14:40:48 nicm Exp $ */ +/* $Id: cmd-set-password.c,v 1.3 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -28,7 +28,7 @@ */ int cmd_set_password_parse(struct cmd *, int, char **, char **); -void cmd_set_password_exec(struct cmd *, struct cmd_ctx *); +int cmd_set_password_exec(struct cmd *, struct cmd_ctx *); void cmd_set_password_send(struct cmd *, struct buffer *); void cmd_set_password_recv(struct cmd *, struct buffer *); void cmd_set_password_free(struct cmd *); @@ -102,14 +102,14 @@ usage: return (-1); } -void +int cmd_set_password_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_set_password_data *data = self->data; if (data->password == NULL) { ctx->error(ctx, "failed to encrypt password"); - return; + return (-1); } if (server_password != NULL) @@ -120,8 +120,7 @@ cmd_set_password_exec(struct cmd *self, struct cmd_ctx *ctx) server_password = xstrdup(data->password); log_debug("pw now %s", server_password); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } void diff --git a/cmd-set-window-option.c b/cmd-set-window-option.c index 4b866712..7e08c992 100644 --- a/cmd-set-window-option.c +++ b/cmd-set-window-option.c @@ -1,4 +1,4 @@ -/* $Id: cmd-set-window-option.c,v 1.20 2009-01-18 14:40:48 nicm Exp $ */ +/* $Id: cmd-set-window-option.c,v 1.21 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott @@ -28,7 +28,7 @@ */ int cmd_set_window_option_parse(struct cmd *, int, char **, char **); -void cmd_set_window_option_exec(struct cmd *, struct cmd_ctx *); +int cmd_set_window_option_exec(struct cmd *, struct cmd_ctx *); void cmd_set_window_option_send(struct cmd *, struct buffer *); void cmd_set_window_option_recv(struct cmd *, struct buffer *); void cmd_set_window_option_free(struct cmd *); @@ -69,7 +69,7 @@ const struct set_option_entry set_window_option_table[NSETWINDOWOPTION] = { { "xterm-keys", SET_OPTION_FLAG, 0, 0, NULL }, }; -void +int cmd_set_window_option_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_option_data *data = self->data; @@ -83,13 +83,13 @@ cmd_set_window_option_exec(struct cmd *self, struct cmd_ctx *ctx) oo = &global_window_options; else { if ((wl = cmd_find_window(ctx, data->target, NULL)) == NULL) - return; + return (-1); oo = &wl->window->options; } if (*data->option == '\0') { ctx->error(ctx, "invalid option"); - return; + return (-1); } entry = NULL; @@ -99,7 +99,7 @@ cmd_set_window_option_exec(struct cmd *self, struct cmd_ctx *ctx) continue; if (entry != NULL) { ctx->error(ctx, "ambiguous option: %s", data->option); - return; + return (-1); } entry = &set_window_option_table[i]; @@ -109,25 +109,25 @@ cmd_set_window_option_exec(struct cmd *self, struct cmd_ctx *ctx) } if (entry == NULL) { ctx->error(ctx, "unknown option: %s", data->option); - return; + return (-1); } if (data->flags & CMD_UFLAG) { if (data->flags & CMD_GFLAG) { ctx->error(ctx, "can't unset global option: %s", entry->name); - return; + return (-1); } if (data->value != NULL) { ctx->error(ctx, "value passed to unset option: %s", entry->name); - return; + return (-1); } if (options_remove(oo, entry->name) != 0) { ctx->error(ctx, "can't unset option, not set: %s", entry->name); - return; + return (-1); } ctx->info(ctx, "unset option: %s", entry->name); } else { @@ -160,6 +160,5 @@ cmd_set_window_option_exec(struct cmd *self, struct cmd_ctx *ctx) server_redraw_client(c); } - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-show-buffer.c b/cmd-show-buffer.c index 25bc4bd3..d065f50f 100644 --- a/cmd-show-buffer.c +++ b/cmd-show-buffer.c @@ -1,4 +1,4 @@ -/* $Id: cmd-show-buffer.c,v 1.3 2008-12-10 20:25:41 nicm Exp $ */ +/* $Id: cmd-show-buffer.c,v 1.4 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -26,7 +26,7 @@ * Show a session paste buffer. */ -void cmd_show_buffer_exec(struct cmd *, struct cmd_ctx *); +int cmd_show_buffer_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_show_buffer_entry = { "show-buffer", "showb", @@ -41,7 +41,7 @@ const struct cmd_entry cmd_show_buffer_entry = { cmd_buffer_print }; -void +int cmd_show_buffer_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_buffer_data *data = self->data; @@ -52,14 +52,16 @@ cmd_show_buffer_exec(struct cmd *self, struct cmd_ctx *ctx) size_t len; if ((s = cmd_find_session(ctx, data->target)) == NULL) - return; + return (-1); if (data->buffer == -1) { - if ((pb = paste_get_top(&s->buffers)) == NULL) + if ((pb = paste_get_top(&s->buffers)) == NULL) { ctx->error(ctx, "no buffers"); - } else { - if ((pb = paste_get_index(&s->buffers, data->buffer)) == NULL) - ctx->error(ctx, "no buffer %d", data->buffer); + return (-1); + } + } else if ((pb = paste_get_index(&s->buffers, data->buffer)) == NULL) { + ctx->error(ctx, "no buffer %d", data->buffer); + return (-1); } if (pb != NULL) { @@ -83,6 +85,5 @@ cmd_show_buffer_exec(struct cmd *self, struct cmd_ctx *ctx) ctx->print(ctx, buf); } - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-show-options.c b/cmd-show-options.c index 66390ca4..e88d8ac8 100644 --- a/cmd-show-options.c +++ b/cmd-show-options.c @@ -1,4 +1,4 @@ -/* $Id: cmd-show-options.c,v 1.9 2008-12-10 20:25:41 nicm Exp $ */ +/* $Id: cmd-show-options.c,v 1.10 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -27,7 +27,7 @@ * Show options. */ -void cmd_show_options_exec(struct cmd *, struct cmd_ctx *); +int cmd_show_options_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_show_options_entry = { "show-options", "show", @@ -42,7 +42,7 @@ const struct cmd_entry cmd_show_options_entry = { cmd_target_print }; -void +int cmd_show_options_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; @@ -57,7 +57,7 @@ cmd_show_options_exec(struct cmd *self, struct cmd_ctx *ctx) oo = &global_options; else { if ((s = cmd_find_session(ctx, data->target)) == NULL) - return; + return (-1); oo = &s->options; } @@ -101,6 +101,5 @@ cmd_show_options_exec(struct cmd *self, struct cmd_ctx *ctx) } } - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-show-window-options.c b/cmd-show-window-options.c index 126b69a6..0af1311b 100644 --- a/cmd-show-window-options.c +++ b/cmd-show-window-options.c @@ -1,4 +1,4 @@ -/* $Id: cmd-show-window-options.c,v 1.5 2008-12-10 20:25:41 nicm Exp $ */ +/* $Id: cmd-show-window-options.c,v 1.6 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott @@ -27,7 +27,7 @@ * Show window options. */ -void cmd_show_window_options_exec(struct cmd *, struct cmd_ctx *); +int cmd_show_window_options_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_show_window_options_entry = { "show-window-options", "showw", @@ -42,7 +42,7 @@ const struct cmd_entry cmd_show_window_options_entry = { cmd_target_print }; -void +int cmd_show_window_options_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; @@ -57,7 +57,7 @@ cmd_show_window_options_exec(struct cmd *self, struct cmd_ctx *ctx) oo = &global_window_options; else { if ((wl = cmd_find_window(ctx, data->target, NULL)) == NULL) - return; + return (-1); oo = &wl->window->options; } @@ -101,6 +101,5 @@ cmd_show_window_options_exec(struct cmd *self, struct cmd_ctx *ctx) } } - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-source-file.c b/cmd-source-file.c index 501eb060..f7118179 100644 --- a/cmd-source-file.c +++ b/cmd-source-file.c @@ -1,4 +1,4 @@ -/* $Id: cmd-source-file.c,v 1.4 2009-01-18 14:40:48 nicm Exp $ */ +/* $Id: cmd-source-file.c,v 1.5 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2008 Tiago Cunha @@ -25,7 +25,7 @@ */ int cmd_source_file_parse(struct cmd *, int, char **, char **); -void cmd_source_file_exec(struct cmd *, struct cmd_ctx *); +int cmd_source_file_exec(struct cmd *, struct cmd_ctx *); void cmd_source_file_send(struct cmd *, struct buffer *); void cmd_source_file_recv(struct cmd *, struct buffer *); void cmd_source_file_free(struct cmd *); @@ -88,7 +88,7 @@ usage: return (-1); } -void +int cmd_source_file_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_source_file_data *data = self->data; @@ -97,11 +97,10 @@ cmd_source_file_exec(struct cmd *self, struct cmd_ctx *ctx) if (load_cfg(data->path, &cause) != 0) { ctx->error(ctx, "%s", cause); xfree(cause); - return; + return (-1); } - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } void diff --git a/cmd-split-window.c b/cmd-split-window.c index 220e9225..a61efd1b 100644 --- a/cmd-split-window.c +++ b/cmd-split-window.c @@ -1,4 +1,4 @@ -/* $Id: cmd-split-window.c,v 1.5 2009-01-18 14:40:48 nicm Exp $ */ +/* $Id: cmd-split-window.c,v 1.6 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -28,7 +28,7 @@ */ int cmd_split_window_parse(struct cmd *, int, char **, char **); -void cmd_split_window_exec(struct cmd *, struct cmd_ctx *); +int cmd_split_window_exec(struct cmd *, struct cmd_ctx *); void cmd_split_window_send(struct cmd *, struct buffer *); void cmd_split_window_recv(struct cmd *, struct buffer *); void cmd_split_window_free(struct cmd *); @@ -104,7 +104,7 @@ usage: return (-1); } -void +int cmd_split_window_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_split_window_data *data = self->data; @@ -118,7 +118,7 @@ cmd_split_window_exec(struct cmd *self, struct cmd_ctx *ctx) u_int i, hlimit; if ((wl = cmd_find_window(ctx, data->target, &s)) == NULL) - return; + return (-1); w = wl->window; if (session_index(s, &i) != 0) @@ -137,7 +137,7 @@ cmd_split_window_exec(struct cmd *self, struct cmd_ctx *ctx) hlimit = options_get_number(&s->options, "history-limit"); if ((wp = window_add_pane(w, cmd, cwd, env, hlimit)) == NULL) { ctx->error(ctx, "command failed: %s", cmd); - return; + return (-1); } server_redraw_window(w); @@ -148,8 +148,7 @@ cmd_split_window_exec(struct cmd *self, struct cmd_ctx *ctx) } else server_status_session(s); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } void diff --git a/cmd-start-server.c b/cmd-start-server.c index ca2e1cb2..364b3f4f 100644 --- a/cmd-start-server.c +++ b/cmd-start-server.c @@ -1,4 +1,4 @@ -/* $Id: cmd-start-server.c,v 1.5 2008-06-05 21:25:00 nicm Exp $ */ +/* $Id: cmd-start-server.c,v 1.6 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -24,7 +24,7 @@ * Start the server and do nothing else. */ -void cmd_start_server_exec(struct cmd *, struct cmd_ctx *); +int cmd_start_server_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_start_server_entry = { "start-server", "start", @@ -39,9 +39,8 @@ const struct cmd_entry cmd_start_server_entry = { NULL }; -void -cmd_start_server_exec(unused struct cmd *self, struct cmd_ctx *ctx) +int +cmd_start_server_exec(unused struct cmd *self, unused struct cmd_ctx *ctx) { - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-suspend-client.c b/cmd-suspend-client.c index 540b2f68..468e252b 100644 --- a/cmd-suspend-client.c +++ b/cmd-suspend-client.c @@ -1,4 +1,4 @@ -/* $Id: cmd-suspend-client.c,v 1.1 2009-01-18 12:09:42 nicm Exp $ */ +/* $Id: cmd-suspend-client.c,v 1.2 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -27,7 +27,7 @@ * Suspend client with SIGTSTP. */ -void cmd_suspend_client_exec(struct cmd *, struct cmd_ctx *); +int cmd_suspend_client_exec(struct cmd *, struct cmd_ctx *); struct cmd_suspend_client_data { char *name; @@ -47,19 +47,18 @@ const struct cmd_entry cmd_suspend_client_entry = { cmd_target_print }; -void +int cmd_suspend_client_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; struct client *c; if ((c = cmd_find_client(ctx, data->target)) == NULL) - return; + return (-1); tty_stop_tty(&c->tty); c->flags |= CLIENT_SUSPENDED; server_write_client(c, MSG_SUSPEND, NULL, 0); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-swap-window.c b/cmd-swap-window.c index a0224d2b..7dfe9e45 100644 --- a/cmd-swap-window.c +++ b/cmd-swap-window.c @@ -1,4 +1,4 @@ -/* $Id: cmd-swap-window.c,v 1.14 2008-12-10 20:25:41 nicm Exp $ */ +/* $Id: cmd-swap-window.c,v 1.15 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -26,7 +26,7 @@ * Swap one window with another. */ -void cmd_swap_window_exec(struct cmd *, struct cmd_ctx *); +int cmd_swap_window_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_swap_window_entry = { "swap-window", "swapw", @@ -41,7 +41,7 @@ const struct cmd_entry cmd_swap_window_entry = { cmd_srcdst_print }; -void +int cmd_swap_window_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_srcdst_data *data = self->data; @@ -50,12 +50,12 @@ cmd_swap_window_exec(struct cmd *self, struct cmd_ctx *ctx) struct window *w; if ((wl_src = cmd_find_window(ctx, data->src, &src)) == NULL) - return; + return (-1); if ((wl_dst = cmd_find_window(ctx, data->dst, &dst)) == NULL) - return; + return (-1); if (wl_dst->window == wl_src->window) - goto out; + return (0); w = wl_dst->window; wl_dst->window = wl_src->window; @@ -71,7 +71,5 @@ cmd_swap_window_exec(struct cmd *self, struct cmd_ctx *ctx) server_redraw_session(dst); recalculate_sizes(); -out: - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-switch-client.c b/cmd-switch-client.c index e9cc046f..ed37aef6 100644 --- a/cmd-switch-client.c +++ b/cmd-switch-client.c @@ -1,4 +1,4 @@ -/* $Id: cmd-switch-client.c,v 1.14 2009-01-18 14:40:48 nicm Exp $ */ +/* $Id: cmd-switch-client.c,v 1.15 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -28,7 +28,7 @@ */ int cmd_switch_client_parse(struct cmd *, int, char **, char **); -void cmd_switch_client_exec(struct cmd *, struct cmd_ctx *); +int cmd_switch_client_exec(struct cmd *, struct cmd_ctx *); void cmd_switch_client_send(struct cmd *, struct buffer *); void cmd_switch_client_recv(struct cmd *, struct buffer *); void cmd_switch_client_free(struct cmd *); @@ -88,7 +88,7 @@ usage: return (-1); } -void +int cmd_switch_client_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_switch_client_data *data = self->data; @@ -96,20 +96,19 @@ cmd_switch_client_exec(struct cmd *self, struct cmd_ctx *ctx) struct session *s; if (data == NULL) - return; + return (0); if ((c = cmd_find_client(ctx, data->name)) == NULL) - return; + return (-1); if ((s = cmd_find_session(ctx, data->target)) == NULL) - return; + return (-1); c->session = s; recalculate_sizes(); server_redraw_client(c); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } void diff --git a/cmd-unbind-key.c b/cmd-unbind-key.c index 7dcd1d5f..f194abab 100644 --- a/cmd-unbind-key.c +++ b/cmd-unbind-key.c @@ -1,4 +1,4 @@ -/* $Id: cmd-unbind-key.c,v 1.15 2008-12-10 20:25:41 nicm Exp $ */ +/* $Id: cmd-unbind-key.c,v 1.16 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -25,7 +25,7 @@ */ int cmd_unbind_key_parse(struct cmd *, int, char **, char **); -void cmd_unbind_key_exec(struct cmd *, struct cmd_ctx *); +int cmd_unbind_key_exec(struct cmd *, struct cmd_ctx *); void cmd_unbind_key_send(struct cmd *, struct buffer *); void cmd_unbind_key_recv(struct cmd *, struct buffer *); void cmd_unbind_key_free(struct cmd *); @@ -81,18 +81,17 @@ error: return (-1); } -void +int cmd_unbind_key_exec(struct cmd *self, unused struct cmd_ctx *ctx) { struct cmd_unbind_key_data *data = self->data; if (data == NULL) - return; + return (0); key_bindings_remove(data->key); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } void diff --git a/cmd-unlink-window.c b/cmd-unlink-window.c index 5bb7c308..abd011cf 100644 --- a/cmd-unlink-window.c +++ b/cmd-unlink-window.c @@ -1,4 +1,4 @@ -/* $Id: cmd-unlink-window.c,v 1.12 2008-06-06 20:02:27 nicm Exp $ */ +/* $Id: cmd-unlink-window.c,v 1.13 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -24,7 +24,7 @@ * Unlink a window, unless it would be destroyed by doing so (only one link). */ -void cmd_unlink_window_exec(struct cmd *, struct cmd_ctx *); +int cmd_unlink_window_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_unlink_window_entry = { "unlink-window", "unlinkw", @@ -39,7 +39,7 @@ const struct cmd_entry cmd_unlink_window_entry = { cmd_target_print }; -void +int cmd_unlink_window_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; @@ -50,11 +50,11 @@ cmd_unlink_window_exec(struct cmd *self, struct cmd_ctx *ctx) int destroyed; if ((wl = cmd_find_window(ctx, data->target, &s)) == NULL) - return; + return (-1); if (wl->window->references == 1) { ctx->error(ctx, "window is only linked to one session"); - return; + return (-1); } destroyed = session_detach(s, wl); @@ -70,6 +70,5 @@ cmd_unlink_window_exec(struct cmd *self, struct cmd_ctx *ctx) } recalculate_sizes(); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd-up-pane.c b/cmd-up-pane.c index b0931603..28c20ab4 100644 --- a/cmd-up-pane.c +++ b/cmd-up-pane.c @@ -1,4 +1,4 @@ -/* $Id: cmd-up-pane.c,v 1.2 2009-01-14 22:13:30 nicm Exp $ */ +/* $Id: cmd-up-pane.c,v 1.3 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -24,7 +24,7 @@ * Move up a pane. */ -void cmd_up_pane_exec(struct cmd *, struct cmd_ctx *); +int cmd_up_pane_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_up_pane_entry = { "up-pane", "upp", @@ -39,7 +39,7 @@ const struct cmd_entry cmd_up_pane_entry = { cmd_target_print }; -void +int cmd_up_pane_exec(struct cmd *self, struct cmd_ctx *ctx) { struct cmd_target_data *data = self->data; @@ -47,7 +47,7 @@ cmd_up_pane_exec(struct cmd *self, struct cmd_ctx *ctx) struct window *w; if ((wl = cmd_find_window(ctx, data->target, NULL)) == NULL) - return; + return (-1); w = wl->window; do { @@ -56,6 +56,5 @@ cmd_up_pane_exec(struct cmd *self, struct cmd_ctx *ctx) w->active = TAILQ_LAST(&w->panes, window_panes); } while (w->active->flags & PANE_HIDDEN); - if (ctx->cmdclient != NULL) - server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0); + return (0); } diff --git a/cmd.c b/cmd.c index 618a90b1..97a097d9 100644 --- a/cmd.c +++ b/cmd.c @@ -1,4 +1,4 @@ -/* $Id: cmd.c,v 1.82 2009-01-18 17:20:52 nicm Exp $ */ +/* $Id: cmd.c,v 1.83 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -170,14 +170,14 @@ usage: return (NULL); } -void +int cmd_exec(struct cmd *cmd, struct cmd_ctx *ctx) { if (server_locked) { ctx->error(ctx, "server is locked"); - return; + return (-1); } - cmd->entry->exec(cmd, ctx); + return (cmd->entry->exec(cmd, ctx)); } void diff --git a/server-msg.c b/server-msg.c index 57adc1b6..f9f6278f 100644 --- a/server-msg.c +++ b/server-msg.c @@ -1,4 +1,4 @@ -/* $Id: server-msg.c,v 1.59 2009-01-18 21:26:44 nicm Exp $ */ +/* $Id: server-msg.c,v 1.60 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -132,14 +132,14 @@ server_msg_fn_command(struct hdr *hdr, struct client *c) { struct msg_command_data data; struct cmd_ctx ctx; + struct cmd_list *cmdlist; struct cmd *cmd; if (hdr->size < sizeof data) fatalx("bad MSG_COMMAND size"); buffer_read(c->in, &data, sizeof data); - cmd = cmd_recv(c->in); - log_debug("got command %s from client %d", cmd->entry->name, c->fd); + cmdlist = cmd_list_recv(c->in); server_activity = time(NULL); ctx.error = server_msg_fn_command_error; @@ -152,16 +152,21 @@ server_msg_fn_command(struct hdr *hdr, struct client *c) ctx.cmdclient = c; - /* XXX */ - if (data.pid != -1 && (cmd->entry->flags & CMD_CANTNEST)) { - server_msg_fn_command_error(&ctx, "sessions " - "should be nested with care. unset $TMUX to force"); - cmd_free(cmd); - return (0); + if (data.pid != -1) { + TAILQ_FOREACH(cmd, cmdlist, qentry) { + if (cmd->entry->flags & CMD_CANTNEST) { + server_msg_fn_command_error(&ctx, + "sessions should be nested with care. " + "unset $TMUX to force"); + cmd_list_free(cmdlist); + return (0); + } + } } - cmd_exec(cmd, &ctx); - cmd_free(cmd); + if (cmd_list_exec(cmdlist, &ctx) != 1) + server_write_client(c, MSG_EXIT, NULL, 0); + cmd_list_free(cmdlist); return (0); } diff --git a/tmux.c b/tmux.c index 8f636c7b..6c798af3 100644 --- a/tmux.c +++ b/tmux.c @@ -1,4 +1,4 @@ -/* $Id: tmux.c,v 1.98 2009-01-18 12:09:42 nicm Exp $ */ +/* $Id: tmux.c,v 1.99 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -179,7 +179,8 @@ main(int argc, char **argv) struct client_ctx cctx; struct msg_command_data cmddata; struct buffer *b; - struct cmd *cmd; + struct cmd_list *cmdlist; + struct cmd *cmd; struct pollfd pfd; struct hdr hdr; const char *shell; @@ -328,7 +329,7 @@ main(int argc, char **argv) log_warnx("can't specify a command when unlocking"); exit(1); } - cmd = NULL; + cmdlist = NULL; if ((pass = getpass("Password: ")) == NULL) exit(1); start_server = 0; @@ -337,11 +338,24 @@ main(int argc, char **argv) cmd = xmalloc(sizeof *cmd); cmd->entry = &cmd_new_session_entry; cmd->entry->init(cmd, 0); - } else if ((cmd = cmd_parse(argc, argv, &cause)) == NULL) { - log_warnx("%s", cause); - exit(1); + + cmdlist = xmalloc(sizeof *cmdlist); + TAILQ_INIT(cmdlist); + TAILQ_INSERT_HEAD(cmdlist, cmd, qentry); + } else { + cmdlist = cmd_list_parse(argc, argv, &cause); + if (cmdlist == NULL) { + log_warnx("%s", cause); + exit(1); + } + } + start_server = 0; + TAILQ_FOREACH(cmd, cmdlist, qentry) { + if (cmd->entry->flags & CMD_STARTSERVER) { + start_server = 1; + break; + } } - start_server = cmd->entry->flags & CMD_STARTSERVER; } memset(&cctx, 0, sizeof cctx); @@ -354,8 +368,8 @@ main(int argc, char **argv) client_write_server( &cctx, MSG_UNLOCK, BUFFER_OUT(b), BUFFER_USED(b)); } else { - cmd_send(cmd, b); - cmd_free(cmd); + cmd_list_send(cmdlist, b); + cmd_list_free(cmdlist); client_fill_session(&cmddata); client_write_server2(&cctx, MSG_COMMAND, &cmddata, sizeof cmddata, BUFFER_OUT(b), BUFFER_USED(b)); @@ -389,6 +403,7 @@ main(int argc, char **argv) case MSG_EXIT: n = 0; goto out; + case MSG_ERROR: case MSG_PRINT: if (hdr.size > INT_MAX - 1) fatalx("bad MSG_PRINT size"); @@ -397,15 +412,6 @@ main(int argc, char **argv) if (hdr.size != 0) buffer_remove(cctx.srv_in, hdr.size); goto restart; - case MSG_ERROR: - if (hdr.size > INT_MAX - 1) - fatalx("bad MSG_ERROR size"); - log_warnx("%.*s", - (int) hdr.size, BUFFER_OUT(cctx.srv_in)); - if (hdr.size != 0) - buffer_remove(cctx.srv_in, hdr.size); - n = 1; - goto out; case MSG_READY: n = client_main(&cctx); goto out; diff --git a/tmux.h b/tmux.h index 4dff2bdd..b7b25083 100644 --- a/tmux.h +++ b/tmux.h @@ -1,4 +1,4 @@ -/* $Id: tmux.h,v 1.242 2009-01-19 17:16:09 nicm Exp $ */ +/* $Id: tmux.h,v 1.243 2009-01-19 18:23:40 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -832,7 +832,7 @@ struct cmd_entry { void (*init)(struct cmd *, int); int (*parse)(struct cmd *, int, char **, char **); - void (*exec)(struct cmd *, struct cmd_ctx *); + int (*exec)(struct cmd *, struct cmd_ctx *); void (*send)(struct cmd *, struct buffer *); void (*recv)(struct cmd *, struct buffer *); void (*free)(struct cmd *); @@ -1080,7 +1080,7 @@ int arg_parse_window(const char *, struct session **, int *); /* cmd.c */ struct cmd *cmd_parse(int, char **, char **); -void cmd_exec(struct cmd *, struct cmd_ctx *); +int cmd_exec(struct cmd *, struct cmd_ctx *); void cmd_send(struct cmd *, struct buffer *); struct cmd *cmd_recv(struct buffer *); void cmd_free(struct cmd *); @@ -1157,7 +1157,7 @@ extern const struct cmd_entry cmd_up_pane_entry; /* cmd-list.c */ struct cmd_list *cmd_list_parse(int, char **, char **); -void cmd_list_exec(struct cmd_list *, struct cmd_ctx *); +int cmd_list_exec(struct cmd_list *, struct cmd_ctx *); void cmd_list_send(struct cmd_list *, struct buffer *); struct cmd_list *cmd_list_recv(struct buffer *); void cmd_list_free(struct cmd_list *); @@ -1173,7 +1173,6 @@ size_t cmd_prarg(char *, size_t, const char *, char *); #define CMD_TARGET_CLIENT_USAGE "[-t target-client]" void cmd_target_init(struct cmd *, int); int cmd_target_parse(struct cmd *, int, char **, char **); -void cmd_target_exec(struct cmd *, struct cmd_ctx *); void cmd_target_send(struct cmd *, struct buffer *); void cmd_target_recv(struct cmd *, struct buffer *); void cmd_target_free(struct cmd *); @@ -1183,7 +1182,6 @@ size_t cmd_target_print(struct cmd *, char *, size_t); #define CMD_SRCDST_CLIENT_USAGE "[-s src-client] [-t dst-client]" void cmd_srcdst_init(struct cmd *, int); int cmd_srcdst_parse(struct cmd *, int, char **, char **); -void cmd_srcdst_exec(struct cmd *, struct cmd_ctx *); void cmd_srcdst_send(struct cmd *, struct buffer *); void cmd_srcdst_recv(struct cmd *, struct buffer *); void cmd_srcdst_free(struct cmd *); @@ -1193,7 +1191,6 @@ size_t cmd_srcdst_print(struct cmd *, char *, size_t); #define CMD_BUFFER_CLIENT_USAGE "[-b buffer-index] [-t target-client]" void cmd_buffer_init(struct cmd *, int); int cmd_buffer_parse(struct cmd *, int, char **, char **); -void cmd_buffer_exec(struct cmd *, struct cmd_ctx *); void cmd_buffer_send(struct cmd *, struct buffer *); void cmd_buffer_recv(struct cmd *, struct buffer *); void cmd_buffer_free(struct cmd *); @@ -1203,7 +1200,6 @@ size_t cmd_buffer_print(struct cmd *, char *, size_t); #define CMD_OPTION_CLIENT_USAGE "[-gu] [-t target-client] option [value]" void cmd_option_init(struct cmd *, int); int cmd_option_parse(struct cmd *, int, char **, char **); -void cmd_option_exec(struct cmd *, struct cmd_ctx *); void cmd_option_send(struct cmd *, struct buffer *); void cmd_option_recv(struct cmd *, struct buffer *); void cmd_option_free(struct cmd *); @@ -1213,7 +1209,6 @@ size_t cmd_option_print(struct cmd *, char *, size_t); #define CMD_PANE_CLIENT_USAGE "[-t target-client] [-p pane-index]" void cmd_pane_init(struct cmd *, int); int cmd_pane_parse(struct cmd *, int, char **, char **); -void cmd_pane_exec(struct cmd *, struct cmd_ctx *); void cmd_pane_send(struct cmd *, struct buffer *); void cmd_pane_recv(struct cmd *, struct buffer *); void cmd_pane_free(struct cmd *);