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 @@ -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 @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -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)