aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES7
-rw-r--r--cmd-set-option.c9
-rw-r--r--tmux.c16
3 files changed, 26 insertions, 6 deletions
diff --git a/CHANGES b/CHANGES
index 7a3ef909..cc679b44 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,8 @@
+20 October 2007
+
+* (nicm) Add default-command option and change default to be $SHELL rather than
+ $SHELL -l. Also try to read shell from passwd db if $SHELL isn't present.
+
19 October 2007
* (nicm) -n on new-session is now -s, and -n is now the initial window name.
@@ -139,5 +144,5 @@
(including mutt, emacs). No status bar yet and no key remapping or other
customisation.
-$Id: CHANGES,v 1.45 2007-10-19 17:15:28 nicm Exp $
+$Id: CHANGES,v 1.46 2007-10-20 09:57:08 nicm Exp $
diff --git a/cmd-set-option.c b/cmd-set-option.c
index b383c0a8..24d4a2f6 100644
--- a/cmd-set-option.c
+++ b/cmd-set-option.c
@@ -1,4 +1,4 @@
-/* $Id: cmd-set-option.c,v 1.9 2007-10-19 10:21:33 nicm Exp $ */
+/* $Id: cmd-set-option.c,v 1.10 2007-10-20 09:57:08 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -186,6 +186,13 @@ cmd_set_option_exec(void *ptr, unused struct cmd_ctx *ctx)
ctx->error(ctx, "unknown bell-action: %s", data->value);
return;
}
+ } else if (strcmp(data->option, "default-command") == 0) {
+ if (data->value == NULL) {
+ ctx->error(ctx, "invalid value");
+ return;
+ }
+ xfree(default_command);
+ default_command = xstrdup(data->value);
} else {
ctx->error(ctx, "unknown option: %s", data->option);
return;
diff --git a/tmux.c b/tmux.c
index 17e0e30e..b89538e2 100644
--- a/tmux.c
+++ b/tmux.c
@@ -1,4 +1,4 @@
-/* $Id: tmux.c,v 1.34 2007-10-19 21:58:17 nicm Exp $ */
+/* $Id: tmux.c,v 1.35 2007-10-20 09:57:08 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -23,6 +23,7 @@
#include <errno.h>
#include <paths.h>
#include <poll.h>
+#include <pwd.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
@@ -168,6 +169,7 @@ main(int argc, char **argv)
struct pollfd pfd;
struct hdr hdr;
const char *shell;
+ struct passwd *pw;
char *path, *cause, name[MAXNAMELEN];
int n, opt;
@@ -203,9 +205,15 @@ main(int argc, char **argv)
bell_action = BELL_ANY;
shell = getenv("SHELL");
- if (shell == NULL || *shell == '\0')
- shell = "/bin/ksh";
- xasprintf(&default_command, "exec %s -l", shell);
+ if (shell == NULL || *shell == '\0') {
+ pw = getpwuid(getuid());
+ if (pw != NULL)
+ shell = pw->pw_shell;
+ endpwent();
+ if (shell == NULL || *shell == '\0')
+ shell = _PATH_BSHELL;
+ }
+ xasprintf(&default_command, "exec %s", shell);
if ((cmd = cmd_parse(argc, argv, &cause)) == NULL) {
if (cause == NULL)