mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:26:05 +00:00 
			
		
		
		
	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.
			
			
This commit is contained in:
		
							
								
								
									
										28
									
								
								tmux.c
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								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);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user