aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--alerts.c12
-rw-r--r--cmd-if-shell.c1
-rw-r--r--cmd-new-window.c2
-rw-r--r--cmd-set-option.c14
-rw-r--r--cmd-show-options.c45
-rw-r--r--options-table.c181
-rw-r--r--server-client.c12
-rw-r--r--status.c14
-rw-r--r--tmux.c6
-rw-r--r--tmux.h38
-rw-r--r--utf8.c1
11 files changed, 211 insertions, 115 deletions
diff --git a/alerts.c b/alerts.c
index e08b183d..55e7044d 100644
--- a/alerts.c
+++ b/alerts.c
@@ -77,8 +77,8 @@ alerts_callback(__unused int fd, __unused short events, __unused void *arg)
int
alerts_enabled(struct window *w, int flags)
{
- struct session *s;
-
+ if (flags & WINDOW_BELL)
+ return (1);
if (flags & WINDOW_ACTIVITY) {
if (options_get_number(w->options, "monitor-activity"))
return (1);
@@ -87,14 +87,6 @@ alerts_enabled(struct window *w, int flags)
if (options_get_number(w->options, "monitor-silence") != 0)
return (1);
}
- if (~flags & WINDOW_BELL)
- return (0);
- RB_FOREACH(s, sessions, &sessions) {
- if (!session_has(s, w))
- continue;
- if (options_get_number(s->options, "bell-action") != BELL_NONE)
- return (1);
- }
return (0);
}
diff --git a/cmd-if-shell.c b/cmd-if-shell.c
index a9c84261..47f259e7 100644
--- a/cmd-if-shell.c
+++ b/cmd-if-shell.c
@@ -97,6 +97,7 @@ cmd_if_shell_exec(struct cmd *self, struct cmd_q *cmdq)
cmd = args->argv[1];
else if (args->argc == 3)
cmd = args->argv[2];
+ free(shellcmd);
if (cmd == NULL)
return (CMD_RETURN_NORMAL);
if (cmd_string_parse(cmd, &cmdlist, NULL, 0, &cause) != 0) {
diff --git a/cmd-new-window.c b/cmd-new-window.c
index fb89e24f..24204746 100644
--- a/cmd-new-window.c
+++ b/cmd-new-window.c
@@ -97,7 +97,7 @@ cmd_new_window_exec(struct cmd *self, struct cmd_q *cmdq)
ft = format_create();
format_defaults(ft, cmd_find_client(cmdq, NULL, 1), s, NULL,
NULL);
- cwd = format_expand(ft, args_get(args, 'c'));
+ cwd = to_free = format_expand(ft, args_get(args, 'c'));
format_free(ft);
} else if (cmdq->client != NULL && cmdq->client->session == NULL)
cwd = cmdq->client->cwd;
diff --git a/cmd-set-option.c b/cmd-set-option.c
index 894f0c43..7de91aa2 100644
--- a/cmd-set-option.c
+++ b/cmd-set-option.c
@@ -84,7 +84,7 @@ enum cmd_retval
cmd_set_option_exec(struct cmd *self, struct cmd_q *cmdq)
{
struct args *args = self->args;
- const struct options_table_entry *table, *oe;
+ const struct options_table_entry *oe;
struct session *s;
struct winlink *wl;
struct client *c;
@@ -108,8 +108,8 @@ cmd_set_option_exec(struct cmd *self, struct cmd_q *cmdq)
return (cmd_set_option_user(self, cmdq, optstr, valstr));
/* Find the option entry, try each table. */
- table = oe = NULL;
- if (options_table_find(optstr, &table, &oe) != 0) {
+ oe = NULL;
+ if (options_table_find(optstr, &oe) != 0) {
if (!args_has(args, 'q')) {
cmdq_error(cmdq, "ambiguous option: %s", optstr);
return (CMD_RETURN_ERROR);
@@ -124,10 +124,10 @@ cmd_set_option_exec(struct cmd *self, struct cmd_q *cmdq)
return (CMD_RETURN_NORMAL);
}
- /* Work out the tree from the table. */
- if (table == server_options_table)
+ /* Work out the tree from the scope of the option. */
+ if (oe->scope == OPTIONS_TABLE_SERVER)
oo = global_options;
- else if (table == window_options_table) {
+ else if (oe->scope == OPTIONS_TABLE_WINDOW) {
if (args_has(self->args, 'g'))
oo = global_w_options;
else {
@@ -141,7 +141,7 @@ cmd_set_option_exec(struct cmd *self, struct cmd_q *cmdq)
}
oo = wl->window->options;
}
- } else if (table == session_options_table) {
+ } else if (oe->scope == OPTIONS_TABLE_SESSION) {
if (args_has(self->args, 'g'))
oo = global_s_options;
else {
diff --git a/cmd-show-options.c b/cmd-show-options.c
index e99d665f..fd96a0e2 100644
--- a/cmd-show-options.c
+++ b/cmd-show-options.c
@@ -32,7 +32,7 @@ enum cmd_retval cmd_show_options_exec(struct cmd *, struct cmd_q *);
enum cmd_retval cmd_show_options_one(struct cmd *, struct cmd_q *,
struct options *, int);
enum cmd_retval cmd_show_options_all(struct cmd *, struct cmd_q *,
- const struct options_table_entry *, struct options *);
+ struct options *, enum options_table_scope);
const struct cmd_entry cmd_show_options_entry = {
"show-options", "show",
@@ -53,19 +53,19 @@ 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;
- struct winlink *wl;
- const struct options_table_entry *table;
- struct options *oo;
- int quiet;
+ struct args *args = self->args;
+ struct session *s;
+ struct winlink *wl;
+ struct options *oo;
+ int quiet;
+ enum options_table_scope scope;
if (args_has(self->args, 's')) {
oo = global_options;
- table = server_options_table;
+ scope = OPTIONS_TABLE_SERVER;
} else if (args_has(self->args, 'w') ||
self->entry == &cmd_show_window_options_entry) {
- table = window_options_table;
+ scope = OPTIONS_TABLE_WINDOW;
if (args_has(self->args, 'g'))
oo = global_w_options;
else {
@@ -75,7 +75,7 @@ cmd_show_options_exec(struct cmd *self, struct cmd_q *cmdq)
oo = wl->window->options;
}
} else {
- table = session_options_table;
+ scope = OPTIONS_TABLE_SESSION;
if (args_has(self->args, 'g'))
oo = global_s_options;
else {
@@ -88,7 +88,7 @@ cmd_show_options_exec(struct cmd *self, struct cmd_q *cmdq)
quiet = args_has(self->args, 'q');
if (args->argc == 0)
- return (cmd_show_options_all(self, cmdq, table, oo));
+ return (cmd_show_options_all(self, cmdq, oo, scope));
else
return (cmd_show_options_one(self, cmdq, oo, quiet));
}
@@ -99,7 +99,7 @@ cmd_show_options_one(struct cmd *self, struct cmd_q *cmdq,
{
struct args *args = self->args;
const char *name = args->argv[0];
- const struct options_table_entry *table, *oe;
+ const struct options_table_entry *oe;
struct options_entry *o;
const char *optval;
@@ -118,14 +118,14 @@ retry:
return (CMD_RETURN_NORMAL);
}
- table = oe = NULL;
- if (options_table_find(name, &table, &oe) != 0) {
+ oe = NULL;
+ if (options_table_find(name, &oe) != 0) {
cmdq_error(cmdq, "ambiguous option: %s", name);
return (CMD_RETURN_ERROR);
}
if (oe == NULL) {
if (quiet)
- return (CMD_RETURN_NORMAL);
+ return (CMD_RETURN_NORMAL);
cmdq_error(cmdq, "unknown option: %s", name);
return (CMD_RETURN_ERROR);
}
@@ -144,12 +144,13 @@ retry:
}
enum cmd_retval
-cmd_show_options_all(struct cmd *self, struct cmd_q *cmdq,
- const struct options_table_entry *table, struct options *oo)
+cmd_show_options_all(struct cmd *self, struct cmd_q *cmdq, struct options *oo,
+ enum options_table_scope scope)
{
const struct options_table_entry *oe;
struct options_entry *o;
const char *optval;
+ int vflag;
o = options_first(oo);
while (o != NULL) {
@@ -162,14 +163,14 @@ cmd_show_options_all(struct cmd *self, struct cmd_q *cmdq,
o = options_next(o);
}
- for (oe = table; oe->name != NULL; oe++) {
- if (oe->style != NULL)
+ vflag = args_has(self->args, 'v');
+ for (oe = options_table; oe->name != NULL; oe++) {
+ if (oe->style != NULL || oe->scope != scope)
continue;
if ((o = options_find1(oo, oe->name)) == NULL)
continue;
- optval = options_table_print_entry(oe, o,
- args_has(self->args, 'v'));
- if (args_has(self->args, 'v'))
+ optval = options_table_print_entry(oe, o, vflag);
+ if (vflag)
cmdq_print(cmdq, "%s", optval);
else
cmdq_print(cmdq, "%s %s", oe->name, optval);
diff --git a/options-table.c b/options-table.c
index d4a05aed..bd49a9c8 100644
--- a/options-table.c
+++ b/options-table.c
@@ -52,9 +52,10 @@ const char *options_table_bell_action_list[] = {
};
/* Server options. */
-const struct options_table_entry server_options_table[] = {
+const struct options_table_entry options_table[] = {
{ .name = "buffer-limit",
.type = OPTIONS_TABLE_NUMBER,
+ .scope = OPTIONS_TABLE_SERVER,
.minimum = 1,
.maximum = INT_MAX,
.default_num = 20
@@ -62,11 +63,13 @@ const struct options_table_entry server_options_table[] = {
{ .name = "default-terminal",
.type = OPTIONS_TABLE_STRING,
+ .scope = OPTIONS_TABLE_SERVER,
.default_str = "screen"
},
{ .name = "escape-time",
.type = OPTIONS_TABLE_NUMBER,
+ .scope = OPTIONS_TABLE_SERVER,
.minimum = 0,
.maximum = INT_MAX,
.default_num = 500
@@ -74,21 +77,25 @@ const struct options_table_entry server_options_table[] = {
{ .name = "exit-unattached",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_SERVER,
.default_num = 0
},
{ .name = "focus-events",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_SERVER,
.default_num = 0
},
{ .name = "history-file",
.type = OPTIONS_TABLE_STRING,
+ .scope = OPTIONS_TABLE_SERVER,
.default_str = ""
},
{ .name = "message-limit",
.type = OPTIONS_TABLE_NUMBER,
+ .scope = OPTIONS_TABLE_SERVER,
.minimum = 0,
.maximum = INT_MAX,
.default_num = 100
@@ -96,28 +103,27 @@ const struct options_table_entry server_options_table[] = {
{ .name = "quiet",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_SERVER,
.default_num = 0
},
{ .name = "set-clipboard",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_SERVER,
.default_num = 1
},
{ .name = "terminal-overrides",
.type = OPTIONS_TABLE_STRING,
+ .scope = OPTIONS_TABLE_SERVER,
.default_str = "xterm*:XT:Ms=\\E]52;%p1%s;%p2%s\\007"
":Cs=\\E]12;%p1%s\\007:Cr=\\E]112\\007"
":Ss=\\E[%p1%d q:Se=\\E[2 q,screen*:XT"
},
- { .name = NULL }
-};
-
-/* Session options. */
-const struct options_table_entry session_options_table[] = {
{ .name = "assume-paste-time",
.type = OPTIONS_TABLE_NUMBER,
+ .scope = OPTIONS_TABLE_SESSION,
.minimum = 0,
.maximum = INT_MAX,
.default_num = 1,
@@ -125,6 +131,7 @@ const struct options_table_entry session_options_table[] = {
{ .name = "base-index",
.type = OPTIONS_TABLE_NUMBER,
+ .scope = OPTIONS_TABLE_SESSION,
.minimum = 0,
.maximum = INT_MAX,
.default_num = 0
@@ -132,47 +139,56 @@ const struct options_table_entry session_options_table[] = {
{ .name = "bell-action",
.type = OPTIONS_TABLE_CHOICE,
+ .scope = OPTIONS_TABLE_SESSION,
.choices = options_table_bell_action_list,
.default_num = BELL_ANY
},
{ .name = "bell-on-alert",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 0
},
{ .name = "default-command",
.type = OPTIONS_TABLE_STRING,
+ .scope = OPTIONS_TABLE_SESSION,
.default_str = ""
},
{ .name = "default-shell",
.type = OPTIONS_TABLE_STRING,
+ .scope = OPTIONS_TABLE_SESSION,
.default_str = _PATH_BSHELL
},
{ .name = "destroy-unattached",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 0
},
{ .name = "detach-on-destroy",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 1
},
{ .name = "display-panes-active-colour",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 1
},
{ .name = "display-panes-colour",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 4
},
{ .name = "display-panes-time",
.type = OPTIONS_TABLE_NUMBER,
+ .scope = OPTIONS_TABLE_SESSION,
.minimum = 1,
.maximum = INT_MAX,
.default_num = 1000
@@ -180,6 +196,7 @@ const struct options_table_entry session_options_table[] = {
{ .name = "display-time",
.type = OPTIONS_TABLE_NUMBER,
+ .scope = OPTIONS_TABLE_SESSION,
.minimum = 1,
.maximum = INT_MAX,
.default_num = 750
@@ -187,6 +204,7 @@ const struct options_table_entry session_options_table[] = {
{ .name = "history-limit",
.type = OPTIONS_TABLE_NUMBER,
+ .scope = OPTIONS_TABLE_SESSION,
.minimum = 0,
.maximum = INT_MAX,
.default_num = 2000
@@ -194,6 +212,7 @@ const struct options_table_entry session_options_table[] = {
{ .name = "lock-after-time",
.type = OPTIONS_TABLE_NUMBER,
+ .scope = OPTIONS_TABLE_SESSION,
.minimum = 0,
.maximum = INT_MAX,
.default_num = 0
@@ -201,77 +220,91 @@ const struct options_table_entry session_options_table[] = {
{ .name = "lock-command",
.type = OPTIONS_TABLE_STRING,
+ .scope = OPTIONS_TABLE_SESSION,
.default_str = "lock -np"
},
{ .name = "message-attr",
.type = OPTIONS_TABLE_ATTRIBUTES,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 0,
.style = "message-style"
},
{ .name = "message-bg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 3,
.style = "message-style"
},
{ .name = "message-command-attr",
.type = OPTIONS_TABLE_ATTRIBUTES,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 0,
.style = "message-command-style"
},
{ .name = "message-command-bg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 0,
.style = "message-command-style"
},
{ .name = "message-command-fg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 3,
.style = "message-command-style"
},
{ .name = "message-command-style",
.type = OPTIONS_TABLE_STYLE,
+ .scope = OPTIONS_TABLE_SESSION,
.default_str = "bg=black,fg=yellow"
},
{ .name = "message-fg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 0,
.style = "message-style"
},
{ .name = "message-style",
.type = OPTIONS_TABLE_STYLE,
+ .scope = OPTIONS_TABLE_SESSION,
.default_str = "bg=yellow,fg=black"
},
{ .name = "mouse",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 0
},
{ .name = "prefix",
.type = OPTIONS_TABLE_KEY,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = '\002',
},
{ .name = "prefix2",
.type = OPTIONS_TABLE_KEY,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = KEYC_NONE,
},
{ .name = "renumber-windows",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 0
},
{ .name = "repeat-time",
.type = OPTIONS_TABLE_NUMBER,
+ .scope = OPTIONS_TABLE_SESSION,
.minimum = 0,
.maximum = SHRT_MAX,
.default_num = 500
@@ -279,44 +312,52 @@ const struct options_table_entry session_options_table[] = {
{ .name = "set-remain-on-exit",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 0
},
{ .name = "set-titles",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 0
},
{ .name = "set-titles-string",
.type = OPTIONS_TABLE_STRING,
+ .scope = OPTIONS_TABLE_SESSION,
.default_str = "#S:#I:#W - \"#T\" #{session_alerts}"
},
{ .name = "status",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 1
},
{ .name = "status-attr",
.type = OPTIONS_TABLE_ATTRIBUTES,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 0,
.style = "status-style"
},
{ .name = "status-bg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 2,
.style = "status-style"
},
{ .name = "status-fg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 0,
.style = "status-style"
},
{ .name = "status-interval",
.type = OPTIONS_TABLE_NUMBER,
+ .scope = OPTIONS_TABLE_SESSION,
.minimum = 0,
.maximum = INT_MAX,
.default_num = 15
@@ -324,41 +365,48 @@ const struct options_table_entry session_options_table[] = {
{ .name = "status-justify",
.type = OPTIONS_TABLE_CHOICE,
+ .scope = OPTIONS_TABLE_SESSION,
.choices = options_table_status_justify_list,
.default_num = 0
},
{ .name = "status-keys",
.type = OPTIONS_TABLE_CHOICE,
+ .scope = OPTIONS_TABLE_SESSION,
.choices = options_table_status_keys_list,
.default_num = MODEKEY_EMACS
},
{ .name = "status-left",
.type = OPTIONS_TABLE_STRING,
+ .scope = OPTIONS_TABLE_SESSION,
.default_str = "[#S] "
},
{ .name = "status-left-attr",
.type = OPTIONS_TABLE_ATTRIBUTES,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 0,
.style = "status-left-style"
},
{ .name = "status-left-bg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 8,
.style = "status-left-style"
},
{ .name = "status-left-fg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 8,
.style = "status-left-style"
},
{ .name = "status-left-length",
.type = OPTIONS_TABLE_NUMBER,
+ .scope = OPTIONS_TABLE_SESSION,
.minimum = 0,
.maximum = SHRT_MAX,
.default_num = 10
@@ -366,40 +414,47 @@ const struct options_table_entry session_options_table[] = {
{ .name = "status-left-style",
.type = OPTIONS_TABLE_STYLE,
+ .scope = OPTIONS_TABLE_SESSION,
.default_str = "default"
},
{ .name = "status-position",
.type = OPTIONS_TABLE_CHOICE,
+ .scope = OPTIONS_TABLE_SESSION,
.choices = options_table_status_position_list,
.default_num = 1
},
{ .name = "status-right",
.type = OPTIONS_TABLE_STRING,
+ .scope = OPTIONS_TABLE_SESSION,
.default_str = " \"#{=21:pane_title}\" %H:%M %d-%b-%y"
},
{ .name = "status-right-attr",
.type = OPTIONS_TABLE_ATTRIBUTES,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 0,
.style = "status-right-style"
},
{ .name = "status-right-bg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 8,
.style = "status-right-style"
},
{ .name = "status-right-fg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 8,
.style = "status-right-style"
},
{ .name = "status-right-length",
.type = OPTIONS_TABLE_NUMBER,
+ .scope = OPTIONS_TABLE_SESSION,
.minimum = 0,
.maximum = SHRT_MAX,
.default_num = 40
@@ -407,16 +462,19 @@ const struct options_table_entry session_options_table[] = {
{ .name = "status-right-style",
.type = OPTIONS_TABLE_STYLE,
+ .scope = OPTIONS_TABLE_SESSION,
.default_str = "default"
},
{ .name = "status-style",
.type = OPTIONS_TABLE_STYLE,
+ .scope = OPTIONS_TABLE_SESSION,
.default_str = "bg=green,fg=black"
},
{ .name = "update-environment",
.type = OPTIONS_TABLE_STRING,
+ .scope = OPTIONS_TABLE_SESSION,
.default_str = "DISPLAY SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID "
"SSH_CONNECTION WINDOWID XAUTHORITY"
@@ -424,68 +482,75 @@ const struct options_table_entry session_options_table[] = {
{ .name = "visual-activity",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 0
},
{ .name = "visual-bell",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 0
},
{ .name = "visual-silence",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_SESSION,
.default_num = 0
},
{ .name = "word-separators",
.type = OPTIONS_TABLE_STRING,
+ .scope = OPTIONS_TABLE_SESSION,
.default_str = " -_@"
},
- { .name = NULL }
-};
-
-/* Window options. */
-const struct options_table_entry window_options_table[] = {
{ .name = "aggressive-resize",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 0
},
{ .name = "allow-rename",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 1
},
{ .name = "alternate-screen",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 1
},
{ .name = "automatic-rename",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 1
},
{ .name = "automatic-rename-format",
.type = OPTIONS_TABLE_STRING,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_str = "#{?pane_in_mode,[tmux],#{pane_current_command}}"
"#{?pane_dead,[dead],}"
},
{ .name = "clock-mode-colour",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 4
},
{ .name = "clock-mode-style",
.type = OPTIONS_TABLE_CHOICE,
+ .scope = OPTIONS_TABLE_WINDOW,
.choices = options_table_clock_mode_style_list,
.default_num = 1
},
{ .name = "force-height",
.type = OPTIONS_TABLE_NUMBER,
+ .scope = OPTIONS_TABLE_WINDOW,
.minimum = 0,
.maximum = INT_MAX,
.default_num = 0
@@ -493,6 +558,7 @@ const struct options_table_entry window_options_table[] = {
{ .name = "force-width",
.type = OPTIONS_TABLE_NUMBER,
+ .scope = OPTIONS_TABLE_WINDOW,
.minimum = 0,
.maximum = INT_MAX,
.default_num = 0
@@ -500,6 +566,7 @@ const struct options_table_entry window_options_table[] = {
{ .name = "main-pane-height",
.type = OPTIONS_TABLE_NUMBER,
+ .scope = OPTIONS_TABLE_WINDOW,
.minimum = 1,
.maximum = INT_MAX,
.default_num = 24
@@ -507,6 +574,7 @@ const struct options_table_entry window_options_table[] = {
{ .name = "main-pane-width",
.type = OPTIONS_TABLE_NUMBER,
+ .scope = OPTIONS_TABLE_WINDOW,
.minimum = 1,
.maximum = INT_MAX,
.default_num = 80
@@ -514,40 +582,47 @@ const struct options_table_entry window_options_table[] = {
{ .name = "mode-attr",
.type = OPTIONS_TABLE_ATTRIBUTES,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 0,
.style = "mode-style"
},
{ .name = "mode-bg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 3,
.style = "mode-style"
},
{ .name = "mode-fg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 0,
.style = "mode-style"
},
{ .name = "mode-keys",
.type = OPTIONS_TABLE_CHOICE,
+ .scope = OPTIONS_TABLE_WINDOW,
.choices = options_table_mode_keys_list,
.default_num = MODEKEY_EMACS
},
{ .name = "mode-style",
.type = OPTIONS_TABLE_STYLE,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_str = "bg=yellow,fg=black"
},
{ .name = "monitor-activity",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 0
},
{ .name = "monitor-silence",
.type = OPTIONS_TABLE_NUMBER,
+ .scope = OPTIONS_TABLE_WINDOW,
.minimum = 0,
.maximum = INT_MAX,
.default_num = 0
@@ -555,6 +630,7 @@ const struct options_table_entry window_options_table[] = {
{ .name = "other-pane-height",
.type = OPTIONS_TABLE_NUMBER,
+ .scope = OPTIONS_TABLE_WINDOW,
.minimum = 0,
.maximum = INT_MAX,
.default_num = 0
@@ -562,6 +638,7 @@ const struct options_table_entry window_options_table[] = {
{ .name = "other-pane-width",
.type = OPTIONS_TABLE_NUMBER,
+ .scope = OPTIONS_TABLE_WINDOW,
.minimum = 0,
.maximum = INT_MAX,
.default_num = 0
@@ -569,23 +646,27 @@ const struct options_table_entry window_options_table[] = {
{ .name = "pane-active-border-bg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 8,
.style = "pane-active-border-style"
},
{ .name = "pane-active-border-fg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 2,
.style = "pane-active-border-style"
},
{ .name = "pane-active-border-style",
.type = OPTIONS_TABLE_STYLE,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_str = "fg=green"
},
{ .name = "pane-base-index",
.type = OPTIONS_TABLE_NUMBER,
+ .scope = OPTIONS_TABLE_WINDOW,
.minimum = 0,
.maximum = USHRT_MAX,
.default_num = 0
@@ -593,178 +674,210 @@ const struct options_table_entry window_options_table[] = {
{ .name = "pane-border-bg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 8,
.style = "pane-border-style"
},
{ .name = "pane-border-fg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 8,
.style = "pane-border-style"
},
{ .name = "pane-border-style",
.type = OPTIONS_TABLE_STYLE,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_str = "default"
},
{ .name = "remain-on-exit",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 0
},
{ .name = "synchronize-panes",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 0
},
{ .name = "window-active-style",
.type = OPTIONS_TABLE_STYLE,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_str = "default"
},
{ .name = "window-style",
.type = OPTIONS_TABLE_STYLE,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_str = "default"
},
{ .name = "window-status-activity-attr",
.type = OPTIONS_TABLE_ATTRIBUTES,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = GRID_ATTR_REVERSE,
.style = "window-status-activity-style"
},
{ .name = "window-status-activity-bg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 8,
.style = "window-status-activity-style"
},
{ .name = "window-status-activity-fg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 8,
.style = "window-status-activity-style"
},
{ .name = "window-status-activity-style",
.type = OPTIONS_TABLE_STYLE,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_str = "reverse"
},
{ .name = "window-status-attr",
.type = OPTIONS_TABLE_ATTRIBUTES,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 0,
.style = "window-status-style"
},
{ .name = "window-status-bell-attr",
.type = OPTIONS_TABLE_ATTRIBUTES,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = GRID_ATTR_REVERSE,
.style = "window-status-bell-style"
},
{ .name = "window-status-bell-bg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 8,
.style = "window-status-bell-style"
},
{ .name = "window-status-bell-fg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 8,
.style = "window-status-bell-style"
},
{ .name = "window-status-bell-style",
.type = OPTIONS_TABLE_STYLE,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_str = "reverse"
},
{ .name = "window-status-bg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 8,
.style = "window-status-style"
},
{ .name = "window-status-current-attr",
.type = OPTIONS_TABLE_ATTRIBUTES,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 0,
.style = "window-status-current-style"
},
{ .name = "window-status-current-bg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 8,
.style = "window-status-current-style"
},
{ .name = "window-status-current-fg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 8,
.style = "window-status-current-style"
},
{ .name = "window-status-current-format",
.type = OPTIONS_TABLE_STRING,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_str = "#I:#W#{?window_flags,#{window_flags}, }"
},
{ .name = "window-status-current-style",
.type = OPTIONS_TABLE_STYLE,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_str = "default"
},
{ .name = "window-status-fg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 8,
.style = "window-status-style"
},
{ .name = "window-status-format",
.type = OPTIONS_TABLE_STRING,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_str = "#I:#W#{?window_flags,#{window_flags}, }"
},
{ .name = "window-status-last-attr",
.type = OPTIONS_TABLE_ATTRIBUTES,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 0,
.style = "window-status-last-style"
},
{ .name = "window-status-last-bg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 8,
.style = "window-status-last-style"
},
{ .name = "window-status-last-fg",
.type = OPTIONS_TABLE_COLOUR,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 8,
.style = "window-status-last-style"
},
{ .name = "window-status-last-style",
.type = OPTIONS_TABLE_STYLE,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_str = "default"
},
{ .name = "window-status-separator",
.type = OPTIONS_TABLE_STRING,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_str = " "
},
{ .name = "window-status-style",
.type = OPTIONS_TABLE_STYLE,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_str = "default"
},
{ .name = "wrap-search",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 1
},
{ .name = "xterm-keys",
.type = OPTIONS_TABLE_FLAG,
+ .scope = OPTIONS_TABLE_WINDOW,
.default_num = 0
},
@@ -773,12 +886,13 @@ const struct options_table_entry window_options_table[] = {
/* Populate an options tree from a table. */
void
-options_table_populate_tree(
- const struct options_table_entry *table, struct options *oo)
+options_table_populate_tree(enum options_table_scope scope, struct options *oo)
{
const struct options_table_entry *oe;
- for (oe = table; oe->name != NULL; oe++) {
+ for (oe = options_table; oe->name != NULL; oe++) {
+ if (oe->scope != scope)
+ continue;
switch (oe->type) {
case OPTIONS_TABLE_STRING:
options_set_string(oo, oe->name, "%s", oe->default_str);
@@ -844,33 +958,22 @@ options_table_print_entry(const struct options_table_entry *oe,
/* Find an option. */
int
-options_table_find(
- const char *optstr, const struct options_table_entry **table,
- const struct options_table_entry **oe)
+options_table_find(const char *optstr, 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;
- }
+
+ for (oe_loop = options_table; 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;
+
+ /* Bail now if an exact match. */
+ if (strcmp(oe_loop->name, optstr) == 0)
+ break;
}
return (0);
}
diff --git a/server-client.c b/server-client.c
index cf7e2582..c77127df 100644
--- a/server-client.c
+++ b/server-client.c
@@ -492,8 +492,16 @@ server_client_assume_paste(struct session *s)
return (0);
timersub(&s->activity_time, &s->last_activi