From fd6840ddf4fe6f1e4bc27fba268ded475d975a68 Mon Sep 17 00:00:00 2001 From: Raheman Vaiya Date: Sat, 6 Aug 2022 17:50:29 -0400 Subject: [PATCH] Add toggle2 (#270) --- data/keyd-application-mapper.1.gz | Bin 1490 -> 1490 bytes data/keyd.1.gz | Bin 7020 -> 7049 bytes docs/keyd.scdoc | 4 +++ src/descriptor.c | 1 + src/descriptor.h | 1 + src/keyboard.c | 10 +++++++ t/test.conf | 1 + t/toggle-2.t | 25 ++++++++++++++++ t/toggle2.t | 46 ++++++++++++++---------------- 9 files changed, 64 insertions(+), 24 deletions(-) create mode 100644 t/toggle-2.t diff --git a/data/keyd-application-mapper.1.gz b/data/keyd-application-mapper.1.gz index a3e5b221cc8eeb6f368986c1f80460e95851b413..b471924708490f2258968885daa872b9fce3acbb 100644 GIT binary patch delta 1358 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 Permanently toggle the state of the given layer. +*toggle2(, )* + Equivalent to *toggle*, but additionally executes the supplied macro before + toggling the layer. + *overload(, )* Activates the given layer while held and executes on tap. diff --git a/src/descriptor.c b/src/descriptor.c index 9fd9636..5ccbe8c 100644 --- a/src/descriptor.c +++ b/src/descriptor.c @@ -36,6 +36,7 @@ static struct { { "swap2", OP_SWAP2, { ARG_LAYER, ARG_MACRO } }, { "oneshot", OP_ONESHOT, { ARG_LAYER } }, { "toggle", OP_TOGGLE, { ARG_LAYER } }, + { "toggle2", OP_TOGGLE2, { ARG_LAYER, ARG_MACRO } }, { "layer", OP_LAYER, { ARG_LAYER } }, { "overload", OP_OVERLOAD, { ARG_LAYER, ARG_DESCRIPTOR } }, { "timeout", OP_TIMEOUT, { ARG_DESCRIPTOR, ARG_TIMEOUT, ARG_DESCRIPTOR } }, diff --git a/src/descriptor.h b/src/descriptor.h index 8aa243a..89dea61 100644 --- a/src/descriptor.h +++ b/src/descriptor.h @@ -25,6 +25,7 @@ enum op { OP_LAYER, OP_OVERLOAD, OP_TOGGLE, + OP_TOGGLE2, OP_MACRO, OP_MACRO2, diff --git a/src/keyboard.c b/src/keyboard.c index be09c13..3a53caa 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -483,16 +483,26 @@ static long process_descriptor(struct keyboard *kbd, uint8_t code, } break; + case OP_TOGGLE2: case OP_TOGGLE: idx = d->args[0].idx; if (!pressed) { + if (d->op == OP_TOGGLE2) { + macro = &kbd->config.macros[d->args[1].idx]; + execute_macro(kbd, dl, macro); + } + kbd->layer_state[idx].toggled = !kbd->layer_state[idx].toggled; if (kbd->layer_state[idx].toggled) activate_layer(kbd, code, idx); else deactivate_layer(kbd, idx); + + update_mods(kbd, -1, 0); + } else { + clear_oneshot(kbd); } break; diff --git a/t/test.conf b/t/test.conf index 527a830..ce58f33 100644 --- a/t/test.conf +++ b/t/test.conf @@ -28,6 +28,7 @@ s = layer(shift) - = toggle(dvorak) = = timeout(a, 300, b) \ = 😄 +[ = toggle2(control, macro(one)) [layout2:layout] diff --git a/t/toggle-2.t b/t/toggle-2.t new file mode 100644 index 0000000..063fb5a --- /dev/null +++ b/t/toggle-2.t @@ -0,0 +1,25 @@ +2 down +2 up +t down +t up +b down +b up +b down +b up +t down +t up +b down +b up + +shift down +shift up +a down +a up +shift down +shift up +a down +a up +shift down +shift up +b down +b up diff --git a/t/toggle2.t b/t/toggle2.t index 063fb5a..cd87b2e 100644 --- a/t/toggle2.t +++ b/t/toggle2.t @@ -1,25 +1,23 @@ -2 down -2 up -t down -t up -b down -b up -b down -b up -t down -t up -b down -b up +[ down +[ up +k down +k up +[ down +[ up -shift down -shift up -a down -a up -shift down -shift up -a down -a up -shift down -shift up -b down -b up +o down +o up +n down +n up +e down +e up +control down +k down +k up +o down +o up +n down +n up +e down +e up +control up