super_alt_tab.c (1794B)
1 // Copyright 2025 Christopher Courtney, aka Drashna Jael're (@drashna) 2 // SPDX-License-Identifier: GPL-2.0-or-later 3 4 #include QMK_KEYBOARD_H 5 6 ASSERT_COMMUNITY_MODULES_MIN_API_VERSION(1, 0, 0); 7 8 static bool is_alt_tab_active = false; 9 static uint16_t alt_tab_timer = 0; 10 11 #ifndef COMMUNITY_MODULE_SUPER_ALT_TAB_TIMEOUT 12 # define COMMUNITY_MODULE_SUPER_ALT_TAB_TIMEOUT 1000 13 #endif // COMMUNITY_MODULE_SUPER_ALT_TAB_TIMEOUT 14 #ifndef COMMUNITY_MODULE_SUPER_ALT_TAB_MODIFIER 15 # define COMMUNITY_MODULE_SUPER_ALT_TAB_MODIFIER MOD_LALT 16 #endif // COMMUNITY_MODULE_SUPER_ALT_TAB_MODIFIER 17 #ifndef COMMUNITY_MODULE_SUPER_ALT_TAB_KEY 18 # define COMMUNITY_MODULE_SUPER_ALT_TAB_KEY KC_TAB 19 #endif // COMMUNITY_MODULE_SUPER_ALT_TAB_KEY 20 21 bool process_record_super_alt_tab(uint16_t keycode, keyrecord_t *record) { 22 if (!process_record_super_alt_tab_kb(keycode, record)) { 23 return false; 24 } 25 26 switch (keycode) { // This will do most of the grunt work with the keycodes. 27 case COMMUNITY_MODULE_SUPER_ALT_TAB: 28 if (record->event.pressed) { 29 if (!is_alt_tab_active) { 30 is_alt_tab_active = true; 31 register_mods(COMMUNITY_MODULE_SUPER_ALT_TAB_MODIFIER); 32 } 33 alt_tab_timer = timer_read(); 34 register_code(COMMUNITY_MODULE_SUPER_ALT_TAB_KEY); 35 } else { 36 unregister_code(COMMUNITY_MODULE_SUPER_ALT_TAB_KEY); 37 } 38 break; 39 } 40 return true; 41 } 42 43 void housekeeping_task_super_alt_tab(void) { 44 if (is_alt_tab_active) { 45 if (timer_elapsed(alt_tab_timer) > COMMUNITY_MODULE_SUPER_ALT_TAB_TIMEOUT) { 46 unregister_mods(COMMUNITY_MODULE_SUPER_ALT_TAB_MODIFIER); 47 is_alt_tab_active = false; 48 } 49 } 50 }