mirror of
https://github.com/tmux/tmux.git
synced 2024-12-04 19:58:48 +00:00
- Rework load_cfg() error handling a little.
- Add -q to source-file to suppress errors about nonexistent files. Input and OK nicm@
This commit is contained in:
parent
9715c61de0
commit
fdd368a294
24
cfg.c
24
cfg.c
@ -48,8 +48,8 @@ set_cfg_file(const char *path)
|
||||
void
|
||||
start_cfg(void)
|
||||
{
|
||||
char *cause = NULL;
|
||||
const char *home;
|
||||
int quiet = 0;
|
||||
|
||||
cfg_cmd_q = cmdq_new(NULL);
|
||||
cfg_cmd_q->emptyfn = cfg_default_done;
|
||||
@ -61,28 +61,20 @@ start_cfg(void)
|
||||
if (cfg_client != NULL)
|
||||
cfg_client->references++;
|
||||
|
||||
if (access(TMUX_CONF, R_OK) == 0) {
|
||||
if (load_cfg(TMUX_CONF, cfg_cmd_q, &cause) == -1)
|
||||
cfg_add_cause("%s: %s", TMUX_CONF, cause);
|
||||
} else if (errno != ENOENT)
|
||||
cfg_add_cause("%s: %s", TMUX_CONF, strerror(errno));
|
||||
load_cfg(TMUX_CONF, cfg_cmd_q, 1);
|
||||
|
||||
if (cfg_file == NULL && (home = find_home()) != NULL) {
|
||||
xasprintf(&cfg_file, "%s/.tmux.conf", home);
|
||||
if (access(cfg_file, R_OK) != 0 && errno == ENOENT) {
|
||||
free(cfg_file);
|
||||
cfg_file = NULL;
|
||||
}
|
||||
quiet = 1;
|
||||
}
|
||||
if (cfg_file != NULL && load_cfg(cfg_file, cfg_cmd_q, &cause) == -1)
|
||||
cfg_add_cause("%s: %s", cfg_file, cause);
|
||||
free(cause);
|
||||
if (cfg_file != NULL)
|
||||
load_cfg(cfg_file, cfg_cmd_q, quiet);
|
||||
|
||||
cmdq_continue(cfg_cmd_q);
|
||||
}
|
||||
|
||||
int
|
||||
load_cfg(const char *path, struct cmd_q *cmdq, char **cause)
|
||||
load_cfg(const char *path, struct cmd_q *cmdq, int quiet)
|
||||
{
|
||||
FILE *f;
|
||||
char delim[3] = { '\\', '\\', '\0' };
|
||||
@ -93,7 +85,9 @@ load_cfg(const char *path, struct cmd_q *cmdq, char **cause)
|
||||
|
||||
log_debug("loading %s", path);
|
||||
if ((f = fopen(path, "rb")) == NULL) {
|
||||
xasprintf(cause, "%s: %s", path, strerror(errno));
|
||||
if (errno == ENOENT && quiet)
|
||||
return (0);
|
||||
cfg_add_cause("%s: %s", path, strerror(errno));
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
@ -34,8 +34,8 @@ const struct cmd_entry cmd_source_file_entry = {
|
||||
.name = "source-file",
|
||||
.alias = "source",
|
||||
|
||||
.args = { "", 1, 1 },
|
||||
.usage = "path",
|
||||
.args = { "q", 1, 1 },
|
||||
.usage = "[-q] path",
|
||||
|
||||
.flags = 0,
|
||||
.exec = cmd_source_file_exec
|
||||
@ -46,28 +46,26 @@ cmd_source_file_exec(struct cmd *self, struct cmd_q *cmdq)
|
||||
{
|
||||
struct args *args = self->args;
|
||||
struct cmd_q *cmdq1;
|
||||
char *cause;
|
||||
int quiet;
|
||||
|
||||
cmdq1 = cmdq_new(cmdq->client);
|
||||
cmdq1->flags |= cmdq->flags & CMD_Q_NOHOOKS;
|
||||
cmdq1->emptyfn = cmd_source_file_done;
|
||||
cmdq1->data = cmdq;
|
||||
|
||||
switch (load_cfg(args->argv[0], cmdq1, &cause)) {
|
||||
quiet = args_has(args, 'q');
|
||||
switch (load_cfg(args->argv[0], cmdq1, quiet)) {
|
||||
case -1:
|
||||
cmdq_free(cmdq1);
|
||||
if (cfg_references == 0) {
|
||||
cmdq_free(cmdq1);
|
||||
cmdq_error(cmdq, "%s", cause);
|
||||
free(cause);
|
||||
cfg_print_causes(cmdq);
|
||||
return (CMD_RETURN_ERROR);
|
||||
}
|
||||
cfg_add_cause("%s", cause);
|
||||
free(cause);
|
||||
/* FALLTHROUGH */
|
||||
return (CMD_RETURN_NORMAL);
|
||||
case 0:
|
||||
cmdq_free(cmdq1);
|
||||
if (cfg_references == 0)
|
||||
cfg_print_causes(cmdq);
|
||||
cmdq_free(cmdq1);
|
||||
return (CMD_RETURN_NORMAL);
|
||||
}
|
||||
|
||||
|
10
tmux.1
10
tmux.1
@ -913,10 +913,18 @@ display the log for
|
||||
and
|
||||
.Fl T
|
||||
show debugging information about jobs and terminals.
|
||||
.It Ic source-file Ar path
|
||||
.It Xo Ic source-file
|
||||
.Op Fl q
|
||||
.Ar path
|
||||
.Xc
|
||||
.D1 (alias: Ic source )
|
||||
Execute commands from
|
||||
.Ar path .
|
||||
If
|
||||
.Fl q
|
||||
is given, no error will be returned if
|
||||
.Ar path
|
||||
does not exist.
|
||||
.It Ic start-server
|
||||
.D1 (alias: Ic start )
|
||||
Start the
|
||||
|
2
tmux.h
2
tmux.h
@ -1555,7 +1555,7 @@ extern int cfg_finished;
|
||||
extern int cfg_references;
|
||||
extern struct client *cfg_client;
|
||||
void start_cfg(void);
|
||||
int load_cfg(const char *, struct cmd_q *, char **);
|
||||
int load_cfg(const char *, struct cmd_q *, int);
|
||||
void set_cfg_file(const char *);
|
||||
void printflike(1, 2) cfg_add_cause(const char *, ...);
|
||||
void cfg_print_causes(struct cmd_q *);
|
||||
|
Loading…
Reference in New Issue
Block a user