summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2015-09-01 10:11:00 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2015-09-01 10:11:00 +0000
commit190cc3e24f6a113eb450ae9f149427b4ff79b627 (patch)
treedfc25fc5144e6d72302cad6b46eeaeca2ba1289c
parentbc3d8779872d9c392c651eb6765cfc081ee5ceb7 (diff)
Work out config file when needed not at startup.
-rw-r--r--usr.bin/tmux/cfg.c20
-rw-r--r--usr.bin/tmux/tmux.c30
-rw-r--r--usr.bin/tmux/tmux.h4
3 files changed, 29 insertions, 25 deletions
diff --git a/usr.bin/tmux/cfg.c b/usr.bin/tmux/cfg.c
index e4d8b721b45..7ed177fcfee 100644
--- a/usr.bin/tmux/cfg.c
+++ b/usr.bin/tmux/cfg.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cfg.c,v 1.40 2015/09/01 10:01:56 nicm Exp $ */
+/* $OpenBSD: cfg.c,v 1.41 2015/09/01 10:10:59 nicm Exp $ */
/*
* Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -28,6 +28,7 @@
#include "tmux.h"
+char *cfg_file;
struct cmd_q *cfg_cmd_q;
int cfg_finished;
int cfg_references;
@@ -38,9 +39,17 @@ struct client *cfg_client;
void cfg_default_done(struct cmd_q *);
void
+set_cfg_file(const char *path)
+{
+ free(cfg_file);
+ cfg_file = xstrdup(path);
+}
+
+void
start_cfg(void)
{
- char *cause = NULL;
+ char *cause = NULL;
+ const char *home;
cfg_cmd_q = cmdq_new(NULL);
cfg_cmd_q->emptyfn = cfg_default_done;
@@ -58,6 +67,13 @@ start_cfg(void)
} else if (errno != ENOENT)
cfg_add_cause("%s: %s", TMUX_CONF, strerror(errno));
+ 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;
+ }
+ }
if (cfg_file != NULL && load_cfg(cfg_file, cfg_cmd_q, &cause) == -1)
cfg_add_cause("%s: %s", cfg_file, cause);
free(cause);
diff --git a/usr.bin/tmux/tmux.c b/usr.bin/tmux/tmux.c
index 560039c4c25..93a1aa06a0c 100644
--- a/usr.bin/tmux/tmux.c
+++ b/usr.bin/tmux/tmux.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tmux.c,v 1.141 2015/08/30 22:56:36 nicm Exp $ */
+/* $OpenBSD: tmux.c,v 1.142 2015/09/01 10:10:59 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -41,7 +41,6 @@ struct options global_s_options; /* session options */
struct options global_w_options; /* window options */
struct environ global_environ;
-char *cfg_file;
char *shell_cmd;
int debug_level;
time_t start_time;
@@ -171,8 +170,11 @@ setblocking(int fd, int state)
const char *
find_home(void)
{
- struct passwd *pw;
- const char *home;
+ struct passwd *pw;
+ static const char *home;
+
+ if (home != NULL)
+ return (home);
home = getenv("HOME");
if (home == NULL || *home == '\0') {
@@ -189,9 +191,8 @@ find_home(void)
int
main(int argc, char **argv)
{
- char *s, *path, *label, **var, tmp[PATH_MAX];
- const char *home;
- int opt, flags, keys;
+ char *s, *path, *label, **var, tmp[PATH_MAX];
+ int opt, flags, keys;
#ifdef DEBUG
malloc_options = (char *) "AFGJPX";
@@ -221,8 +222,7 @@ main(int argc, char **argv)
flags |= CLIENT_CONTROL;
break;
case 'f':
- free(cfg_file);
- cfg_file = xstrdup(optarg);
+ set_cfg_file(optarg);
break;
case 'l':
flags |= CLIENT_LOGIN;
@@ -306,18 +306,6 @@ main(int argc, char **argv)
options_set_number(&global_w_options, "mode-keys", keys);
}
- /* Locate the configuration file. */
- if (cfg_file == NULL) {
- home = find_home();
- if (home != NULL) {
- xasprintf(&cfg_file, "%s/.tmux.conf", home);
- if (access(cfg_file, R_OK) != 0 && errno == ENOENT) {
- free(cfg_file);
- cfg_file = NULL;
- }
- }
- }
-
/*
* Figure out the socket path. If specified on the command-line with -S
* or -L, use it, otherwise try $TMUX or assume -L default.
diff --git a/usr.bin/tmux/tmux.h b/usr.bin/tmux/tmux.h
index 7a2bba02fa0..222d060207d 100644
--- a/usr.bin/tmux/tmux.h
+++ b/usr.bin/tmux/tmux.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: tmux.h,v 1.550 2015/09/01 10:01:56 nicm Exp $ */
+/* $OpenBSD: tmux.h,v 1.551 2015/09/01 10:10:59 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -1407,7 +1407,6 @@ extern struct options global_options;
extern struct options global_s_options;
extern struct options global_w_options;
extern struct environ global_environ;
-extern char *cfg_file;
extern char *shell_cmd;
extern int debug_level;
extern time_t start_time;
@@ -1425,6 +1424,7 @@ extern int cfg_references;
extern struct client *cfg_client;
void start_cfg(void);
int load_cfg(const char *, struct cmd_q *, char **);
+void set_cfg_file(const char *);
void cfg_add_cause(const char *, ...);
void cfg_print_causes(struct cmd_q *);
void cfg_show_causes(struct session *);