From 827b311c8172f3543f9c38dc1d7740bba1d9aeaa Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 19 Nov 2012 10:38:06 +0000 Subject: [PATCH 1/3] Use a utility function for common code to show errors in config file, from Thomas Adam. --- cfg.c | 22 ++++++++++++++++++++++ cmd-new-session.c | 16 +++------------- server.c | 21 +++++---------------- tmux.h | 1 + 4 files changed, 31 insertions(+), 29 deletions(-) diff --git a/cfg.c b/cfg.c index ead99818..ae7d9a30 100644 --- a/cfg.c +++ b/cfg.c @@ -173,3 +173,25 @@ load_cfg(const char *path, struct cmd_ctx *ctxin, struct causelist *causes) return (retval); } + +void +show_cfg_causes(struct session *s) +{ + struct window_pane *wp; + char *cause; + u_int i; + + if (s == NULL || ARRAY_EMPTY(&cfg_causes)) + return; + + wp = s->curw->window->active; + + window_pane_set_mode(wp, &window_copy_mode); + window_copy_init_for_output(wp); + for (i = 0; i < ARRAY_LENGTH(&cfg_causes); i++) { + cause = ARRAY_ITEM(&cfg_causes, i); + window_copy_add(wp, "%s", cause); + free(cause); + } + ARRAY_FREE(&cfg_causes); +} diff --git a/cmd-new-session.c b/cmd-new-session.c index cd1bc2b1..0fcea353 100644 --- a/cmd-new-session.c +++ b/cmd-new-session.c @@ -58,14 +58,13 @@ cmd_new_session_exec(struct cmd *self, struct cmd_ctx *ctx) struct args *args = self->args; struct session *s, *old_s, *groupwith; struct window *w; - struct window_pane *wp; struct environ env; struct termios tio, *tiop; struct passwd *pw; const char *newname, *target, *update, *cwd, *errstr; char *cmd, *cause; int detached, idx; - u_int sx, sy, i; + u_int sx, sy; newname = args_get(args, 's'); if (newname != NULL) { @@ -257,17 +256,8 @@ cmd_new_session_exec(struct cmd *self, struct cmd_ctx *ctx) * If there are still configuration file errors to display, put the new * session's current window into more mode and display them now. */ - if (cfg_finished && !ARRAY_EMPTY(&cfg_causes)) { - wp = s->curw->window->active; - window_pane_set_mode(wp, &window_copy_mode); - window_copy_init_for_output(wp); - for (i = 0; i < ARRAY_LENGTH(&cfg_causes); i++) { - cause = ARRAY_ITEM(&cfg_causes, i); - window_copy_add(wp, "%s", cause); - free(cause); - } - ARRAY_FREE(&cfg_causes); - } + if (cfg_finished) + show_cfg_causes(s); return (detached ? CMD_RETURN_NORMAL : CMD_RETURN_ATTACH); } diff --git a/server.c b/server.c index 740f71d9..bad22270 100644 --- a/server.c +++ b/server.c @@ -106,11 +106,8 @@ server_create_socket(void) int server_start(int lockfd, char *lockfile) { - struct window_pane *wp; - int pair[2]; - char *cause; - struct timeval tv; - u_int i; + int pair[2]; + struct timeval tv; /* The first client is special and gets a socketpair; create it. */ if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, pair) != 0) @@ -178,17 +175,9 @@ server_start(int lockfd, char *lockfile) * If there is a session already, put the current window and pane into * more mode. */ - if (!RB_EMPTY(&sessions) && !ARRAY_EMPTY(&cfg_causes)) { - wp = RB_MIN(sessions, &sessions)->curw->window->active; - window_pane_set_mode(wp, &window_copy_mode); - window_copy_init_for_output(wp); - for (i = 0; i < ARRAY_LENGTH(&cfg_causes); i++) { - cause = ARRAY_ITEM(&cfg_causes, i); - window_copy_add(wp, "%s", cause); - free(cause); - } - ARRAY_FREE(&cfg_causes); - } + if (!RB_EMPTY(&sessions) && !ARRAY_EMPTY(&cfg_causes)) + show_cfg_causes(RB_MIN(sessions, &sessions)); + cfg_finished = 1; server_add_accept(0); diff --git a/tmux.h b/tmux.h index 4a5326cf..2a36c2da 100644 --- a/tmux.h +++ b/tmux.h @@ -1520,6 +1520,7 @@ extern int cfg_finished; extern struct causelist cfg_causes; void printflike2 cfg_add_cause(struct causelist *, const char *, ...); int load_cfg(const char *, struct cmd_ctx *, struct causelist *); +void show_cfg_causes(struct session *); /* format.c */ int format_cmp(struct format_entry *, struct format_entry *); From 9a7e5bd1d30ab60ef6cebfedfbdb37c6a05e9bcb Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 19 Nov 2012 10:50:24 +0000 Subject: [PATCH 2/3] Clarify some points about config files, notably that they are only read at server start. From Thomas Adam. --- tmux.1 | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/tmux.1 b/tmux.1 index c5c45b75..4bf55443 100644 --- a/tmux.1 +++ b/tmux.1 @@ -124,13 +124,19 @@ loads the system configuration file from .Pa /etc/tmux.conf , if present, then looks for a user configuration file at .Pa ~/.tmux.conf . +.Pp The configuration file is a set of .Nm commands which are executed in sequence when the server is first started. -.Pp -If a command in the configuration file fails, .Nm -will report an error and exit without executing further commands. +loads configuration files once when the server process has started. +The +.Ic source-file +command may be used to load a file later. +.Pp +.Nm +shows any error messages from commands in configuration files in the first +session created, and continues to process the rest of the configuration file. .It Fl L Ar socket-name .Nm stores the server socket in a directory under From 0679eb6a6d6bab129264784009e70333b34ca6a8 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 19 Nov 2012 10:51:25 +0000 Subject: [PATCH 3/3] Add halfpage commands to mode command string table (missed by accident), from Thomas Adam. --- mode-key.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mode-key.c b/mode-key.c index eae405ee..821f1ef4 100644 --- a/mode-key.c +++ b/mode-key.c @@ -105,6 +105,8 @@ const struct mode_key_cmdstr mode_key_cmdstr_copy[] = { { MODEKEYCOPY_DOWN, "cursor-down" }, { MODEKEYCOPY_ENDOFLINE, "end-of-line" }, { MODEKEYCOPY_GOTOLINE, "goto-line" }, + { MODEKEYCOPY_HALFPAGEDOWN, "halfpage-down" }, + { MODEKEYCOPY_HALFPAGEUP, "halfpage-up" }, { MODEKEYCOPY_HISTORYBOTTOM, "history-bottom" }, { MODEKEYCOPY_HISTORYTOP, "history-top" }, { MODEKEYCOPY_JUMP, "jump-forward" },