summaryrefslogtreecommitdiffstats
path: root/arguments.c
diff options
context:
space:
mode:
authornicm <nicm>2019-07-09 14:03:12 +0000
committernicm <nicm>2019-07-09 14:03:12 +0000
commitfc2016dbb665f01e795a89632a1bb74294bfc4e1 (patch)
tree452c47afaec3fde07753bc65df05c35da9a23aae /arguments.c
parentad11d49d640c911b42c5292b5f5b7dbdffb4908b (diff)
Add a -H flag to send-keys to send literal keys given as hex numbers
(needed for control clients to send mouse sequences). Also add some format flags for UTF-8 and SGR mouse mode. Requested by Bradley Smith in GitHub issues 1832 and 1833.
Diffstat (limited to 'arguments.c')
-rw-r--r--arguments.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/arguments.c b/arguments.c
index 751d0607..acdaf8aa 100644
--- a/arguments.c
+++ b/arguments.c
@@ -38,6 +38,7 @@ TAILQ_HEAD(args_values, args_value);
struct args_entry {
u_char flag;
struct args_values values;
+ u_int count;
RB_ENTRY(args_entry) entry;
};
@@ -174,6 +175,7 @@ args_print(struct args *args)
size_t len;
char *buf;
int i;
+ u_int j;
struct args_entry *entry;
struct args_value *value;
@@ -187,7 +189,8 @@ args_print(struct args *args)
if (*buf == '\0')
args_print_add(&buf, &len, "-");
- args_print_add(&buf, &len, "%c", entry->flag);
+ for (j = 0; j < entry->count; j++)
+ args_print_add(&buf, &len, "%c", entry->flag);
}
/* Then the flags with arguments. */
@@ -244,7 +247,12 @@ args_escape(const char *s)
int
args_has(struct args *args, u_char ch)
{
- return (args_find(args, ch) != NULL);
+ struct args_entry *entry;
+
+ entry = args_find(args, ch);
+ if (entry == NULL)
+ return (0);
+ return (entry->count);
}
/* Set argument value in the arguments tree. */
@@ -258,9 +266,11 @@ args_set(struct args *args, u_char ch, const char *s)
if (entry == NULL) {
entry = xcalloc(1, sizeof *entry);
entry->flag = ch;
+ entry->count = 1;
TAILQ_INIT(&entry->values);
RB_INSERT(args_tree, &args->tree, entry);
- }
+ } else
+ entry->count++;
if (s != NULL) {
value = xcalloc(1, sizeof *value);