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);
}
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 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);
}

View File

@ -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;
/* 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);

1
tmux.h
View File

@ -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 *);