qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

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 }