When using source-file, run the commands in the context of the source-file

command rather than with no context. This makes things like attach work from a
file.
pull/1/head
Nicholas Marriott 2009-08-23 17:29:51 +00:00
parent 43cd40e87a
commit c7394ac4e0
4 changed files with 14 additions and 9 deletions

15
cfg.c
View File

@ -51,7 +51,7 @@ cfg_error(unused struct cmd_ctx *ctx, const char *fmt, ...)
} }
int int
load_cfg(const char *path, char **cause) load_cfg(const char *path, struct cmd_ctx *ctxin, char **cause)
{ {
FILE *f; FILE *f;
u_int n; u_int n;
@ -87,15 +87,20 @@ load_cfg(const char *path, char **cause)
continue; continue;
cfg_cause = NULL; cfg_cause = NULL;
ctx.msgdata = NULL; if (ctxin == NULL) {
ctx.curclient = NULL; ctx.msgdata = NULL;
ctx.curclient = NULL;
ctx.cmdclient = NULL;
} else {
ctx.msgdata = ctxin->msgdata;
ctx.curclient = ctxin->curclient;
ctx.cmdclient = ctxin->cmdclient;
}
ctx.error = cfg_error; ctx.error = cfg_error;
ctx.print = cfg_print; ctx.print = cfg_print;
ctx.info = cfg_print; ctx.info = cfg_print;
ctx.cmdclient = NULL;
cfg_cause = NULL; cfg_cause = NULL;
cmd_list_exec(cmdlist, &ctx); cmd_list_exec(cmdlist, &ctx);
cmd_list_free(cmdlist); cmd_list_free(cmdlist);

View File

@ -90,7 +90,7 @@ cmd_source_file_exec(struct cmd *self, struct cmd_ctx *ctx)
struct cmd_source_file_data *data = self->data; struct cmd_source_file_data *data = self->data;
char *cause; char *cause;
if (load_cfg(data->path, &cause) != 0) { if (load_cfg(data->path, ctx, &cause) != 0) {
ctx->error(ctx, "%s", cause); ctx->error(ctx, "%s", cause);
xfree(cause); xfree(cause);
return (-1); return (-1);

View File

@ -188,9 +188,9 @@ server_start(char *path)
&cause, "%s: %s", strerror(errno), SYSTEM_CFG); &cause, "%s: %s", strerror(errno), SYSTEM_CFG);
goto error; goto error;
} }
} else if (load_cfg(SYSTEM_CFG, &cause) != 0) } else if (load_cfg(SYSTEM_CFG, NULL, &cause) != 0)
goto error; goto error;
if (cfg_file != NULL && load_cfg(cfg_file, &cause) != 0) if (cfg_file != NULL && load_cfg(cfg_file, NULL, &cause) != 0)
goto error; goto error;
exit(server_main(srv_fd)); exit(server_main(srv_fd));

2
tmux.h
View File

@ -1109,7 +1109,7 @@ void sigreset(void);
void sighandler(int); void sighandler(int);
/* cfg.c */ /* cfg.c */
int load_cfg(const char *, char **x); int load_cfg(const char *, struct cmd_ctx *, char **);
/* mode-key.c */ /* mode-key.c */
extern const struct mode_key_table mode_key_tables[]; extern const struct mode_key_table mode_key_tables[];