mirror of
https://github.com/tmate-io/tmate.git
synced 2024-11-23 08:33:17 +01: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:
parent
6311bd119e
commit
a4c9a80dac
@ -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(
|
||||
|
Loading…
Reference in New Issue
Block a user