summaryrefslogtreecommitdiffstats
path: root/cmd-set-option.c
diff options
context:
space:
mode:
authornicm <nicm>2016-09-26 09:02:34 +0000
committernicm <nicm>2016-09-26 09:02:34 +0000
commit69e980602b31732348aaceee045a1901dc982d78 (patch)
tree65ed23e7becdf1845fccc2257506a40a3878994a /cmd-set-option.c
parenteb50e7a2c87ed8c18f2944e0082e961acb70765b (diff)
Support set -a (append) with user options, suggested by Xandor Schiefer.
Diffstat (limited to 'cmd-set-option.c')
-rw-r--r--cmd-set-option.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/cmd-set-option.c b/cmd-set-option.c
index 356668ee..491353a8 100644
--- a/cmd-set-option.c
+++ b/cmd-set-option.c
@@ -227,10 +227,11 @@ enum cmd_retval
cmd_set_option_user(struct cmd *self, struct cmd_q *cmdq, const char *optstr,
const char *valstr)
{
- struct args *args = self->args;
- struct session *s = cmdq->state.tflag.s;
- struct winlink *wl = cmdq->state.tflag.wl;
- struct options *oo;
+ struct args *args = self->args;
+ struct session *s = cmdq->state.tflag.s;
+ struct winlink *wl = cmdq->state.tflag.wl;
+ struct options *oo;
+ struct options_entry *o;
if (args_has(args, 's'))
oo = global_options;
@@ -262,18 +263,22 @@ cmd_set_option_user(struct cmd *self, struct cmd_q *cmdq, const char *optstr,
}
options_remove(oo, optstr);
} else {
- if (valstr == NULL) {
- cmdq_error(cmdq, "empty value");
- return (CMD_RETURN_ERROR);
- }
- if (args_has(args, 'o') && options_find1(oo, optstr) != NULL) {
+ o = options_find1(oo, optstr);
+ if (args_has(args, 'o') && o != NULL) {
if (!args_has(args, 'q')) {
cmdq_error(cmdq, "already set: %s", optstr);
return (CMD_RETURN_ERROR);
}
return (CMD_RETURN_NORMAL);
}
- options_set_string(oo, optstr, "%s", valstr);
+ if (valstr == NULL) {
+ cmdq_error(cmdq, "empty value");
+ return (CMD_RETURN_ERROR);
+ }
+ if (o != NULL && args_has(args, 'a'))
+ options_set_string(oo, optstr, "%s%s", o->str, valstr);
+ else
+ options_set_string(oo, optstr, "%s", valstr);
}
return (CMD_RETURN_NORMAL);
}