From 67a2af0f7f7f1558d411fea0fb8c70dfb350adc1 Mon Sep 17 00:00:00 2001 From: Raheman Vaiya Date: Sat, 30 Jul 2022 03:26:52 -0400 Subject: [PATCH] config: Invert alias syntax Swtich from = to = and confine keys to a single alias. This is arguably more intuitive and reduces both config and implementation complexity. --- data/keyd-application-mapper.1.gz | Bin 1485 -> 1490 bytes data/keyd.1.gz | Bin 6890 -> 6961 bytes docs/keyd.scdoc | 36 ++++++------ src/config.c | 92 +++++++++--------------------- src/config.h | 10 +--- 5 files changed, 49 insertions(+), 89 deletions(-) diff --git a/data/keyd-application-mapper.1.gz b/data/keyd-application-mapper.1.gz index 8213c3f17549e8a0cce40714dcf5ae208bd47d6d..a3e5b221cc8eeb6f368986c1f80460e95851b413 100644 GIT binary patch delta 1450 zcmV;b1y%aZ3(^aJABzY80000000Wg)?@t^z5dEC}E2dOR0C9VP{*odZ=@JogQkq18 zB&|3;_;$T}7T)#7_8wdn^>6Q+@h%5VsZ^8**7nT2dGluMe6d5Py47AqUD9$xp(tHJ zhxy@Qew5|ded(Ic>Zl3peWTl`qH!%%&Qn~OK%IBBR}JBR&(=j!Yh|ojT1_gDqSLn@ z$+VTDPSrZgjiyDro7a?=fo5N5v8%phxwe#khSeuo-mbD-m1G6N3tgL*>RXtFYa@U> z%kuNrv~#65Tu+5+xgPBmxr(#`yr2uIl++>U$QyT(rO@eR!c?X}kZ=_Sgk|O!2g9tbTPjPw zw}@Hl%Cw*!bwI*X9gCFd{x;76%sEUG7gQO@V5L&lm9y4eb1slh^Gx_{t1SO;Mn7hc zE{<_HYXAH)%N`x;o6hSH80F#f``<_SUOdjzzmwqsA!B|?_kO;o-?$3g97A#B=slCK z$I(P2JDA@wNoQCBaw0`M$#_Ak#DKTy324IwTPtfI8(&M$5h{+86V3a(L35%nPHxQt zmiGq!+2I!0s6SraLX=go6`~*X$9gU`%X_KsrITd>AAcK!*jV;x%R+gy%kDk{rB@gq z`bP0+Ibg^abqj5O-G|D`{Y%CN6Pv;y#^xV=k)WZfFcr(&J{xErFmS0;%Pmu`Y``(L zdOgAK({JQ>Wn$d07L|<<+9mx;FDFqg$At@7IJ>(P$0b-@ggDvXnjaGO8dZ3=J8y$2 z0jN_2^MAj`hl`bWjp-XUVBp?aG5S{?-Gy~f02N@kNoW)QVywuG@n z*OSHLF?z(`GO50qQmG%}N<~NmqdKGwoCghTwW~pL4HuK6pMEZ!b$(A&jsdmiElP+U zR-KGD$j&Xfs_CXeoQ_A_P-5$9a((Q28P8U-$bU+u8w?G^@_j367@#0$c(OF9=z-}C ze|NfS79~jIq#J)fptEa;o>88%{8Bezt~-wlYOvw!WB&H+eD>ze?0o+2Ew6#hh$cxB zSQgs~HqFq!4_#Ih)^ZjA;#wvk8gJuzPo)W+1;(H~PjvJ`G?*!W zrhm}L4wHXNhLCW>hkU_Ga6Y?T4Qa>>Y|y;o0FvGt?TydqN%wU60&Hivn>t>ls$Npf( zr}BY^w|qPI-o#BB*)L`oae^e}%W}sxkM~Xy$1WQmTGD5w@zDM- zY%wqRRlw3O_1YkTEUa8_OTiZcu8@-1kOZrqDV8k9eh-@vbpxENB)Lkte}pwxRe#zC z3f9ys4!6`IQxn{vVJNhN6vV%SGoOY^$5v=kyl-L#W`Mvb>D4hb##mqTY^VAAm)I{> zsx_gZUA*yD@&v&a5^lwcxe3|Qsul&f1AmHyr;_?~UrH(qy{zmVkck*NtSykY#uVeh zk~wKp+)i;LVo^(Y7vn8!5sy25YEugLWv}@GgzjpKQEq3$>xpl?gFAr!Q#FHs*9wy< zJE1O%9ty;tlIN{9ML=UW-EqJ&)-~?a5usEOgA&W@1T$0eG{sENc6-_V4G=j?aPJEM E0R4-{JOBUy delta 1451 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 D%HNXa literal 6890 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 diff --git a/docs/keyd.scdoc b/docs/keyd.scdoc index 8446ce3..21006de 100644 --- a/docs/keyd.scdoc +++ b/docs/keyd.scdoc @@ -279,21 +279,23 @@ E.G ## Aliases -A config file may include *aliases* which can be used as valid left hand values -in place of one or more keycodes. For example, the default alias *meta* is bound -to leftmeta and rightmeta. Thus the binding 'meta = a' is equivalent to the -bindings 'leftmeta = a' and 'rightmeta = a'. +An *alias* may be assigned to a key and used as a valid left hand value. +Multiple keys may be bound to a single alias, but _a given key may only be +assigned to one alias at a time_. For example, the keys 'leftmeta' and +'rightmeta' are bound to the alias *meta* by default. Thus the binding 'meta = +a' is equivalent to the bindings 'leftmeta = a' and 'rightmeta = a'. -Aliases are defined in a special section called 'aliases' where each line takes the form: +Aliases are defined in a special section called 'aliases' where each line takes +the form: - = + = -and __ must be a valid key name. +where __ must be a valid key name. -Note that may itself be a valid key, in which case all references to the -key will be replaced with the new key. When used judiciously, aliases can be -used in conjunction with the include directive to share bindings between -keyboards with different physical layouts. +Note that may itself be a valid key name, in which case all references +to the key within the config file will be replaced with the new key. When used +judiciously, aliases can be used in conjunction with the include directive to +share bindings between keyboards with different physical layouts. For example: @@ -318,16 +320,18 @@ For example: 004c:0267 [aliases] - meta = leftalt - meta = rightalt - alt = leftmeta - alt = rightmeta + leftalt = meta + rightalt = meta + rightmeta = alt + leftmeta = alt [main] include common ``` -Allows the user to define a set of universal bindings in /etc/keyd/common without having to explicitly account for the transposed meta and alt keys on an apple keyboard. +Allows the user to define a set of universal bindings in /etc/keyd/common +without having to explicitly account for the transposed meta and alt keys within +the included config snippet. ## File Inclusion diff --git a/src/config.c b/src/config.c index 47d592a..7314f0a 100644 --- a/src/config.c +++ b/src/config.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -159,11 +160,9 @@ int set_layer_entry(const struct config *config, struct layer *layer, size_t i; int found = 0; - for (i = 0; i < config->nr_aliases; i++) { - const struct alias *alias = &config->aliases[i]; - - if (!strcmp(alias->name, key)) { - layer->keymap[alias->code] = *d; + for (i = 0; i < 256; i++) { + if (!strcmp(config->aliases[i], key)) { + layer->keymap[i] = *d; found = 1; } } @@ -284,18 +283,23 @@ static void config_init(struct config *config) } for (i = 0; i < MAX_MOD; i++) { - struct descriptor *ent1 = &km[modifier_table[i].code1]; - struct descriptor *ent2 = &km[modifier_table[i].code2]; + const struct modifier_table_ent *mod = &modifier_table[i]; + + struct descriptor *d1 = &km[mod->code1]; + struct descriptor *d2 = &km[mod->code2]; - int idx = config_get_layer_index(config, modifier_table[i].name); + int idx = config_get_layer_index(config, mod->name); assert(idx != -1); - ent1->op = OP_LAYER; - ent1->args[0].idx = idx; + d1->op = OP_LAYER; + d1->args[0].idx = idx; - ent2->op = OP_LAYER; - ent2->args[0].idx = idx; + d2->op = OP_LAYER; + d2->args[0].idx = idx; + + strcpy(config->aliases[mod->code1], mod->name); + strcpy(config->aliases[mod->code2], mod->name); } /* In ms */ @@ -325,67 +329,28 @@ static void parse_globals(const char *path, struct config *config, struct ini_se } } -static void add_alias(struct config *config, const char *name, uint8_t code) -{ - if (config->nr_aliases >= MAX_ALIASES) { - fprintf(stderr, "\tERROR: Max aliases (%d) exceeded\n", - MAX_ALIASES); - return; - } - - struct alias *alias = &config->aliases[config->nr_aliases]; - - alias->name[sizeof(alias->name)-1] = 0; - strncpy(alias->name, name, sizeof(alias->name)-1); - alias->code = code; - - config->nr_aliases++; -} - -void create_modifier_aliases(struct config *config) -{ - uint8_t aliased_mods[MAX_MOD] = { 0 }; - size_t i; - - for (i = 0; i < config->nr_aliases; i++) { - size_t j; - - for (j = 0; j < MAX_MOD; j++) { - const struct modifier_table_ent *mod = &modifier_table[j]; - const struct alias *alias = &config->aliases[i]; - - if (!strcmp(alias->name, mod->name)) - aliased_mods[j] = 1; - } - } - - for (i = 0; i < MAX_MOD; i++) { - const struct modifier_table_ent *mod = &modifier_table[i]; - - // Don't create modifier aliases for modifier names which are explicitly - // redefined by the user. - if (!aliased_mods[i]) { - add_alias(config, mod->name, mod->code1); - add_alias(config, mod->name, mod->code2); - } - } -} - static void parse_aliases(const char *path, struct config *config, struct ini_section *section) { size_t i; - for (i = 0; i < section->nr_entries;i++) { + for (i = 0; i < section->nr_entries; i++) { uint8_t code; struct ini_entry *ent = §ion->entries[i]; - if ((code = lookup_keycode(ent->val))) { - add_alias(config, ent->key, code); + if ((code = lookup_keycode(ent->key))) { + ssize_t len = strlen(ent->val); + + if (len > MAX_ALIAS_LEN) { + fprintf(stderr, + "\tERROR: %s exceeds the maximum alias length (%d)\n", + ent->val, MAX_ALIAS_LEN); + } else { + strcpy(config->aliases[code], ent->val); + } } else { fprintf(stderr, "\tERROR %s:%zd: Failed to define alias %s, %s is not a valid keycode\n", - path, ent->lnum, - ent->key, ent->val); + path, ent->lnum, ent->key, ent->val); } } } @@ -422,7 +387,6 @@ int config_parse(struct config *config, const char *path) } } - create_modifier_aliases(config); /* Populate each layer. */ for (i = 0; i < ini->nr_sections; i++) { size_t j; diff --git a/src/config.h b/src/config.h index 6c536d9..aecc973 100644 --- a/src/config.h +++ b/src/config.h @@ -14,19 +14,12 @@ #define MAX_AUX_DESCRIPTORS 64 #define MAX_ALIAS_LEN 32 -#define MAX_ALIASES 64 #include "layer.h" #include "descriptor.h" #include "macro.h" #include "command.h" - -struct alias { - char name[MAX_ALIAS_LEN]; - uint8_t code; -}; - struct config { struct layer layers[MAX_LAYERS]; @@ -34,9 +27,8 @@ struct config { struct descriptor descriptors[MAX_AUX_DESCRIPTORS]; struct macro macros[MAX_MACROS]; struct command commands[MAX_COMMANDS]; - struct alias aliases[MAX_ALIASES]; + char aliases[256][MAX_ALIAS_LEN+1]; - size_t nr_aliases; size_t nr_layers; size_t nr_macros; size_t nr_descriptors;