#include "superduper.h" #include "eeconfig.h" #include "eeprom.h" #include "keymap_colemak.h" // SuperDuper #define SUPERDUPER_COMBO_COUNT 3 #define EECONFIG_SUPERDUPER_INDEX (uint8_t *) 19 enum process_combo_event { CB_SUPERDUPER, }; enum supported_layers { _QWERTY, _COLEMAK, _QWOC }; const uint16_t PROGMEM superduper_combos[SUPERDUPER_COMBO_COUNT][3] = { [_QWERTY] = {KC_S, KC_D, COMBO_END}, [_COLEMAK] = {KC_R, KC_S, COMBO_END}, [_QWOC] = {CM_S, CM_D, COMBO_END}, }; combo_t key_combos[COMBO_COUNT] = { [CB_SUPERDUPER] = COMBO_ACTION(superduper_combos[_QWERTY]), }; volatile bool superduper_enabled = true; const uint16_t PROGMEM empty_combo[] = {COMBO_END}; bool toggle_superduper_mode(void) { superduper_enabled = !superduper_enabled; if (superduper_enabled) { set_superduper_key_combos(); } else { clear_superduper_key_combos(); } return superduper_enabled; } void set_superduper_key_combo_layer(uint16_t layer) { key_combos[CB_SUPERDUPER].keys = superduper_combos[layer]; eeprom_update_byte(EECONFIG_SUPERDUPER_INDEX, layer); } void set_superduper_key_combos(void) { uint8_t layer = eeprom_read_byte(EECONFIG_SUPERDUPER_INDEX); switch (layer) { case _QWERTY: case _COLEMAK: case _QWOC: key_combos[CB_SUPERDUPER].keys = superduper_combos[layer]; break; } } void clear_superduper_key_combos(void) { key_combos[CB_SUPERDUPER].keys = empty_combo; }