summaryrefslogtreecommitdiffstats
path: root/cmd-set-option.c
diff options
context:
space:
mode:
authornicm <nicm>2014-01-28 23:07:09 +0000
committernicm <nicm>2014-01-28 23:07:09 +0000
commit945339b443affdaaca260605e15b5a3b9a3c6e16 (patch)
treed04a4ccbdb9d83ded880cda1277911f6cf436197 /cmd-set-option.c
parentc930fd5ff696f5a60e93ed503f0ff57e0bbf6e4d (diff)
Allow replacing each of the many sets of separate foo-{fg,bg,attr}
options with a single foo-style option. For example: set -g status-fg yellow set -g status-bg red set -g status-attr blink Becomes: set -g status-style fg=yellow,bg=red,blink The -a flag to set can be used to add to rather than replace a style. So: set -g status-bg red Becomes: set -ag status-style bg=red Currently this is fully backwards compatible (all *-{fg,bg,attr} options remain) but the plan is to deprecate them over time. From Tiago Cunha.
Diffstat (limited to 'cmd-set-option.c')
-rw-r--r--cmd-set-option.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/cmd-set-option.c b/cmd-set-option.c
index 1b25fac0..b661913f 100644
--- a/cmd-set-option.c
+++ b/cmd-set-option.c
@@ -60,6 +60,9 @@ struct options_entry *cmd_set_option_flag(struct cmd *, struct cmd_q *,
struct options_entry *cmd_set_option_choice(struct cmd *, struct cmd_q *,
const struct options_table_entry *, struct options *,
const char *);
+struct options_entry *cmd_set_option_style(struct cmd *, struct cmd_q *,
+ const struct options_table_entry *, struct options *,
+ const char *);
const struct cmd_entry cmd_set_option_entry = {
"set-option", "set",
@@ -304,9 +307,11 @@ cmd_set_option_set(struct cmd *self, struct cmd_q *cmdq,
break;
case OPTIONS_TABLE_COLOUR:
o = cmd_set_option_colour(self, cmdq, oe, oo, value);
+ style_update_new(oo, o->name, oe->style);
break;
case OPTIONS_TABLE_ATTRIBUTES:
o = cmd_set_option_attributes(self, cmdq, oe, oo, value);
+ style_update_new(oo, o->name, oe->style);
break;
case OPTIONS_TABLE_FLAG:
o = cmd_set_option_flag(self, cmdq, oe, oo, value);
@@ -314,6 +319,9 @@ cmd_set_option_set(struct cmd *self, struct cmd_q *cmdq,
case OPTIONS_TABLE_CHOICE:
o = cmd_set_option_choice(self, cmdq, oe, oo, value);
break;
+ case OPTIONS_TABLE_STYLE:
+ o = cmd_set_option_style(self, cmdq, oe, oo, value);
+ break;
}
if (o == NULL)
return (-1);
@@ -462,3 +470,23 @@ cmd_set_option_choice(unused struct cmd *self, struct cmd_q *cmdq,
return (options_set_number(oo, oe->name, choice));
}
+
+/* Set a style option. */
+struct options_entry *
+cmd_set_option_style(struct cmd *self, struct cmd_q *cmdq,
+ const struct options_table_entry *oe, struct options *oo,
+ const char *value)
+{
+ struct args *args = self->args;
+ struct options_entry *o;
+ int append;
+
+ append = args_has(args, 'a');
+ if ((o = options_set_style(oo, oe->name, value, append)) == NULL) {
+ cmdq_error(cmdq, "bad style: %s", value);
+ return (NULL);
+ }
+
+ style_update_old(oo, oe->name, &o->style);
+ return (o);
+}