From d74e583089967b86d966334010105e73b3a30f58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Mon, 10 Aug 2020 19:39:37 +0200 Subject: [PATCH] config: mouse bindings: add support for click count Specified by appending "-X", where X is a number. --- config.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/config.c b/config.c index 044087d9..8e51b608 100644 --- a/config.c +++ b/config.c @@ -1007,17 +1007,41 @@ parse_mouse_combos(struct config *conf, const char *combos, key_combo_list_t *ke combo = strtok_r(NULL, " ", &tok_ctx)) { struct config_key_modifiers modifiers = {}; - const char *key = strrchr(combo, '+'); + char *key = strrchr(combo, '+'); if (key == NULL) { /* No modifiers */ key = combo; } else { + *key = '\0'; if (!parse_modifiers(conf, combo, key - combo, &modifiers, path, lineno)) goto err; key++; /* Skip past the '+' */ } + size_t count = 0; + { + char *_count = strrchr(key, '-'); + if (_count != NULL) { + *_count = '\0'; + _count++; + + errno = 0; + char *end; + unsigned long value = strtoul(_count, &end, 10); + if (_count[0] == '\0' || *end != '\0' || errno != 0) { + if (errno != 0) + LOG_AND_NOTIFY_ERRNO( + "%s:%d: %s: invalid click count", path, lineno, _count); + else + LOG_AND_NOTIFY_ERR( + "%s:%d: %s: invalid click count", path, lineno, _count); + goto err; + } + count = value; + } + } + static const struct { const char *name; int code; @@ -1050,7 +1074,7 @@ parse_mouse_combos(struct config *conf, const char *combos, key_combo_list_t *ke .modifiers = modifiers, .m = { .button = button, - .count = 1, + .count = count, }, }; tll_push_back(*key_combos, new);