summaryrefslogtreecommitdiffstats
path: root/names.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2009-07-08 05:26:45 +0000
committerNicholas Marriott <nicm@openbsd.org>2009-07-08 05:26:45 +0000
commit084d07f4eb5dc3d90e28725524147e66a25b869b (patch)
tree0cbfab6bd64ee71d1023e83930ec7e6b8aeea2da /names.c
parentb4efd1ca89132dcf24acd6dc7b1ccee369b7d90c (diff)
Just appending -l to $SHELL to create a login shell is wrong: -l is not POSIX,
and some people may use shells which do not support it. Instead, make an empty default-command option mean a login shell, and fork it with a - in argv[0] which is the method used by login(1). Also fix the automatic-rename code to handle this correctly and to strip a leading - if present.
Diffstat (limited to 'names.c')
-rw-r--r--names.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/names.c b/names.c
index e4afa70f..172dc496 100644
--- a/names.c
+++ b/names.c
@@ -59,7 +59,16 @@ set_window_names(void)
if (name == NULL)
wname = default_window_name(w);
else {
- wname = parse_window_name(name);
+ /*
+ * If tmux is using the default command, it will be a
+ * login shell and argv[0] may have a - prefix. Remove
+ * this if it is present. Ick.
+ */
+ if (w->active->cmd != NULL && *w->active->cmd == '\0' &&
+ name != NULL && name[0] == '-' && name[1] != '\0')
+ wname = parse_window_name(name + 1);
+ else
+ wname = parse_window_name(name);
xfree(name);
}
@@ -78,7 +87,9 @@ default_window_name(struct window *w)
{
if (w->active->screen != &w->active->base)
return (xstrdup("[tmux]"));
- return (parse_window_name(w->active->cmd));
+ if (w->active->cmd != NULL && *w->active->cmd != '\0')
+ return (parse_window_name(w->active->cmd));
+ return (parse_window_name(window_default_command()));
}
char *