mirror of
				https://github.com/tmux/tmux.git
				synced 2025-10-26 12:27:15 +00:00 
			
		
		
		
	Pass file/line to new command for if-shell so that errors appear
sensibly.
This commit is contained in:
		| @@ -50,6 +50,9 @@ const struct cmd_entry cmd_if_shell_entry = { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| struct cmd_if_shell_data { | struct cmd_if_shell_data { | ||||||
|  | 	char			*file; | ||||||
|  | 	u_int			 line; | ||||||
|  |  | ||||||
| 	char			*cmd_if; | 	char			*cmd_if; | ||||||
| 	char			*cmd_else; | 	char			*cmd_else; | ||||||
|  |  | ||||||
| @@ -106,7 +109,11 @@ cmd_if_shell_exec(struct cmd *self, struct cmd_q *cmdq) | |||||||
| 		return (CMD_RETURN_NORMAL); | 		return (CMD_RETURN_NORMAL); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	cdata = xmalloc(sizeof *cdata); | 	cdata = xcalloc(1, sizeof *cdata); | ||||||
|  | 	if (self->file != NULL) { | ||||||
|  | 		cdata->file = xstrdup(self->file); | ||||||
|  | 		cdata->line = self->line; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	cdata->cmd_if = xstrdup(args->argv[1]); | 	cdata->cmd_if = xstrdup(args->argv[1]); | ||||||
| 	if (args->argc == 3) | 	if (args->argc == 3) | ||||||
| @@ -148,7 +155,8 @@ cmd_if_shell_callback(struct job *job) | |||||||
| 	if (cmd == NULL) | 	if (cmd == NULL) | ||||||
| 		return; | 		return; | ||||||
|  |  | ||||||
| 	if (cmd_string_parse(cmd, &cmdlist, NULL, 0, &cause) != 0) { | 	if (cmd_string_parse(cmd, &cmdlist, cdata->file, cdata->line, | ||||||
|  | 	    &cause) != 0) { | ||||||
| 		if (cause != NULL) { | 		if (cause != NULL) { | ||||||
| 			cmdq_error(cmdq, "%s", cause); | 			cmdq_error(cmdq, "%s", cause); | ||||||
| 			free(cause); | 			free(cause); | ||||||
| @@ -184,6 +192,8 @@ cmd_if_shell_done(struct cmd_q *cmdq1) | |||||||
|  |  | ||||||
| 	free(cdata->cmd_else); | 	free(cdata->cmd_else); | ||||||
| 	free(cdata->cmd_if); | 	free(cdata->cmd_if); | ||||||
|  |  | ||||||
|  | 	free(cdata->file); | ||||||
| 	free(cdata); | 	free(cdata); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -201,5 +211,7 @@ cmd_if_shell_free(void *data) | |||||||
|  |  | ||||||
| 	free(cdata->cmd_else); | 	free(cdata->cmd_else); | ||||||
| 	free(cdata->cmd_if); | 	free(cdata->cmd_if); | ||||||
|  |  | ||||||
|  | 	free(cdata->file); | ||||||
| 	free(cdata); | 	free(cdata); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -97,7 +97,7 @@ cmd_run_shell_exec(struct cmd *self, struct cmd_q *cmdq) | |||||||
| 	shellcmd = format_expand(ft, args->argv[0]); | 	shellcmd = format_expand(ft, args->argv[0]); | ||||||
| 	format_free(ft); | 	format_free(ft); | ||||||
|  |  | ||||||
| 	cdata = xmalloc(sizeof *cdata); | 	cdata = xcalloc(1, sizeof *cdata); | ||||||
| 	cdata->cmd = shellcmd; | 	cdata->cmd = shellcmd; | ||||||
| 	cdata->bflag = args_has(args, 'b'); | 	cdata->bflag = args_has(args, 'b'); | ||||||
| 	cdata->wp_id = wp != NULL ? (int) wp->id : -1; | 	cdata->wp_id = wp != NULL ? (int) wp->id : -1; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 nicm
					nicm