mirror of
				https://github.com/tmux/tmux.git
				synced 2025-10-26 12:27:15 +00:00 
			
		
		
		
	Fix error reporting for client commands by adding a flag to
cmd_find_client to tell it whether or not to show errors, sometimes it's needed and sometimes not.
This commit is contained in:
		| @@ -97,7 +97,7 @@ cmd_break_pane_exec(struct cmd *self, struct cmd_ctx *ctx) | ||||
| 			template = BREAK_PANE_TEMPLATE; | ||||
|  | ||||
| 		ft = format_create(); | ||||
| 		if ((c = cmd_find_client(ctx, NULL)) != NULL) | ||||
| 		if ((c = cmd_find_client(ctx, NULL, 1)) != NULL) | ||||
| 			format_client(ft, c); | ||||
| 		format_session(ft, s); | ||||
| 		format_winlink(ft, s, wl); | ||||
|   | ||||
| @@ -94,7 +94,7 @@ cmd_command_prompt_exec(struct cmd *self, struct cmd_ctx *ctx) | ||||
| 	char				*prompt, *ptr, *input = NULL; | ||||
| 	size_t				 n; | ||||
|  | ||||
| 	if ((c = cmd_find_client(ctx, args_get(args, 't'))) == NULL) | ||||
| 	if ((c = cmd_find_client(ctx, args_get(args, 't'), 0)) == NULL) | ||||
| 		return (CMD_RETURN_ERROR); | ||||
|  | ||||
| 	if (c->prompt_string != NULL) | ||||
|   | ||||
| @@ -79,7 +79,7 @@ cmd_confirm_before_exec(struct cmd *self, struct cmd_ctx *ctx) | ||||
| 		return (CMD_RETURN_ERROR); | ||||
| 	} | ||||
|  | ||||
| 	if ((c = cmd_find_client(ctx, args_get(args, 't'))) == NULL) | ||||
| 	if ((c = cmd_find_client(ctx, args_get(args, 't'), 0)) == NULL) | ||||
| 		return (CMD_RETURN_ERROR); | ||||
|  | ||||
| 	if ((prompt = args_get(args, 'p')) != NULL) | ||||
|   | ||||
| @@ -61,7 +61,7 @@ cmd_detach_client_exec(struct cmd *self, struct cmd_ctx *ctx) | ||||
| 				server_write_client(c, msgtype, NULL, 0); | ||||
| 		} | ||||
| 	} else { | ||||
| 		c = cmd_find_client(ctx, args_get(args, 't')); | ||||
| 		c = cmd_find_client(ctx, args_get(args, 't'), 0); | ||||
| 		if (c == NULL) | ||||
| 			return (CMD_RETURN_ERROR); | ||||
|  | ||||
|   | ||||
| @@ -55,9 +55,6 @@ cmd_display_message_exec(struct cmd *self, struct cmd_ctx *ctx) | ||||
| 	time_t			 t; | ||||
| 	size_t			 len; | ||||
|  | ||||
| 	if ((c = cmd_find_client(ctx, args_get(args, 'c'))) == NULL) | ||||
| 		return (CMD_RETURN_ERROR); | ||||
|  | ||||
| 	if (args_has(args, 't')) { | ||||
| 		wl = cmd_find_pane(ctx, args_get(args, 't'), &s, &wp); | ||||
| 		if (wl == NULL) | ||||
| @@ -80,6 +77,7 @@ cmd_display_message_exec(struct cmd *self, struct cmd_ctx *ctx) | ||||
| 		template = DISPLAY_MESSAGE_TEMPLATE; | ||||
|  | ||||
| 	ft = format_create(); | ||||
| 	if ((c = cmd_find_client(ctx, args_get(args, 'c'), 1)) != NULL) | ||||
| 		format_client(ft, c); | ||||
| 	format_session(ft, s); | ||||
| 	format_winlink(ft, s, wl); | ||||
|   | ||||
| @@ -42,7 +42,7 @@ cmd_display_panes_exec(struct cmd *self, struct cmd_ctx *ctx) | ||||
| 	struct args	*args = self->args; | ||||
| 	struct client	*c; | ||||
|  | ||||
| 	if ((c = cmd_find_client(ctx, args_get(args, 't'))) == NULL) | ||||
| 	if ((c = cmd_find_client(ctx, args_get(args, 't'), 0)) == NULL) | ||||
| 		return (CMD_RETURN_ERROR); | ||||
|  | ||||
| 	server_set_identify(c); | ||||
|   | ||||
| @@ -74,7 +74,7 @@ cmd_lock_server_exec(struct cmd *self, unused struct cmd_ctx *ctx) | ||||
| 			return (CMD_RETURN_ERROR); | ||||
| 		server_lock_session(s); | ||||
| 	} else { | ||||
| 		if ((c = cmd_find_client(ctx, args_get(args, 't'))) == NULL) | ||||
| 		if ((c = cmd_find_client(ctx, args_get(args, 't'), 0)) == NULL) | ||||
| 			return (CMD_RETURN_ERROR); | ||||
| 		server_lock_client(c); | ||||
| 	} | ||||
|   | ||||
| @@ -126,7 +126,7 @@ cmd_new_window_exec(struct cmd *self, struct cmd_ctx *ctx) | ||||
| 			template = NEW_WINDOW_TEMPLATE; | ||||
|  | ||||
| 		ft = format_create(); | ||||
| 		if ((c = cmd_find_client(ctx, NULL)) != NULL) | ||||
| 		if ((c = cmd_find_client(ctx, NULL, 1)) != NULL) | ||||
| 		    format_client(ft, c); | ||||
| 		format_session(ft, s); | ||||
| 		format_winlink(ft, s, wl); | ||||
|   | ||||
| @@ -57,7 +57,7 @@ cmd_pipe_pane_exec(struct cmd *self, struct cmd_ctx *ctx) | ||||
|  | ||||
| 	if (cmd_find_pane(ctx, args_get(args, 't'), NULL, &wp) == NULL) | ||||
| 		return (CMD_RETURN_ERROR); | ||||
| 	c = cmd_find_client(ctx, NULL); | ||||
| 	c = cmd_find_client(ctx, NULL, 1); | ||||
|  | ||||
| 	/* Destroy the old pipe. */ | ||||
| 	old_fd = wp->pipe_fd; | ||||
|   | ||||
| @@ -44,7 +44,7 @@ cmd_refresh_client_exec(struct cmd *self, struct cmd_ctx *ctx) | ||||
| 	const char	*size; | ||||
| 	u_int		 w, h; | ||||
|  | ||||
| 	if ((c = cmd_find_client(ctx, args_get(args, 't'))) == NULL) | ||||
| 	if ((c = cmd_find_client(ctx, args_get(args, 't'), 0)) == NULL) | ||||
| 		return (CMD_RETURN_ERROR); | ||||
|  | ||||
| 	if (args_has(args, 'C')) { | ||||
|   | ||||
| @@ -48,7 +48,7 @@ cmd_show_messages_exec(struct cmd *self, struct cmd_ctx *ctx) | ||||
| 	char			*tim; | ||||
| 	u_int			 i; | ||||
|  | ||||
| 	if ((c = cmd_find_client(ctx, args_get(args, 't'))) == NULL) | ||||
| 	if ((c = cmd_find_client(ctx, args_get(args, 't'), 0)) == NULL) | ||||
| 		return (CMD_RETURN_ERROR); | ||||
|  | ||||
| 	for (i = 0; i < ARRAY_LENGTH(&c->message_log); i++) { | ||||
|   | ||||
| @@ -59,8 +59,8 @@ cmd_split_window_exec(struct cmd *self, struct cmd_ctx *ctx) | ||||
| 	struct window		*w; | ||||
| 	struct window_pane	*wp, *new_wp = NULL; | ||||
| 	struct environ		 env; | ||||
| 	const char		*cmd, *cwd, *shell; | ||||
| 	char			*cause, *new_cause; | ||||
| 	const char		*cmd, *cwd, *shell, *prefix; | ||||
| 	char			*cause, *new_cause, *cmd1; | ||||
| 	u_int			 hlimit; | ||||
| 	int			 size, percentage; | ||||
| 	enum layout_type	 type; | ||||
| @@ -122,9 +122,18 @@ cmd_split_window_exec(struct cmd *self, struct cmd_ctx *ctx) | ||||
| 		goto error; | ||||
| 	} | ||||
| 	new_wp = window_add_pane(w, hlimit); | ||||
| 	if (window_pane_spawn( | ||||
| 	    new_wp, cmd, shell, cwd, &env, s->tio, &cause) != 0) | ||||
|  | ||||
| 	if (*cmd != '\0') { | ||||
| 		prefix = options_get_string(&w->options, "command-prefix"); | ||||
| 		xasprintf(&cmd1, "%s%s", prefix, cmd); | ||||
| 	} else | ||||
| 		cmd1 = xstrdup(""); | ||||
| 	if (window_pane_spawn(new_wp, cmd1, shell, cwd, &env, s->tio, | ||||
| 	    &cause) != 0) { | ||||
| 		free(cmd1); | ||||
| 		goto error; | ||||
| 	} | ||||
| 	free(cmd1); | ||||
| 	layout_assign_pane(lc, new_wp); | ||||
|  | ||||
| 	server_redraw_window(w); | ||||
| @@ -143,7 +152,7 @@ cmd_split_window_exec(struct cmd *self, struct cmd_ctx *ctx) | ||||
| 			template = SPLIT_WINDOW_TEMPLATE; | ||||
|  | ||||
| 		ft = format_create(); | ||||
| 		if ((c = cmd_find_client(ctx, NULL)) != NULL) | ||||
| 		if ((c = cmd_find_client(ctx, NULL, 1)) != NULL) | ||||
| 		    format_client(ft, c); | ||||
| 		format_session(ft, s); | ||||
| 		format_winlink(ft, s, wl); | ||||
|   | ||||
| @@ -45,7 +45,7 @@ cmd_suspend_client_exec(struct cmd *self, struct cmd_ctx *ctx) | ||||
| 	struct args	*args = self->args; | ||||
| 	struct client	*c; | ||||
|  | ||||
| 	if ((c = cmd_find_client(ctx, args_get(args, 't'))) == NULL) | ||||
| 	if ((c = cmd_find_client(ctx, args_get(args, 't'), 0)) == NULL) | ||||
| 		return (CMD_RETURN_ERROR); | ||||
|  | ||||
| 	tty_stop_tty(&c->tty); | ||||
|   | ||||
| @@ -64,7 +64,7 @@ cmd_switch_client_exec(struct cmd *self, struct cmd_ctx *ctx) | ||||
| 	struct client	*c; | ||||
| 	struct session	*s; | ||||
|  | ||||
| 	if ((c = cmd_find_client(ctx, args_get(args, 'c'))) == NULL) | ||||
| 	if ((c = cmd_find_client(ctx, args_get(args, 'c'), 0)) == NULL) | ||||
| 		return (CMD_RETURN_ERROR); | ||||
|  | ||||
| 	if (args_has(args, 'r')) { | ||||
|   | ||||
							
								
								
									
										12
									
								
								cmd.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								cmd.c
									
									
									
									
									
								
							| @@ -517,15 +517,19 @@ cmd_choose_client(struct clients *cc) | ||||
|  | ||||
| /* Find the target client or report an error and return NULL. */ | ||||
| struct client * | ||||
| cmd_find_client(struct cmd_ctx *ctx, const char *arg) | ||||
| cmd_find_client(struct cmd_ctx *ctx, const char *arg, int quiet) | ||||
| { | ||||
| 	struct client	*c; | ||||
| 	char		*tmparg; | ||||
| 	size_t		 arglen; | ||||
|  | ||||
| 	/* A NULL argument means the current client. */ | ||||
| 	if (arg == NULL) | ||||
| 		return (cmd_current_client(ctx)); | ||||
| 	if (arg == NULL) { | ||||
| 		c = cmd_current_client(ctx); | ||||
| 		if (c == NULL && !quiet) | ||||
| 			ctx->error(ctx, "no clients"); | ||||
| 		return (c); | ||||
| 	} | ||||
| 	tmparg = xstrdup(arg); | ||||
|  | ||||
| 	/* Trim a single trailing colon if any. */ | ||||
| @@ -537,7 +541,7 @@ cmd_find_client(struct cmd_ctx *ctx, const char *arg) | ||||
| 	c = cmd_lookup_client(tmparg); | ||||
|  | ||||
| 	/* If no client found, report an error. */ | ||||
| 	if (c == NULL) | ||||
| 	if (c == NULL && !quiet) | ||||
| 		ctx->error(ctx, "client not found: %s", tmparg); | ||||
|  | ||||
| 	free(tmparg); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Nicholas Marriott
					Nicholas Marriott