diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2013-10-06 21:02:23 +0100 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2013-10-06 21:02:23 +0100 |
commit | 4538c269d0b366a770a5a5ebfe0c5007569edbc1 (patch) | |
tree | 9fac1bc826683d2187e69c3e748da92a7db6a225 /tmux.c | |
parent | 446eb11cdeba97a24996cee36ba331491aba6211 (diff) | |
download | rtmux-4538c269d0b366a770a5a5ebfe0c5007569edbc1.tar.gz rtmux-4538c269d0b366a770a5a5ebfe0c5007569edbc1.tar.bz2 rtmux-4538c269d0b366a770a5a5ebfe0c5007569edbc1.zip |
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.c | 28 |
1 files changed, 3 insertions, 25 deletions
@@ -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); |