#include QMK_KEYBOARD_H #include "tap_tog.h" bool tap_tog_layer_other_key_pressed = false; bool tap_tog_layer_toggled_on = false; uint8_t tap_tog_count = 0; void process_tap_tog(uint8_t layer, keyrecord_t *record) { tap_tog_count++; // press if (record->event.pressed) { // TTL has already been pressed and we are toggled into that layer // so now we need to leave if(tap_tog_layer_toggled_on) { layer_clear(); tap_tog_layer_toggled_on = false; } // this means we're in our default layer // so switch the layer immediately // whether we'll switch back when it's released depends on if a button gets pressed while this is held down else { // switch layer layer_on(layer); tap_tog_layer_other_key_pressed = false; // if this becomes true before it gets released, it will act as a held modifier } } // release else { // if it was used as a held modifier (like traditional shift) if(tap_tog_layer_other_key_pressed) { // switch layer back layer_clear(); } // if it was used as a toggle button else { // next time, it will turn layer off tap_tog_layer_toggled_on = true; // If it's been tapped twice, reset the toggle flag. // Otherwise, we get stuck oscillating between this code block and the // pressed && TTL_toggled_on block. if (tap_tog_count >= 4 ) { tap_tog_count = 0; tap_tog_layer_toggled_on = false; } } } }