Tmux does currently not set $PWD when creating a new window. This makes it impossible for the shell to figure out the path specified by the user, if it contains symlinks. Example:
$ cd /tmp $ mkdir a $ ln -s a b $ cd b $ pwd /tmp/b $ tmux In tmux: $ pwd /tmp/a My suggestion is to make tmux aware of $PWD. It should honor $PWD if it correctly points to the current directory and should set it when changing the directory. If there is any need for an option to disable this behaviour I'll happily provide it, actually its almost implemented completely but I'm not sure if there is any need for an option to disable this. diff --git a/client.c b/client.c index 9e5c4c6..6090844 100644 --- a/client.c +++ b/client.c @@ -212,13 +212,20 @@ void client_send_identify(int flags) { struct msg_identify_data data; - char *term; + char *pwd, *term; + struct stat stpwd, stdot; int fd; data.flags = flags; - if (getcwd(data.cwd, sizeof data.cwd) == NULL) + pwd = getenv("PWD"); + if (pwd && strlen(pwd) < sizeof data.cwd && + stat(pwd, &stpwd) == 0 && stat(".", &stdot) == 0 && + stdot.st_dev == stpwd.st_dev && stdot.st_ino == stpwd.st_ino) { + strlcpy(data.cwd, pwd, sizeof data.cwd); + } else if (getcwd(data.cwd, sizeof data.cwd) == NULL) { *data.cwd = '\0'; + } term = getenv("TERM"); if (term == NULL || diff --git a/cmd-respawn-pane.c b/cmd-respawn-pane.c index d4d67d5..a375b7f 100644 --- a/cmd-respawn-pane.c +++ b/cmd-respawn-pane.c @@ -68,6 +68,7 @@ cmd_respawn_pane_exec(struct cmd *self, struct cmd_ctx *ctx) environ_copy(&global_environ, &env); environ_copy(&s->environ, &env); server_fill_environ(s, &env); + environ_set(&env, "PWD", wp->cwd); window_pane_reset_mode(wp); screen_reinit(&wp->base); diff --git a/cmd-respawn-window.c b/cmd-respawn-window.c index eb45d17..932406a 100644 --- a/cmd-respawn-window.c +++ b/cmd-respawn-window.c @@ -64,11 +64,6 @@ cmd_respawn_window_exec(struct cmd *self, struct cmd_ctx *ctx) } } - environ_init(&env); - environ_copy(&global_environ, &env); - environ_copy(&s->environ, &env); - server_fill_environ(s, &env); - wp = TAILQ_FIRST(&w->panes); TAILQ_REMOVE(&w->panes, wp, entry); layout_free(w); @@ -79,6 +74,13 @@ cmd_respawn_window_exec(struct cmd *self, struct cmd_ctx *ctx) cmd = args->argv[0]; else cmd = NULL; + + environ_init(&env); + environ_copy(&global_environ, &env); + environ_copy(&s->environ, &env); + server_fill_environ(s, &env); + environ_set(&env, "PWD", wp->cwd); + if (window_pane_spawn(wp, cmd, NULL, NULL, &env, s->tio, &cause) != 0) { ctx->error(ctx, "respawn window failed: %s", cause); xfree(cause); diff --git a/cmd-split-window.c b/cmd-split-window.c index 258c632..3e797f1 100644 --- a/cmd-split-window.c +++ b/cmd-split-window.c @@ -68,11 +68,6 @@ cmd_split_window_exec(struct cmd *self, struct cmd_ctx *ctx) return (-1); w = wl->window; - environ_init(&env); - environ_copy(&global_environ, &env); - environ_copy(&s->environ, &env); - server_fill_environ(s, &env); - if (args->argc == 0) cmd = options_get_string(&s->options, "default-command"); else @@ -85,6 +80,12 @@ cmd_split_window_exec(struct cmd *self, struct cmd_ctx *ctx) cwd = s->cwd; } + environ_init(&env); + environ_copy(&global_environ, &env); + environ_copy(&s->environ, &env); + server_fill_environ(s, &env); + environ_set(&env, "PWD", cwd); + type = LAYOUT_TOPBOTTOM; if (args_has(args, 'h')) type = LAYOUT_LEFTRIGHT; diff --git a/session.c b/session.c index 2fa61d2..cbd9951 100644 --- a/session.c +++ b/session.c @@ -239,6 +239,7 @@ session_new(struct session *s, environ_copy(&global_environ, &env); environ_copy(&s->environ, &env); server_fill_environ(s, &env); + environ_set(&env, "PWD", cwd); shell = options_get_string(&s->options, "default-shell"); if (*shell == '\0' || areshell(shell)) -- 1.7.7.3 ------------------------------------------------------------------------------ All the data continuously generated in your IT infrastructure contains a definitive record of customers, application performance, security threats, fraudulent activity, and more. Splunk takes this data and makes sense of it. IT sense. And common sense. http://p.sf.net/sfu/splunk-novd2d _______________________________________________ tmux-users mailing list tmux-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tmux-users