From 083b124bb9858d11c3af3ddcb8699d8b9aa90163 Mon Sep 17 00:00:00 2001 From: Raheman Vaiya Date: Tue, 3 May 2022 16:57:52 -0400 Subject: [PATCH] feature: Allow overload to accept an arbitrary action (#199) --- data/keyd-application-mapper.1.gz | Bin 1490 -> 1490 bytes data/keyd.1.gz | Bin 5678 -> 5681 bytes docs/keyd.scdoc | 4 ++-- src/descriptor.c | 2 +- src/keyboard.c | 8 +++++--- t/overload5.t | 21 +++++++++++++++++++++ t/test.conf | 1 + 7 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 t/overload5.t diff --git a/data/keyd-application-mapper.1.gz b/data/keyd-application-mapper.1.gz index 1769f08826327c94922c99644541ac80e8f148b4..a3668b2b28573db6fa2dc288b48f8d387254dbc0 100644 GIT binary patch delta 15 Wcmcb_eTkb*zMF&L{j`m2XIKF%y9Iy% delta 15 Wcmcb_eTkb*zMF$Vy<{WX8CC!$VFZ={ diff --git a/data/keyd.1.gz b/data/keyd.1.gz index be21038ae9774e5b242f9f86ace0e5c102f0601a..12fb1b6efef377947c5a913a505fa5dfcb6a53ba 100644 GIT binary patch literal 5681 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 Permanently toggle the state of the given layer. -*overload(, )* - Activates the given layer while held and executes the provided macro when tapped. +*overload(, )* + Activates the given while held and executes on tap. *timeout(, , )* If the key is held in isolation for more than _ ms_, activate the first diff --git a/src/descriptor.c b/src/descriptor.c index 71070b2..0078f75 100644 --- a/src/descriptor.c +++ b/src/descriptor.c @@ -34,7 +34,7 @@ static struct { { "oneshot", OP_ONESHOT, { ARG_LAYER } }, { "toggle", OP_TOGGLE, { ARG_LAYER } }, { "layer", OP_LAYER, { ARG_LAYER } }, - { "overload", OP_OVERLOAD, { ARG_LAYER, ARG_MACRO } }, + { "overload", OP_OVERLOAD, { ARG_LAYER, ARG_DESCRIPTOR } }, { "timeout", OP_TIMEOUT, { ARG_DESCRIPTOR, ARG_TIMEOUT, ARG_DESCRIPTOR } }, { "macro2", OP_MACRO2, { ARG_TIMEOUT, ARG_TIMEOUT, ARG_MACRO } }, }; diff --git a/src/keyboard.c b/src/keyboard.c index 57efb6e..d702a6d 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -383,6 +383,7 @@ static long process_descriptor(struct keyboard *kbd, uint8_t code, switch (d->op) { struct macro *macro; struct layer *layer; + struct descriptor *descriptor; uint8_t mods; case OP_KEYSEQUENCE: @@ -428,7 +429,7 @@ static long process_descriptor(struct keyboard *kbd, uint8_t code, break; case OP_OVERLOAD: layer = &layers[d->args[0].idx]; - macro = ¯os[d->args[1].idx]; + descriptor = &descriptors[d->args[1].idx]; if (pressed) { activate_layer(kbd, code, layer); @@ -438,8 +439,9 @@ static long process_descriptor(struct keyboard *kbd, uint8_t code, if (kbd->last_pressed_code == code) { clear_oneshot(kbd); - update_mods(kbd, dl, 0); - execute_macro(kbd, dl, macro); + + process_descriptor(kbd, code, descriptor, dl, 1); + process_descriptor(kbd, code, descriptor, dl, 0); } update_mods(kbd, NULL, 0); diff --git a/t/overload5.t b/t/overload5.t new file mode 100644 index 0000000..84f2418 --- /dev/null +++ b/t/overload5.t @@ -0,0 +1,21 @@ +7 down +7 up +x down +x up +7 down +x down +x up +7 up + +meta down +control down +meta up +control up +control down +x down +x up +control up +meta down +x down +x up +meta up diff --git a/t/test.conf b/t/test.conf index 73d2543..ed653ff 100644 --- a/t/test.conf +++ b/t/test.conf @@ -16,6 +16,7 @@ w = oneshot(customshift) 4 = toggle(test) 5 = layer(symbols) 6 = overload(6l, esc) +7 = overload(meta, oneshot(control)) 9 = M-C-S-x q = toggle(M-C-A) l = layer(test)