mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Add "server options" which are server-wide and not bound to a session or
window. Set and displayed with "set -s" and "show -s". Currently the only option is "quiet" (like command-line -q, allowing it to be set from .tmux.conf), but others will come along.
This commit is contained in:
		@@ -70,8 +70,8 @@ cmd_server_info_exec(unused struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
	tim = ctime(&start_time);
 | 
			
		||||
	*strchr(tim, '\n') = '\0';
 | 
			
		||||
	ctx->print(ctx, "pid %ld, started %s", (long) getpid(), tim);
 | 
			
		||||
	ctx->print(ctx, "socket path %s, debug level %d%s",
 | 
			
		||||
	    socket_path, debug_level, be_quiet ? ", quiet" : "");
 | 
			
		||||
	ctx->print(
 | 
			
		||||
	    ctx, "socket path %s, debug level %d", socket_path, debug_level);
 | 
			
		||||
	if (uname(&un) == 0) {
 | 
			
		||||
		ctx->print(ctx, "system is %s %s %s %s",
 | 
			
		||||
		    un.sysname, un.release, un.version, un.machine);
 | 
			
		||||
 
 | 
			
		||||
@@ -48,8 +48,8 @@ void	cmd_set_option_choice(struct cmd_ctx *,
 | 
			
		||||
 | 
			
		||||
const struct cmd_entry cmd_set_option_entry = {
 | 
			
		||||
	"set-option", "set",
 | 
			
		||||
	"[-aguw] [-t target-session|target-window] option [value]",
 | 
			
		||||
	CMD_ARG12, "aguw",
 | 
			
		||||
	"[-agsuw] [-t target-session|target-window] option [value]",
 | 
			
		||||
	CMD_ARG12, "agsuw",
 | 
			
		||||
	NULL,
 | 
			
		||||
	cmd_target_parse,
 | 
			
		||||
	cmd_set_option_exec,
 | 
			
		||||
@@ -73,6 +73,10 @@ const char *set_option_bell_action_list[] = {
 | 
			
		||||
	"none", "any", "current", NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const struct set_option_entry set_option_table[] = {
 | 
			
		||||
	{ "quiet", SET_OPTION_FLAG, 0, 0, NULL },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const struct set_option_entry set_session_option_table[] = {
 | 
			
		||||
	{ "base-index", SET_OPTION_NUMBER, 0, INT_MAX, NULL },
 | 
			
		||||
	{ "bell-action", SET_OPTION_CHOICE, 0, 0, set_option_bell_action_list },
 | 
			
		||||
@@ -172,7 +176,10 @@ cmd_set_option_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
	u_int				 i;
 | 
			
		||||
	int				 try_again;
 | 
			
		||||
 | 
			
		||||
	if (cmd_check_flag(data->chflags, 'w')) {
 | 
			
		||||
	if (cmd_check_flag(data->chflags, 's')) {
 | 
			
		||||
		oo = &global_options;
 | 
			
		||||
		table = set_option_table;
 | 
			
		||||
	} else if (cmd_check_flag(data->chflags, 'w')) {
 | 
			
		||||
		table = set_window_option_table;
 | 
			
		||||
		if (cmd_check_flag(data->chflags, 'g'))
 | 
			
		||||
			oo = &global_w_options;
 | 
			
		||||
 
 | 
			
		||||
@@ -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",
 | 
			
		||||
	"[-gw] [-t target-session|target-window]",
 | 
			
		||||
	0, "gw",
 | 
			
		||||
	"[-gsw] [-t target-session|target-window]",
 | 
			
		||||
	0, "gsw",
 | 
			
		||||
	cmd_target_init,
 | 
			
		||||
	cmd_target_parse,
 | 
			
		||||
	cmd_show_options_exec,
 | 
			
		||||
@@ -52,7 +52,10 @@ cmd_show_options_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
	const struct set_option_entry   *entry;
 | 
			
		||||
	const char			*optval;
 | 
			
		||||
 | 
			
		||||
	if (cmd_check_flag(data->chflags, 'w')) {
 | 
			
		||||
	if (cmd_check_flag(data->chflags, 's')) {
 | 
			
		||||
		oo = &global_options;
 | 
			
		||||
		table = set_option_table;
 | 
			
		||||
	} else if (cmd_check_flag(data->chflags, 'w')) {
 | 
			
		||||
		table = set_window_option_table;
 | 
			
		||||
		if (cmd_check_flag(data->chflags, 'g'))
 | 
			
		||||
			oo = &global_w_options;
 | 
			
		||||
 
 | 
			
		||||
@@ -224,7 +224,7 @@ key_bindings_info(struct cmd_ctx *ctx, const char *fmt, ...)
 | 
			
		||||
	va_list	ap;
 | 
			
		||||
	char   *msg;
 | 
			
		||||
 | 
			
		||||
	if (be_quiet)
 | 
			
		||||
	if (options_get_number(&global_options, "quiet"))
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	va_start(ap, fmt);
 | 
			
		||||
 
 | 
			
		||||
@@ -640,7 +640,7 @@ server_client_msg_info(struct cmd_ctx *ctx, const char *fmt, ...)
 | 
			
		||||
	struct msg_print_data	data;
 | 
			
		||||
	va_list			ap;
 | 
			
		||||
 | 
			
		||||
	if (be_quiet)
 | 
			
		||||
	if (options_get_number(&global_options, "quiet"))
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	va_start(ap, fmt);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										85
									
								
								tmux.1
									
									
									
									
									
								
							
							
						
						
									
										85
									
								
								tmux.1
									
									
									
									
									
								
							@@ -151,8 +151,9 @@ signal may be sent to the
 | 
			
		||||
.Nm
 | 
			
		||||
server process to recreate it.
 | 
			
		||||
.It Fl q
 | 
			
		||||
Prevent the server sending various informational messages, for example when
 | 
			
		||||
window flags are altered.
 | 
			
		||||
Set the
 | 
			
		||||
.Ic quiet
 | 
			
		||||
server option to prevent the server sending various informational messages.
 | 
			
		||||
.It Fl S Ar socket-path
 | 
			
		||||
Specify a full alternative path to the server socket.
 | 
			
		||||
If
 | 
			
		||||
@@ -1209,13 +1210,26 @@ or for normal mode without.
 | 
			
		||||
The appearance and behaviour of
 | 
			
		||||
.Nm
 | 
			
		||||
may be modified by changing the value of various options.
 | 
			
		||||
There are two types of option:
 | 
			
		||||
There are three types of option:
 | 
			
		||||
.Em server options ,
 | 
			
		||||
.Em session options
 | 
			
		||||
and
 | 
			
		||||
.Em window options .
 | 
			
		||||
.Pp
 | 
			
		||||
Each individual session may have a set of session options, and there is a
 | 
			
		||||
separate set of global session options.
 | 
			
		||||
The
 | 
			
		||||
.Nm
 | 
			
		||||
server has a set of global options which do not apply to any particular
 | 
			
		||||
window or session.
 | 
			
		||||
These are altered with the
 | 
			
		||||
.Ic set-option
 | 
			
		||||
.Fl s
 | 
			
		||||
command, or displayed with the
 | 
			
		||||
.Ic show-options
 | 
			
		||||
.Fl s
 | 
			
		||||
command.
 | 
			
		||||
.Pp
 | 
			
		||||
In addition, each individual session may have a set of session options, and
 | 
			
		||||
there is a separate set of global session options.
 | 
			
		||||
Sessions which do not have a particular option configured inherit the value
 | 
			
		||||
from the global session options.
 | 
			
		||||
Session options are set or unset with the
 | 
			
		||||
@@ -1223,7 +1237,7 @@ Session options are set or unset with the
 | 
			
		||||
command and may be listed with the
 | 
			
		||||
.Ic show-options
 | 
			
		||||
command.
 | 
			
		||||
The available session options are listed under the
 | 
			
		||||
The available server and session options are listed under the
 | 
			
		||||
.Ic set-option
 | 
			
		||||
command.
 | 
			
		||||
.Pp
 | 
			
		||||
@@ -1241,31 +1255,44 @@ command.
 | 
			
		||||
Commands which set options are as follows:
 | 
			
		||||
.Bl -tag -width Ds
 | 
			
		||||
.It Xo Ic set-option
 | 
			
		||||
.Op Fl aguw
 | 
			
		||||
.Op Fl agsuw
 | 
			
		||||
.Op Fl t Ar target-session | Ar target-window
 | 
			
		||||
.Ar option Ar value
 | 
			
		||||
.Xc
 | 
			
		||||
.D1 (alias: Ic set )
 | 
			
		||||
Set a session option.
 | 
			
		||||
Set a window option with
 | 
			
		||||
.Fl w
 | 
			
		||||
(equivalent to the
 | 
			
		||||
.Ic set-window-option
 | 
			
		||||
command),
 | 
			
		||||
a server option with
 | 
			
		||||
.Fl s ,
 | 
			
		||||
otherwise a session option.
 | 
			
		||||
.Pp
 | 
			
		||||
If
 | 
			
		||||
.Fl g
 | 
			
		||||
is specified, the global session or window option is set.
 | 
			
		||||
With
 | 
			
		||||
.Fl a ,
 | 
			
		||||
and if the option expects a string,
 | 
			
		||||
.Ar value
 | 
			
		||||
is appended to the existing setting.
 | 
			
		||||
If
 | 
			
		||||
.Fl g
 | 
			
		||||
is specified, the global session option is set.
 | 
			
		||||
The
 | 
			
		||||
.Fl u
 | 
			
		||||
flag unsets an option, so a session inherits the option from the global
 | 
			
		||||
options - it is not possible to unset a global option.
 | 
			
		||||
options.
 | 
			
		||||
It is not possible to unset a global option.
 | 
			
		||||
.Pp
 | 
			
		||||
With
 | 
			
		||||
.Fl w ,
 | 
			
		||||
this command is equivalent to
 | 
			
		||||
.Ic set-window-option
 | 
			
		||||
with
 | 
			
		||||
.Ar target-window .
 | 
			
		||||
Available window options are listed under
 | 
			
		||||
.Ic set-window-option .
 | 
			
		||||
.Pp
 | 
			
		||||
Available server options are:
 | 
			
		||||
.Bl -tag -width Ds
 | 
			
		||||
.It Ic quiet
 | 
			
		||||
Enable of disable the display of various informational messages (see also the
 | 
			
		||||
.Fl q
 | 
			
		||||
command line flag).
 | 
			
		||||
.El
 | 
			
		||||
.Pp
 | 
			
		||||
Available session options are:
 | 
			
		||||
.Bl -tag -width Ds
 | 
			
		||||
@@ -1850,21 +1877,21 @@ as Shift, Alt or Ctrl.
 | 
			
		||||
The default is off.
 | 
			
		||||
.El
 | 
			
		||||
.It Xo Ic show-options
 | 
			
		||||
.Op Fl gw
 | 
			
		||||
.Op Fl gsw
 | 
			
		||||
.Op Fl t Ar target-session | Ar target-window
 | 
			
		||||
.Xc
 | 
			
		||||
.D1 (alias: Ic show )
 | 
			
		||||
Show the session options for
 | 
			
		||||
.Ar target session ,
 | 
			
		||||
or the global session options with
 | 
			
		||||
.Fl g .
 | 
			
		||||
.Pp
 | 
			
		||||
If
 | 
			
		||||
Show the window options with
 | 
			
		||||
.Fl w
 | 
			
		||||
is used, this command is equivalent to
 | 
			
		||||
.Ic show-window-options
 | 
			
		||||
with
 | 
			
		||||
.Ar target-window .
 | 
			
		||||
(equivalent to
 | 
			
		||||
.Ic show-window-options ),
 | 
			
		||||
the server options with
 | 
			
		||||
.Fl s ,
 | 
			
		||||
otherwise the session options for
 | 
			
		||||
.Ar target session .
 | 
			
		||||
Global session or window options are listed if
 | 
			
		||||
.Fl g
 | 
			
		||||
is used.
 | 
			
		||||
.It Xo Ic show-window-options
 | 
			
		||||
.Op Fl g
 | 
			
		||||
.Op Fl t Ar target-window
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								tmux.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								tmux.c
									
									
									
									
									
								
							@@ -36,12 +36,12 @@ extern char	*malloc_options;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
char		*cfg_file;
 | 
			
		||||
struct options	 global_options;	/* server options */
 | 
			
		||||
struct options	 global_s_options;	/* session options */
 | 
			
		||||
struct options	 global_w_options;	/* window options */
 | 
			
		||||
struct environ	 global_environ;
 | 
			
		||||
 | 
			
		||||
int		 debug_level;
 | 
			
		||||
int		 be_quiet;
 | 
			
		||||
time_t		 start_time;
 | 
			
		||||
char		*socket_path;
 | 
			
		||||
int		 login_shell;
 | 
			
		||||
@@ -222,14 +222,14 @@ main(int argc, char **argv)
 | 
			
		||||
	struct cmd		*cmd;
 | 
			
		||||
	enum msgtype		 msg;
 | 
			
		||||
	struct passwd		*pw;
 | 
			
		||||
	struct options		*so, *wo;
 | 
			
		||||
	struct options		*oo, *so, *wo;
 | 
			
		||||
	struct keylist		*keylist;
 | 
			
		||||
	struct msg_command_data	 cmddata;
 | 
			
		||||
	char			*s, *shellcmd, *path, *label, *home, *cause;
 | 
			
		||||
	char			 cwd[MAXPATHLEN], **var;
 | 
			
		||||
	void			*buf;
 | 
			
		||||
	size_t			 len;
 | 
			
		||||
	int	 		 opt, flags, cmdflags = 0;
 | 
			
		||||
	int	 		 opt, flags, quiet, cmdflags = 0;
 | 
			
		||||
	short		 	 events;
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
@@ -268,7 +268,7 @@ main(int argc, char **argv)
 | 
			
		||||
			label = xstrdup(optarg);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'q':
 | 
			
		||||
			be_quiet = 1;
 | 
			
		||||
			quiet = 1;
 | 
			
		||||
			break;
 | 
			
		||||
		case 'S':
 | 
			
		||||
			if (path != NULL)
 | 
			
		||||
@@ -314,6 +314,10 @@ main(int argc, char **argv)
 | 
			
		||||
	for (var = environ; *var != NULL; var++)
 | 
			
		||||
		environ_put(&global_environ, *var);
 | 
			
		||||
 | 
			
		||||
	options_init(&global_options, NULL);
 | 
			
		||||
	oo = &global_options;
 | 
			
		||||
	options_set_number(oo, "quiet", 0);
 | 
			
		||||
 | 
			
		||||
	options_init(&global_s_options, NULL);
 | 
			
		||||
	so = &global_s_options;
 | 
			
		||||
	options_set_number(so, "base-index", 0);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								tmux.h
									
									
									
									
									
								
							@@ -1235,6 +1235,7 @@ struct set_option_entry {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* tmux.c */
 | 
			
		||||
extern struct options global_options;
 | 
			
		||||
extern struct options global_s_options;
 | 
			
		||||
extern struct options global_w_options;
 | 
			
		||||
extern struct environ global_environ;
 | 
			
		||||
@@ -1391,6 +1392,7 @@ extern const char clock_table[14][5][5];
 | 
			
		||||
void		 clock_draw(struct screen_write_ctx *, int, int);
 | 
			
		||||
 | 
			
		||||
/* cmd-set-option.c */
 | 
			
		||||
extern const struct set_option_entry set_option_table[];
 | 
			
		||||
extern const struct set_option_entry set_session_option_table[];
 | 
			
		||||
extern const struct set_option_entry set_window_option_table[];
 | 
			
		||||
const char	*cmd_set_option_print(
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user