Update of /cvsroot/tmux/tmux
In directory vz-cvs-2.sog:/tmp/cvs-serv20216
Modified Files:
cmd-set-option.c
Log Message:
|PatchSet 879
|Date: 2011/03/29 22:09:13
|Author: nicm
|Branch: HEAD
|Tag: (none)
|Log:
|For convenience, work out what type of option is being set by name
|regardless of the -s or -w flags (these remain documented however).
Index: cmd-set-option.c
===================================================================
RCS file: /cvsroot/tmux/tmux/cmd-set-option.c,v
retrieving revision 1.110
retrieving revision 1.111
diff -u -d -r1.110 -r1.111
--- cmd-set-option.c 6 Apr 2011 22:22:25 -0000 1.110
+++ cmd-set-option.c 6 Apr 2011 22:22:49 -0000 1.111
@@ -29,6 +29,9 @@
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 *);
@@ -78,11 +81,44 @@
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)
{
struct args *args = self->args;
- const struct options_table_entry *table, *oe, *oe_loop;
+ const struct options_table_entry *table, *oe;
struct session *s;
struct winlink *wl;
struct client *c;
@@ -90,13 +126,32 @@
const char *optstr, *valstr;
u_int i;
- /* Work out the options tree and table to use. */
- if (args_has(self->args, 's')) {
+ /* Get the option name and value. */
+ optstr = args->argv[0];
+ if (*optstr == '\0') {
+ ctx->error(ctx, "invalid option");
+ return (-1);
+ }
+ if (args->argc < 2)
+ valstr = NULL;
+ else
+ valstr = args->argv[1];
+
+ /* Find the option entry, try each table. */
+ table = oe = NULL;
+ if (cmd_set_option_find(optstr, &table, &oe) != 0) {
+ ctx->error(ctx, "ambiguous option: %s", optstr);
+ return (-1);
+ }
+ if (oe == NULL) {
+ ctx->error(ctx, "unknown option: %s", optstr);
+ return (-1);
+ }
+
+ /* Work out the tree from the table. */
+ if (table == server_options_table)
oo = &global_options;
- table = server_options_table;
- } else if (args_has(self->args, 'w') ||
- self->entry == &cmd_set_window_option_entry) {
- table = window_options_table;
+ else if (table == window_options_table) {
if (args_has(self->args, 'g'))
oo = &global_w_options;
else {
@@ -105,8 +160,7 @@
return (-1);
oo = &wl->window->options;
}
- } else {
- table = session_options_table;
+ } else if (table == session_options_table) {
if (args_has(self->args, 'g'))
oo = &global_s_options;
else {
@@ -115,37 +169,8 @@
return (-1);
oo = &s->options;
}
- }
-
- /* Get the option name and value. */
- optstr = args->argv[0];
- if (*optstr == '\0') {
- ctx->error(ctx, "invalid option");
- return (-1);
- }
- if (args->argc < 2)
- valstr = NULL;
- else
- valstr = args->argv[1];
-
- /* Find the option table entry. */
- oe = NULL;
- for (oe_loop = table; oe_loop->name != NULL; oe_loop++) {
- if (strncmp(oe_loop->name, optstr, strlen(optstr)) != 0)
- continue;
-
- if (oe != NULL) {
- ctx->error(ctx, "ambiguous option: %s", optstr);
- return (-1);
- }
- oe = oe_loop;
-
- /* Bail now if an exact match. */
- if (strcmp(oe->name, optstr) == 0)
- break;
- }
- if (oe == NULL) {
- ctx->error(ctx, "unknown option: %s", optstr);
+ } else {
+ ctx->error(ctx, "unknown table");
return (-1);
}
------------------------------------------------------------------------------
Xperia(TM) PLAY
It's a major breakthrough. An authentic gaming
smartphone on the nation's most reliable network.
And it wants your games.
http://p.sf.net/sfu/verizon-sfdev
_______________________________________________
tmux-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tmux-cvs