mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Allow a single option to be specified to show-options to show just that
option.
This commit is contained in:
		@@ -29,9 +29,6 @@
 | 
			
		||||
 | 
			
		||||
int	cmd_set_option_exec(struct cmd *, struct cmd_ctx *);
 | 
			
		||||
 | 
			
		||||
int	cmd_set_option_find(const char *, const struct options_table_entry **,
 | 
			
		||||
	    const struct options_table_entry **);
 | 
			
		||||
 | 
			
		||||
int	cmd_set_option_unset(struct cmd *, struct cmd_ctx *,
 | 
			
		||||
	    const struct options_table_entry *, struct options *,
 | 
			
		||||
	    const char *);
 | 
			
		||||
@@ -81,39 +78,6 @@ const struct cmd_entry cmd_set_window_option_entry = {
 | 
			
		||||
	cmd_set_option_exec
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Look for an option in all three tables. */
 | 
			
		||||
int
 | 
			
		||||
cmd_set_option_find(
 | 
			
		||||
    const char *optstr, const struct options_table_entry **table,
 | 
			
		||||
    const struct options_table_entry **oe)
 | 
			
		||||
{
 | 
			
		||||
	static const struct options_table_entry	*tables[] = {
 | 
			
		||||
		server_options_table,
 | 
			
		||||
		window_options_table,
 | 
			
		||||
		session_options_table
 | 
			
		||||
	};
 | 
			
		||||
	const struct options_table_entry	*oe_loop;
 | 
			
		||||
	u_int					 i;
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < nitems(tables); i++) {
 | 
			
		||||
		for (oe_loop = tables[i]; oe_loop->name != NULL; oe_loop++) {
 | 
			
		||||
			if (strncmp(oe_loop->name, optstr, strlen(optstr)) != 0)
 | 
			
		||||
				continue;
 | 
			
		||||
 | 
			
		||||
			/* If already found, ambiguous. */
 | 
			
		||||
			if (*oe != NULL)
 | 
			
		||||
				return (-1);
 | 
			
		||||
			*oe = oe_loop;
 | 
			
		||||
			*table = tables[i];
 | 
			
		||||
 | 
			
		||||
			/* Bail now if an exact match. */
 | 
			
		||||
			if (strcmp((*oe)->name, optstr) == 0)
 | 
			
		||||
				break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
cmd_set_option_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
{
 | 
			
		||||
@@ -139,7 +103,7 @@ cmd_set_option_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
 | 
			
		||||
	/* Find the option entry, try each table. */
 | 
			
		||||
	table = oe = NULL;
 | 
			
		||||
	if (cmd_set_option_find(optstr, &table, &oe) != 0) {
 | 
			
		||||
	if (options_table_find(optstr, &table, &oe) != 0) {
 | 
			
		||||
		ctx->error(ctx, "ambiguous option: %s", optstr);
 | 
			
		||||
		return (-1);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -31,8 +31,8 @@ int	cmd_show_options_exec(struct cmd *, struct cmd_ctx *);
 | 
			
		||||
 | 
			
		||||
const struct cmd_entry cmd_show_options_entry = {
 | 
			
		||||
	"show-options", "show",
 | 
			
		||||
	"gst:w", 0, 0,
 | 
			
		||||
	"[-gsw] [-t target-session|target-window]",
 | 
			
		||||
	"gst:w", 0, 1,
 | 
			
		||||
	"[-gsw] [-t target-session|target-window] [option]",
 | 
			
		||||
	0,
 | 
			
		||||
	NULL,
 | 
			
		||||
	NULL,
 | 
			
		||||
@@ -41,8 +41,8 @@ const struct cmd_entry cmd_show_options_entry = {
 | 
			
		||||
 | 
			
		||||
const struct cmd_entry cmd_show_window_options_entry = {
 | 
			
		||||
	"show-window-options", "showw",
 | 
			
		||||
	"gt:", 0, 0,
 | 
			
		||||
	"[-g] " CMD_TARGET_WINDOW_USAGE,
 | 
			
		||||
	"gt:", 0, 1,
 | 
			
		||||
	"[-g] " CMD_TARGET_WINDOW_USAGE " [option]",
 | 
			
		||||
	0,
 | 
			
		||||
	NULL,
 | 
			
		||||
	NULL,
 | 
			
		||||
@@ -86,11 +86,27 @@ cmd_show_options_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for (oe = table; oe->name != NULL; oe++) {
 | 
			
		||||
	if (args->argc != 0) {
 | 
			
		||||
		table = oe = NULL;
 | 
			
		||||
		if (options_table_find(args->argv[0], &table, &oe) != 0) {
 | 
			
		||||
			ctx->error(ctx, "ambiguous option: %s", args->argv[0]);
 | 
			
		||||
			return (-1);
 | 
			
		||||
		}
 | 
			
		||||
		if (oe == NULL) {
 | 
			
		||||
			ctx->error(ctx, "unknown option: %s", args->argv[0]);
 | 
			
		||||
			return (-1);
 | 
			
		||||
		}
 | 
			
		||||
		if ((o = options_find1(oo, oe->name)) == NULL)
 | 
			
		||||
			continue;
 | 
			
		||||
			return (0);
 | 
			
		||||
		optval = options_table_print_entry(oe, o);
 | 
			
		||||
		ctx->print(ctx, "%s %s", oe->name, optval);
 | 
			
		||||
	} else {
 | 
			
		||||
		for (oe = table; oe->name != NULL; oe++) {
 | 
			
		||||
			if ((o = options_find1(oo, oe->name)) == NULL)
 | 
			
		||||
				continue;
 | 
			
		||||
			optval = options_table_print_entry(oe, o);
 | 
			
		||||
			ctx->print(ctx, "%s %s", oe->name, optval);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return (0);
 | 
			
		||||
 
 | 
			
		||||
@@ -569,6 +569,13 @@ const struct options_table_entry window_options_table[] = {
 | 
			
		||||
	  .default_num = 0
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	{ .name = "rate-limit",
 | 
			
		||||
	  .type = OPTIONS_TABLE_NUMBER,
 | 
			
		||||
	  .minimum = 0,
 | 
			
		||||
	  .maximum = UINT_MAX,
 | 
			
		||||
	  .default_num = 0
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	{ .name = "remain-on-exit",
 | 
			
		||||
	  .type = OPTIONS_TABLE_FLAG,
 | 
			
		||||
	  .default_num = 0
 | 
			
		||||
@@ -732,3 +739,36 @@ options_table_print_entry(
 | 
			
		||||
	}
 | 
			
		||||
	return (out);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Find an option. */
 | 
			
		||||
int
 | 
			
		||||
options_table_find(
 | 
			
		||||
    const char *optstr, const struct options_table_entry **table,
 | 
			
		||||
    const struct options_table_entry **oe)
 | 
			
		||||
{
 | 
			
		||||
	static const struct options_table_entry	*tables[] = {
 | 
			
		||||
		server_options_table,
 | 
			
		||||
		window_options_table,
 | 
			
		||||
		session_options_table
 | 
			
		||||
	};
 | 
			
		||||
	const struct options_table_entry	*oe_loop;
 | 
			
		||||
	u_int					 i;
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < nitems(tables); i++) {
 | 
			
		||||
		for (oe_loop = tables[i]; oe_loop->name != NULL; oe_loop++) {
 | 
			
		||||
			if (strncmp(oe_loop->name, optstr, strlen(optstr)) != 0)
 | 
			
		||||
				continue;
 | 
			
		||||
 | 
			
		||||
			/* If already found, ambiguous. */
 | 
			
		||||
			if (*oe != NULL)
 | 
			
		||||
				return (-1);
 | 
			
		||||
			*oe = oe_loop;
 | 
			
		||||
			*table = tables[i];
 | 
			
		||||
 | 
			
		||||
			/* Bail now if an exact match. */
 | 
			
		||||
			if (strcmp((*oe)->name, optstr) == 0)
 | 
			
		||||
				break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								tmux.1
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								tmux.1
									
									
									
									
									
								
							@@ -2622,9 +2622,10 @@ The default is off.
 | 
			
		||||
.It Xo Ic show-options
 | 
			
		||||
.Op Fl gsw
 | 
			
		||||
.Op Fl t Ar target-session | Ar target-window
 | 
			
		||||
.Op Ar option
 | 
			
		||||
.Xc
 | 
			
		||||
.D1 (alias: Ic show )
 | 
			
		||||
Show the window options with
 | 
			
		||||
Show the window options (or a single window option if given) with
 | 
			
		||||
.Fl w
 | 
			
		||||
(equivalent to
 | 
			
		||||
.Ic show-window-options ) ,
 | 
			
		||||
@@ -2638,9 +2639,10 @@ is used.
 | 
			
		||||
.It Xo Ic show-window-options
 | 
			
		||||
.Op Fl g
 | 
			
		||||
.Op Fl t Ar target-window
 | 
			
		||||
.Op Ar option
 | 
			
		||||
.Xc
 | 
			
		||||
.D1 (alias: Ic showw )
 | 
			
		||||
List the window options for
 | 
			
		||||
List the window options or a single option for
 | 
			
		||||
.Ar target-window ,
 | 
			
		||||
or the global window options if
 | 
			
		||||
.Fl g
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								tmux.h
									
									
									
									
									
								
							@@ -1419,6 +1419,9 @@ void	options_table_populate_tree(
 | 
			
		||||
	    const struct options_table_entry *, struct options *);
 | 
			
		||||
const char *options_table_print_entry(
 | 
			
		||||
	    const struct options_table_entry *, struct options_entry *);
 | 
			
		||||
int	options_table_find(
 | 
			
		||||
	    const char *, const struct options_table_entry **,
 | 
			
		||||
	    const struct options_table_entry **);
 | 
			
		||||
 | 
			
		||||
/* job.c */
 | 
			
		||||
extern struct joblist all_jobs;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user