diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2008-12-08 16:19:51 +0000 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2008-12-08 16:19:51 +0000 |
commit | 7a82e86827e3d863a6dc4f1d50985f287d1ff86b (patch) | |
tree | 34bcc703d5d79065c5ef364be2a6ebfbc13cf6d0 /options-cmd.c | |
parent | f008d303e75c185eebcbb493b4e6d49bb400f694 (diff) | |
download | rtmux-7a82e86827e3d863a6dc4f1d50985f287d1ff86b.tar.gz rtmux-7a82e86827e3d863a6dc4f1d50985f287d1ff86b.tar.bz2 rtmux-7a82e86827e3d863a6dc4f1d50985f287d1ff86b.zip |
Make window options work the same was as session options, add mode-fg/mode-bg options, force -g for global on set/show/setw/showw/
Diffstat (limited to 'options-cmd.c')
-rw-r--r-- | options-cmd.c | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/options-cmd.c b/options-cmd.c new file mode 100644 index 00000000..6a2e9e58 --- /dev/null +++ b/options-cmd.c @@ -0,0 +1,152 @@ +/* $Id: options-cmd.c,v 1.1 2008-12-08 16:19:51 nicm Exp $ */ + +/* + * Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <sys/types.h> + +#include <stdlib.h> +#include <string.h> + +#include "tmux.h" + +void +set_option_string(struct cmd_ctx *ctx, struct options *oo, + const struct set_option_entry *entry, char *value) +{ + if (value == NULL) { + ctx->error(ctx, "empty value"); + return; + } + + options_set_string(oo, entry->name, "%s", value); +} + +void +set_option_number(struct cmd_ctx *ctx, struct options *oo, + const struct set_option_entry *entry, char *value) +{ + long long number; + const char *errstr; + + if (value == NULL) { + ctx->error(ctx, "empty value"); + return; + } + + number = strtonum(value, entry->minimum, entry->maximum, &errstr); + if (errstr != NULL) { + ctx->error(ctx, "value is %s: %s", errstr, value); + return; + } + options_set_number(oo, entry->name, number); +} + +void +set_option_key(struct cmd_ctx *ctx, struct options *oo, + const struct set_option_entry *entry, char *value) +{ + int key; + + if (value == NULL) { + ctx->error(ctx, "empty value"); + return; + } + + if ((key = key_string_lookup_string(value)) == KEYC_NONE) { + ctx->error(ctx, "unknown key: %s", value); + return; + } + options_set_number(oo, entry->name, key); + +} + +void +set_option_colour(struct cmd_ctx *ctx, struct options *oo, + const struct set_option_entry *entry, char *value) +{ + u_char colour; + + if (value == NULL) { + ctx->error(ctx, "empty value"); + return; + } + + if ((colour = colour_fromstring(value)) > 8) { + ctx->error(ctx, "bad colour: %s", value); + return; + } + + options_set_number(oo, entry->name, colour); +} + +void +set_option_flag(struct cmd_ctx *ctx, struct options *oo, + const struct set_option_entry *entry, char *value) +{ + int flag; + + if (value == NULL || *value == '\0') + flag = !options_get_number(oo, entry->name); + else { + if ((value[0] == '1' && value[1] == '\0') || + strcasecmp(value, "on") == 0 || + strcasecmp(value, "yes") == 0) + flag = 1; + else if ((value[0] == '0' && value[1] == '\0') || + strcasecmp(value, "off") == 0 || + strcasecmp(value, "no") == 0) + flag = 0; + else { + ctx->error(ctx, "bad value: %s", value); + return; + } + } + + options_set_number(oo, entry->name, flag); +} + +void +set_option_choice(struct cmd_ctx *ctx, struct options *oo, + const struct set_option_entry *entry, char *value) +{ + const char **choicep; + int n, choice = -1; + + if (value == NULL) { + ctx->error(ctx, "empty value"); + return; + } + + n = 0; + for (choicep = entry->choices; *choicep != NULL; choicep++) { + n++; + if (strncmp(*choicep, value, strlen(value)) != 0) + continue; + + if (choice != -1) { + ctx->error(ctx, "ambiguous option: %s", value); + return; + } + choice = n - 1; + } + if (choice == -1) { + ctx->error(ctx, "unknown option: %s", value); + return; + } + + options_set_number(oo, entry->name, choice); +} |