diff options
author | Drashna Jaelre <[email protected]> | 2025-03-20 15:12:46 -0700 |
---|---|---|
committer | GitHub <[email protected]> | 2025-03-21 09:12:46 +1100 |
commit | a958276a764af481f5626cafb2f0c6ec00894ff2 (patch) | |
tree | fec3e541b50e3603f45e3728ab6c7d44c79017f5 /modules/qmk | |
parent | 7fd12c2b98f00b7e70bfc70a74654a23c2b04d16 (diff) | |
download | qmk_firmware-a958276a764af481f5626cafb2f0c6ec00894ff2.tar.gz qmk_firmware-a958276a764af481f5626cafb2f0c6ec00894ff2.zip |
Add Super Alt-Tab macro example as module (#24970)
* Add Super Alt-Tab macro example as module
* Make module more configurable
* remove unneeded comments
Co-authored-by: jack <[email protected]>
* Update modules/qmk/super_alt_tab/super_alt_tab.c
Co-authored-by: Nick Brassel <[email protected]>
---------
Co-authored-by: jack <[email protected]>
Co-authored-by: Nick Brassel <[email protected]>
Diffstat (limited to 'modules/qmk')
-rw-r--r-- | modules/qmk/super_alt_tab/qmk_module.json | 10 | ||||
-rw-r--r-- | modules/qmk/super_alt_tab/super_alt_tab.c | 50 |
2 files changed, 60 insertions, 0 deletions
diff --git a/modules/qmk/super_alt_tab/qmk_module.json b/modules/qmk/super_alt_tab/qmk_module.json new file mode 100644 index 0000000000..002f7fb69e --- /dev/null +++ b/modules/qmk/super_alt_tab/qmk_module.json @@ -0,0 +1,10 @@ +{ + "module_name": "Super Alt Tab", + "maintainer": "QMK Maintainers", + "keycodes": [ + { + "key": "COMMUNITY_MODULE_SUPER_ALT_TAB", + "aliases": ["CM_S_AT"] + } + ] +} diff --git a/modules/qmk/super_alt_tab/super_alt_tab.c b/modules/qmk/super_alt_tab/super_alt_tab.c new file mode 100644 index 0000000000..dfeb4b5773 --- /dev/null +++ b/modules/qmk/super_alt_tab/super_alt_tab.c @@ -0,0 +1,50 @@ +// Copyright 2025 Christopher Courtney, aka Drashna Jael're (@drashna) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +ASSERT_COMMUNITY_MODULES_MIN_API_VERSION(1, 0, 0); + +static bool is_alt_tab_active = false; +static uint16_t alt_tab_timer = 0; + +#ifndef COMMUNITY_MODULE_SUPER_ALT_TAB_TIMEOUT +# define COMMUNITY_MODULE_SUPER_ALT_TAB_TIMEOUT 1000 +#endif // COMMUNITY_MODULE_SUPER_ALT_TAB_TIMEOUT +#ifndef COMMUNITY_MODULE_SUPER_ALT_TAB_MODIFIER +# define COMMUNITY_MODULE_SUPER_ALT_TAB_MODIFIER MOD_LALT +#endif // COMMUNITY_MODULE_SUPER_ALT_TAB_MODIFIER +#ifndef COMMUNITY_MODULE_SUPER_ALT_TAB_KEY +# define COMMUNITY_MODULE_SUPER_ALT_TAB_KEY KC_TAB +#endif // COMMUNITY_MODULE_SUPER_ALT_TAB_KEY + +bool process_record_super_alt_tab(uint16_t keycode, keyrecord_t *record) { + if (!process_record_super_alt_tab_kb(keycode, record)) { + return false; + } + + switch (keycode) { // This will do most of the grunt work with the keycodes. + case COMMUNITY_MODULE_SUPER_ALT_TAB: + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_mods(COMMUNITY_MODULE_SUPER_ALT_TAB_MODIFIER); + } + alt_tab_timer = timer_read(); + register_code(COMMUNITY_MODULE_SUPER_ALT_TAB_KEY); + } else { + unregister_code(COMMUNITY_MODULE_SUPER_ALT_TAB_KEY); + } + break; + } + return true; +} + +void housekeeping_task_super_alt_tab(void) { + if (is_alt_tab_active) { + if (timer_elapsed(alt_tab_timer) > COMMUNITY_MODULE_SUPER_ALT_TAB_TIMEOUT) { + unregister_mods(COMMUNITY_MODULE_SUPER_ALT_TAB_MODIFIER); + is_alt_tab_active = false; + } + } +} |