Use a utility function for common code to show errors in config file,

from Thomas Adam.
This commit is contained in:
Nicholas Marriott 2012-11-19 10:38:06 +00:00
parent c68efec6c0
commit 827b311c81
4 changed files with 31 additions and 29 deletions

22
cfg.c
View File

@ -173,3 +173,25 @@ load_cfg(const char *path, struct cmd_ctx *ctxin, struct causelist *causes)
return (retval); 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);
}

View File

@ -58,14 +58,13 @@ cmd_new_session_exec(struct cmd *self, struct cmd_ctx *ctx)
struct args *args = self->args; struct args *args = self->args;
struct session *s, *old_s, *groupwith; struct session *s, *old_s, *groupwith;
struct window *w; struct window *w;
struct window_pane *wp;
struct environ env; struct environ env;
struct termios tio, *tiop; struct termios tio, *tiop;
struct passwd *pw; struct passwd *pw;
const char *newname, *target, *update, *cwd, *errstr; const char *newname, *target, *update, *cwd, *errstr;
char *cmd, *cause; char *cmd, *cause;
int detached, idx; int detached, idx;
u_int sx, sy, i; u_int sx, sy;
newname = args_get(args, 's'); newname = args_get(args, 's');
if (newname != NULL) { 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 * If there are still configuration file errors to display, put the new
* session's current window into more mode and display them now. * session's current window into more mode and display them now.
*/ */
if (cfg_finished && !ARRAY_EMPTY(&cfg_causes)) { if (cfg_finished)
wp = s->curw->window->active; show_cfg_causes(s);
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);
}
return (detached ? CMD_RETURN_NORMAL : CMD_RETURN_ATTACH); return (detached ? CMD_RETURN_NORMAL : CMD_RETURN_ATTACH);
} }

View File

@ -106,11 +106,8 @@ server_create_socket(void)
int int
server_start(int lockfd, char *lockfile) server_start(int lockfd, char *lockfile)
{ {
struct window_pane *wp; int pair[2];
int pair[2]; struct timeval tv;
char *cause;
struct timeval tv;
u_int i;
/* The first client is special and gets a socketpair; create it. */ /* The first client is special and gets a socketpair; create it. */
if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, pair) != 0) 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 * If there is a session already, put the current window and pane into
* more mode. * more mode.
*/ */
if (!RB_EMPTY(&sessions) && !ARRAY_EMPTY(&cfg_causes)) { if (!RB_EMPTY(&sessions) && !ARRAY_EMPTY(&cfg_causes))
wp = RB_MIN(sessions, &sessions)->curw->window->active; show_cfg_causes(RB_MIN(sessions, &sessions));
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);
}
cfg_finished = 1; cfg_finished = 1;
server_add_accept(0); server_add_accept(0);

1
tmux.h
View File

@ -1520,6 +1520,7 @@ extern int cfg_finished;
extern struct causelist cfg_causes; extern struct causelist cfg_causes;
void printflike2 cfg_add_cause(struct causelist *, const char *, ...); void printflike2 cfg_add_cause(struct causelist *, const char *, ...);
int load_cfg(const char *, struct cmd_ctx *, struct causelist *); int load_cfg(const char *, struct cmd_ctx *, struct causelist *);
void show_cfg_causes(struct session *);
/* format.c */ /* format.c */
int format_cmp(struct format_entry *, struct format_entry *); int format_cmp(struct format_entry *, struct format_entry *);