summaryrefslogtreecommitdiffstats
path: root/tmux.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2013-10-06 21:02:23 +0100
committerNicholas Marriott <nicholas.marriott@gmail.com>2013-10-06 21:02:23 +0100
commit4538c269d0b366a770a5a5ebfe0c5007569edbc1 (patch)
tree9fac1bc826683d2187e69c3e748da92a7db6a225 /tmux.c
parent446eb11cdeba97a24996cee36ba331491aba6211 (diff)
Alter how tmux handles the working directory to internally use file descriptors
rather than strings. - Each session still has a current working directory. - New sessions still get their working directory from the client that created them or its attached session if any. - New windows are created by default in the session working directory. - The -c flag to new, neww, splitw allows the working directory to be overridden. - The -c flag to attach let's the session working directory be changed. - The default-path option has been removed. To get the equivalent to default-path '.', do: bind c neww -c $PWD To get the equivalent of default-path '', do: bind c neww -c '#{pane_current_path}' The equivalent of default-path '~' is left as an exercise for the reader. This also changes the client identify protocol to be a set of messages rather than one as well as some other changes that should make it easier to make backwards-compatible protocol changes in future.
Diffstat (limited to 'tmux.c')
-rw-r--r--tmux.c28
1 files changed, 3 insertions, 25 deletions
diff --git a/tmux.c b/tmux.c
index 76b09cf4..a0359969 100644
--- a/tmux.c
+++ b/tmux.c
@@ -127,30 +127,6 @@ areshell(const char *shell)
return (0);
}
-const char *
-get_full_path(const char *wd, const char *path)
-{
- int fd;
- static char newpath[MAXPATHLEN];
- const char *retval;
-
- fd = open(".", O_RDONLY);
- if (fd == -1)
- return (NULL);
-
- retval = NULL;
- if (chdir(wd) == 0) {
- if (realpath(path, newpath) == 0)
- retval = newpath;
- }
-
- if (fchdir(fd) != 0)
- chdir("/");
- close(fd);
-
- return (retval);
-}
-
void
parseenvironment(void)
{
@@ -249,7 +225,7 @@ int
main(int argc, char **argv)
{
struct passwd *pw;
- char *s, *path, *label, *home, **var;
+ char *s, *path, *label, *home, **var, tmp[MAXPATHLEN];
int opt, flags, quiet, keys;
#if defined(DEBUG) && defined(__OpenBSD__)
@@ -333,6 +309,8 @@ main(int argc, char **argv)
environ_init(&global_environ);
for (var = environ; *var != NULL; var++)
environ_put(&global_environ, *var);
+ if (getcwd(tmp, sizeof tmp) != NULL)
+ environ_set(&global_environ, "PWD", tmp);
options_init(&global_options, NULL);
options_table_populate_tree(server_options_table, &global_options);