From 084d07f4eb5dc3d90e28725524147e66a25b869b Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 8 Jul 2009 05:26:45 +0000 Subject: 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. --- names.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'names.c') 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 * -- cgit