mirror of
				https://github.com/tmux/tmux.git
				synced 2025-10-26 12:27:15 +00:00 
			
		
		
		
	When using source-file, run the commands in the context of the source-file
command rather than with no context. This makes things like attach work from a file.
This commit is contained in:
		
							
								
								
									
										15
									
								
								cfg.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								cfg.c
									
									
									
									
									
								
							| @@ -51,7 +51,7 @@ cfg_error(unused struct cmd_ctx *ctx, const char *fmt, ...) | |||||||
| } | } | ||||||
|  |  | ||||||
| int | int | ||||||
| load_cfg(const char *path, char **cause) | load_cfg(const char *path, struct cmd_ctx *ctxin, char **cause) | ||||||
| { | { | ||||||
| 	FILE   	        *f; | 	FILE   	        *f; | ||||||
| 	u_int		 n; | 	u_int		 n; | ||||||
| @@ -87,15 +87,20 @@ load_cfg(const char *path, char **cause) | |||||||
| 			continue; | 			continue; | ||||||
| 		cfg_cause = NULL; | 		cfg_cause = NULL; | ||||||
|  |  | ||||||
| 		ctx.msgdata = NULL; | 		if (ctxin == NULL) { | ||||||
| 		ctx.curclient = NULL; | 			ctx.msgdata = NULL; | ||||||
|  | 			ctx.curclient = NULL; | ||||||
|  | 			ctx.cmdclient = NULL; | ||||||
|  | 		} else { | ||||||
|  | 			ctx.msgdata = ctxin->msgdata; | ||||||
|  | 			ctx.curclient = ctxin->curclient; | ||||||
|  | 			ctx.cmdclient = ctxin->cmdclient; | ||||||
|  | 		} | ||||||
|  |  | ||||||
| 		ctx.error = cfg_error; | 		ctx.error = cfg_error; | ||||||
| 		ctx.print = cfg_print; | 		ctx.print = cfg_print; | ||||||
| 		ctx.info = cfg_print; | 		ctx.info = cfg_print; | ||||||
|  |  | ||||||
| 		ctx.cmdclient = NULL; |  | ||||||
|  |  | ||||||
| 		cfg_cause = NULL; | 		cfg_cause = NULL; | ||||||
| 		cmd_list_exec(cmdlist, &ctx); | 		cmd_list_exec(cmdlist, &ctx); | ||||||
| 		cmd_list_free(cmdlist); | 		cmd_list_free(cmdlist); | ||||||
|   | |||||||
| @@ -90,7 +90,7 @@ cmd_source_file_exec(struct cmd *self, struct cmd_ctx *ctx) | |||||||
| 	struct cmd_source_file_data	*data = self->data; | 	struct cmd_source_file_data	*data = self->data; | ||||||
| 	char				*cause; | 	char				*cause; | ||||||
|  |  | ||||||
| 	if (load_cfg(data->path, &cause) != 0) { | 	if (load_cfg(data->path, ctx, &cause) != 0) { | ||||||
| 		ctx->error(ctx, "%s", cause); | 		ctx->error(ctx, "%s", cause); | ||||||
| 		xfree(cause); | 		xfree(cause); | ||||||
| 		return (-1); | 		return (-1); | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								server.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								server.c
									
									
									
									
									
								
							| @@ -188,9 +188,9 @@ server_start(char *path) | |||||||
| 			    &cause, "%s: %s", strerror(errno), SYSTEM_CFG); | 			    &cause, "%s: %s", strerror(errno), SYSTEM_CFG); | ||||||
| 			goto error; | 			goto error; | ||||||
| 		} | 		} | ||||||
| 	} else if (load_cfg(SYSTEM_CFG, &cause) != 0) | 	} else if (load_cfg(SYSTEM_CFG, NULL, &cause) != 0) | ||||||
| 		goto error; | 		goto error; | ||||||
| 	if (cfg_file != NULL && load_cfg(cfg_file, &cause) != 0) | 	if (cfg_file != NULL && load_cfg(cfg_file, NULL, &cause) != 0) | ||||||
| 		goto error; | 		goto error; | ||||||
|  |  | ||||||
| 	exit(server_main(srv_fd)); | 	exit(server_main(srv_fd)); | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								tmux.h
									
									
									
									
									
								
							| @@ -1109,7 +1109,7 @@ void		 sigreset(void); | |||||||
| void		 sighandler(int); | void		 sighandler(int); | ||||||
|  |  | ||||||
| /* cfg.c */ | /* cfg.c */ | ||||||
| int		 load_cfg(const char *, char **x); | int		 load_cfg(const char *, struct cmd_ctx *, char **); | ||||||
|  |  | ||||||
| /* mode-key.c */ | /* mode-key.c */ | ||||||
| extern const struct mode_key_table mode_key_tables[]; | extern const struct mode_key_table mode_key_tables[]; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Nicholas Marriott
					Nicholas Marriott