mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Merge branch 'obsd-master'
This commit is contained in:
		
							
								
								
									
										10
									
								
								cmd-find.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								cmd-find.c
									
									
									
									
									
								
							@@ -400,6 +400,7 @@ int
 | 
			
		||||
cmd_find_get_session(struct cmd_find_state *fs, const char *session)
 | 
			
		||||
{
 | 
			
		||||
	struct session	*s, *s_loop;
 | 
			
		||||
	struct client	*c;
 | 
			
		||||
 | 
			
		||||
	log_debug("%s: %s", __func__, session);
 | 
			
		||||
 | 
			
		||||
@@ -416,6 +417,13 @@ cmd_find_get_session(struct cmd_find_state *fs, const char *session)
 | 
			
		||||
	if (fs->s != NULL)
 | 
			
		||||
		return (0);
 | 
			
		||||
 | 
			
		||||
	/* Look for as a client. */
 | 
			
		||||
	c = cmd_find_client(NULL, session, 1);
 | 
			
		||||
	if (c != NULL && c->session != NULL) {
 | 
			
		||||
		fs->s = c->session;
 | 
			
		||||
		return (0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Stop now if exact only. */
 | 
			
		||||
	if (fs->flags & CMD_FIND_EXACT_SESSION)
 | 
			
		||||
		return (-1);
 | 
			
		||||
@@ -1208,7 +1216,7 @@ cmd_find_client(struct cmd_q *cmdq, const char *target, int quiet)
 | 
			
		||||
	const char	*path;
 | 
			
		||||
 | 
			
		||||
	/* A NULL argument means the current client. */
 | 
			
		||||
	if (target == NULL) {
 | 
			
		||||
	if (cmdq != NULL && target == NULL) {
 | 
			
		||||
		c = cmd_find_current_client(cmdq);
 | 
			
		||||
		if (c == NULL && !quiet)
 | 
			
		||||
			cmdq_error(cmdq, "no current client");
 | 
			
		||||
 
 | 
			
		||||
@@ -47,7 +47,7 @@ cmd_set_environment_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
{
 | 
			
		||||
	struct args	*args = self->args;
 | 
			
		||||
	struct environ	*env;
 | 
			
		||||
	const char	*name, *value;
 | 
			
		||||
	const char	*name, *value, *target;
 | 
			
		||||
 | 
			
		||||
	name = args->argv[0];
 | 
			
		||||
	if (*name == '\0') {
 | 
			
		||||
@@ -64,10 +64,19 @@ cmd_set_environment_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
	else
 | 
			
		||||
		value = args->argv[1];
 | 
			
		||||
 | 
			
		||||
	if (args_has(self->args, 'g') || cmdq->state.tflag.s == NULL)
 | 
			
		||||
	if (args_has(self->args, 'g'))
 | 
			
		||||
		env = global_environ;
 | 
			
		||||
	else
 | 
			
		||||
	else {
 | 
			
		||||
		if (cmdq->state.tflag.s == NULL) {
 | 
			
		||||
			target = args_get(args, 't');
 | 
			
		||||
			if (target != NULL)
 | 
			
		||||
				cmdq_error(cmdq, "no such session: %s", target);
 | 
			
		||||
			else
 | 
			
		||||
				cmdq_error(cmdq, "no current session");
 | 
			
		||||
			return (CMD_RETURN_ERROR);
 | 
			
		||||
		}
 | 
			
		||||
		env = cmdq->state.tflag.s->environ;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (args_has(self->args, 'u')) {
 | 
			
		||||
		if (value != NULL) {
 | 
			
		||||
 
 | 
			
		||||
@@ -100,7 +100,7 @@ cmd_set_option_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
	struct client				*c;
 | 
			
		||||
	const struct options_table_entry	*oe;
 | 
			
		||||
	struct options				*oo;
 | 
			
		||||
	const char				*optstr, *valstr;
 | 
			
		||||
	const char				*optstr, *valstr, *target;
 | 
			
		||||
 | 
			
		||||
	/* Get the option name and value. */
 | 
			
		||||
	optstr = args->argv[0];
 | 
			
		||||
@@ -140,29 +140,29 @@ cmd_set_option_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
	else if (oe->scope == OPTIONS_TABLE_WINDOW) {
 | 
			
		||||
		if (args_has(self->args, 'g'))
 | 
			
		||||
			oo = global_w_options;
 | 
			
		||||
		else {
 | 
			
		||||
			if (wl == NULL) {
 | 
			
		||||
				cmdq_error(cmdq,
 | 
			
		||||
				    "couldn't set '%s'%s", optstr,
 | 
			
		||||
				    (!args_has(args, 't') && !args_has(args,
 | 
			
		||||
				    'g')) ? " need target window or -g" : "");
 | 
			
		||||
				return (CMD_RETURN_ERROR);
 | 
			
		||||
			}
 | 
			
		||||
		else if (wl == NULL) {
 | 
			
		||||
			target = args_get(args, 't');
 | 
			
		||||
			if (target != NULL) {
 | 
			
		||||
				cmdq_error(cmdq, "no such window: %s",
 | 
			
		||||
				    target);
 | 
			
		||||
			} else
 | 
			
		||||
				cmdq_error(cmdq, "no current window");
 | 
			
		||||
			return (CMD_RETURN_ERROR);
 | 
			
		||||
		} else
 | 
			
		||||
			oo = wl->window->options;
 | 
			
		||||
		}
 | 
			
		||||
	} else if (oe->scope == OPTIONS_TABLE_SESSION) {
 | 
			
		||||
		if (args_has(self->args, 'g'))
 | 
			
		||||
			oo = global_s_options;
 | 
			
		||||
		else {
 | 
			
		||||
			if (s == NULL) {
 | 
			
		||||
				cmdq_error(cmdq,
 | 
			
		||||
				    "couldn't set '%s'%s", optstr,
 | 
			
		||||
				    (!args_has(args, 't') && !args_has(args,
 | 
			
		||||
				    'g')) ? " need target session or -g" : "");
 | 
			
		||||
				return (CMD_RETURN_ERROR);
 | 
			
		||||
			}
 | 
			
		||||
		else if (s == NULL) {
 | 
			
		||||
			target = args_get(args, 't');
 | 
			
		||||
			if (target != NULL) {
 | 
			
		||||
				cmdq_error(cmdq, "no such session: %s",
 | 
			
		||||
				    target);
 | 
			
		||||
			} else
 | 
			
		||||
				cmdq_error(cmdq, "no current session");
 | 
			
		||||
			return (CMD_RETURN_ERROR);
 | 
			
		||||
		} else
 | 
			
		||||
			oo = s->options;
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		cmdq_error(cmdq, "unknown table");
 | 
			
		||||
		return (CMD_RETURN_ERROR);
 | 
			
		||||
 
 | 
			
		||||
@@ -93,11 +93,28 @@ cmd_show_environment_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
	struct args		*args = self->args;
 | 
			
		||||
	struct environ		*env;
 | 
			
		||||
	struct environ_entry	*envent;
 | 
			
		||||
	const char		*target;
 | 
			
		||||
 | 
			
		||||
	if (args_has(self->args, 'g') || cmdq->state.tflag.s == NULL)
 | 
			
		||||
	if ((target = args_get(args, 't')) != NULL) {
 | 
			
		||||
		if (cmdq->state.tflag.s == NULL) {
 | 
			
		||||
			cmdq_error(cmdq, "no such session: %s", target);
 | 
			
		||||
			return (CMD_RETURN_ERROR);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (args_has(self->args, 'g'))
 | 
			
		||||
		env = global_environ;
 | 
			
		||||
	else
 | 
			
		||||
	else {
 | 
			
		||||
		if (cmdq->state.tflag.s == NULL) {
 | 
			
		||||
			target = args_get(args, 't');
 | 
			
		||||
			if (target != NULL)
 | 
			
		||||
				cmdq_error(cmdq, "no such session: %s", target);
 | 
			
		||||
			else
 | 
			
		||||
				cmdq_error(cmdq, "no current session");
 | 
			
		||||
			return (CMD_RETURN_ERROR);
 | 
			
		||||
		}
 | 
			
		||||
		env = cmdq->state.tflag.s->environ;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (args->argc != 0) {
 | 
			
		||||
		envent = environ_find(env, args->argv[0]);
 | 
			
		||||
 
 | 
			
		||||
@@ -63,12 +63,13 @@ const struct cmd_entry cmd_show_window_options_entry = {
 | 
			
		||||
enum cmd_retval
 | 
			
		||||
cmd_show_options_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
{
 | 
			
		||||
	struct args				*args = self->args;
 | 
			
		||||
	struct session				*s = cmdq->state.tflag.s;
 | 
			
		||||
	struct winlink				*wl = cmdq->state.tflag.wl;
 | 
			
		||||
	struct options				*oo;
 | 
			
		||||
	enum options_table_scope		 scope;
 | 
			
		||||
	int					 quiet;
 | 
			
		||||
	struct args			*args = self->args;
 | 
			
		||||
	struct session			*s = cmdq->state.tflag.s;
 | 
			
		||||
	struct winlink			*wl = cmdq->state.tflag.wl;
 | 
			
		||||
	struct options			*oo;
 | 
			
		||||
	enum options_table_scope	 scope;
 | 
			
		||||
	int				 quiet;
 | 
			
		||||
	const char			*target;
 | 
			
		||||
 | 
			
		||||
	if (args_has(self->args, 's')) {
 | 
			
		||||
		oo = global_options;
 | 
			
		||||
@@ -78,13 +79,27 @@ cmd_show_options_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
		scope = OPTIONS_TABLE_WINDOW;
 | 
			
		||||
		if (args_has(self->args, 'g'))
 | 
			
		||||
			oo = global_w_options;
 | 
			
		||||
		else
 | 
			
		||||
		else if (wl == NULL) {
 | 
			
		||||
			target = args_get(args, 't');
 | 
			
		||||
			if (target != NULL) {
 | 
			
		||||
				cmdq_error(cmdq, "no such window: %s", target);
 | 
			
		||||
			} else
 | 
			
		||||
				cmdq_error(cmdq, "no current window");
 | 
			
		||||
			return (CMD_RETURN_ERROR);
 | 
			
		||||
		} else
 | 
			
		||||
			oo = wl->window->options;
 | 
			
		||||
	} else {
 | 
			
		||||
		scope = OPTIONS_TABLE_SESSION;
 | 
			
		||||
		if (args_has(self->args, 'g'))
 | 
			
		||||
			oo = global_s_options;
 | 
			
		||||
		else
 | 
			
		||||
		else if (s == NULL) {
 | 
			
		||||
			target = args_get(args, 't');
 | 
			
		||||
			if (target != NULL) {
 | 
			
		||||
				cmdq_error(cmdq, "no such session: %s", target);
 | 
			
		||||
			} else
 | 
			
		||||
				cmdq_error(cmdq, "no current session");
 | 
			
		||||
			return (CMD_RETURN_ERROR);
 | 
			
		||||
		} else
 | 
			
		||||
			oo = s->options;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user