summaryrefslogtreecommitdiffstats
path: root/tmux.c
diff options
context:
space:
mode:
Diffstat (limited to 'tmux.c')
-rw-r--r--tmux.c46
1 files changed, 28 insertions, 18 deletions
diff --git a/tmux.c b/tmux.c
index c7ee8e49..89c7fca7 100644
--- a/tmux.c
+++ b/tmux.c
@@ -1,4 +1,4 @@
-/* $Id: tmux.c,v 1.46 2007-12-06 18:28:55 nicm Exp $ */
+/* $Id: tmux.c,v 1.47 2008-06-02 18:08:17 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -42,6 +42,7 @@ const char *_malloc_options = "AJX";
volatile sig_atomic_t sigwinch;
volatile sig_atomic_t sigterm;
+char *cfg_file;
char *default_command;
char *paste_buffer;
int bell_action;
@@ -59,8 +60,7 @@ usage(char **ptr, const char *fmt, ...)
char *msg;
va_list ap;
-#define USAGE \
- "usage: %s [-v] [-S socket-path] [-s session-name] [-c client-tty]"
+#define USAGE "usage: %s [-v] [-f file] [-S socket-path]"
if (fmt == NULL) {
xasprintf(ptr, USAGE " command [flags]", __progname);
} else {
@@ -182,22 +182,19 @@ main(int argc, char **argv)
struct hdr hdr;
const char *shell;
struct passwd *pw;
- char *client, *path, *name, *cause;
+ char *client, *path, *name, *cause, *home;
char rpath[MAXPATHLEN];
int n, opt;
client = path = name = NULL;
- while ((opt = getopt(argc, argv, "c:S:s:vV")) != EOF) {
+ while ((opt = getopt(argc, argv, "c:f:S:s:vV")) != EOF) {
switch (opt) {
- case 'c':
- client = xstrdup(optarg);
+ case 'f':
+ cfg_file = xstrdup(optarg);
break;
case 'S':
path = xstrdup(optarg);
break;
- case 's':
- name = xstrdup(optarg);
- break;
case 'v':
debug_level++;
break;
@@ -225,6 +222,26 @@ main(int argc, char **argv)
paste_buffer = NULL;
+ if (cfg_file == NULL) {
+ home = getenv("HOME");
+ if (home == NULL || *home == '\0') {
+ pw = getpwuid(getuid());
+ if (pw != NULL)
+ home = pw->pw_dir;
+ endpwent();
+ }
+ xasprintf(&cfg_file, "%s/%s", home, DEFAULT_CFG);
+ if (access(cfg_file, R_OK) != 0) {
+ xfree(cfg_file);
+ cfg_file = NULL;
+ }
+ } else {
+ if (access(cfg_file, R_OK) != 0) {
+ log_warn("%s", cfg_file);
+ exit(1);
+ }
+ }
+
if (path == NULL) {
xasprintf(&path,
"%s/%s-%lu", _PATH_TMP, __progname, (u_long) getuid());
@@ -265,14 +282,10 @@ main(int argc, char **argv)
}
memset(&cctx, 0, sizeof cctx);
- if (!(cmd->entry->flags & CMD_NOSESSION) ||
- (cmd->entry->flags & CMD_CANTNEST))
- client_fill_session(&data);
+ client_fill_session(&data);
if (client_init(rpath, &cctx, cmd->entry->flags & CMD_STARTSERVER) != 0)
exit(1);
b = buffer_create(BUFSIZ);
- cmd_send_string(b, name);
- cmd_send_string(b, client);
cmd_send(cmd, b);
cmd_free(cmd);
@@ -280,9 +293,6 @@ main(int argc, char **argv)
MSG_COMMAND, &data, sizeof data, BUFFER_OUT(b), BUFFER_USED(b));
buffer_destroy(b);
- if (name != NULL)
- xfree(name);
-
for (;;) {
pfd.fd = cctx.srv_fd;
pfd.events = POLLIN;