From 050472a4d07d07c1d9ae17d2fd26d44e9d95d950 Mon Sep 17 00:00:00 2001 From: Eric Gebhart Date: Sat, 12 Nov 2022 00:09:41 +0100 Subject: Eric Gebhart user space and keymaps (#17487) Co-authored-by: Drashna Jaelre --- users/ericgebhart/extensions/swapper.c | 58 ++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 users/ericgebhart/extensions/swapper.c (limited to 'users/ericgebhart/extensions/swapper.c') diff --git a/users/ericgebhart/extensions/swapper.c b/users/ericgebhart/extensions/swapper.c new file mode 100644 index 0000000000..988a99e602 --- /dev/null +++ b/users/ericgebhart/extensions/swapper.c @@ -0,0 +1,58 @@ +/* + Copyright 2022 Eric Gebhart . +*/ +// Derived from swapper by @Possumvibes and @Callum + +#include "swapper.h" + +swapper_state_t swapper_states[] = { +#ifdef SWAPPER_ENABLE +#include "swapper.def" +#endif +}; +uint8_t NUM_SWAPPER_STATES = sizeof(swapper_states) / sizeof(swapper_state_t); + +// Based on https://github.com/callum-oakley/qmk_firmware/tree/master/users/callum +void process_swappers(uint16_t keycode, keyrecord_t *record) { +#ifdef SWAPPER_ENABLE + swapper_state_t *curr_state = NULL; + for (int i = 0; i < NUM_SWAPPER_STATES; ++i) { + curr_state = &swapper_states[i]; + + if (keycode == curr_state->forward_trigger) { + if (record->event.pressed) { + if (!curr_state->active) { + curr_state->active = true; + register_code16(curr_state->mod); + } + register_code16(curr_state->forward); + } else { + unregister_code16(curr_state->forward); + // Don't unregister curr_state->mod until some other key is hit or released. + } + } else if (curr_state->active && keycode == curr_state->reverse_trigger) { + if (record->event.pressed) { + register_code16(curr_state->reverse); + } else { + unregister_code16(curr_state->reverse); + } + } else if (curr_state->active) { + unregister_code16(curr_state->mod); + curr_state->active = false; + } + } +#endif +} -- cgit v1.2.3