From 1a991ffd24b8a5414b72c10dfc0fbea0afc085c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF=E3=83=BC=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=83=91=E3=83=BC?= <76888457+filterpaper@users.noreply.github.com> Date: Fri, 7 Nov 2025 07:03:28 +0800 Subject: [PATCH] Guard remapping logic with MAGIC_ENABLE (#25537) * Only perform key and mod remapping in keycode_config() and mod_config() when MAGIC_ENABLE is defined. * If not set, these functions now return the original keycode or modifier unchanged. * Reduces firmware size, and unnecessary code when MAGIC_ENABLE is not enabled. * Removed space saving suggestion with magic functions from squeezing AVR documentation --- docs/squeezing_avr.md | 20 -------------------- quantum/keycode_config.c | 6 ++++++ 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/docs/squeezing_avr.md b/docs/squeezing_avr.md index 458b442d59..3eed847f07 100644 --- a/docs/squeezing_avr.md +++ b/docs/squeezing_avr.md @@ -87,26 +87,6 @@ Or if you're not using layers at all, you can outright remove the functionality #define NO_ACTION_LAYER ``` -## Magic Functions - -There are two `__attribute__ ((weak))` placeholder functions available to customize magic keycodes. If you are not using that feature to swap keycodes, such as backslash with backspace, add the following to your `keymap.c` or user space code: -```c -#ifndef MAGIC_ENABLE -uint16_t keycode_config(uint16_t keycode) { - return keycode; -} -#endif -``` -Likewise, if you are not using magic keycodes to swap modifiers, such as Control with GUI, add the following to your `keymap.c` or user space code: -```c -#ifndef MAGIC_ENABLE -uint8_t mod_config(uint8_t mod) { - return mod; -} -#endif -``` -Both of them will overwrite the placeholder functions with a simple return statement to reduce firmware size. - ## OLED tweaks One place you can save a bunch of space here is by not using `sprintf` or `snprintf`. This function call takes up ~1.5kB of firmware space, and can be rewritten. For instance, WPM uses this a lot. diff --git a/quantum/keycode_config.c b/quantum/keycode_config.c index cbfbcc8140..f5068902d5 100644 --- a/quantum/keycode_config.c +++ b/quantum/keycode_config.c @@ -24,6 +24,7 @@ keymap_config_t keymap_config; * and will return the corrected keycode, when appropriate. */ __attribute__((weak)) uint16_t keycode_config(uint16_t keycode) { +#ifdef MAGIC_ENABLE switch (keycode) { case KC_CAPS_LOCK: case KC_LOCKING_CAPS_LOCK: @@ -115,6 +116,9 @@ __attribute__((weak)) uint16_t keycode_config(uint16_t keycode) { default: return keycode; } +#else + return keycode; +#endif // MAGIC_ENABLE } /** \brief mod_config @@ -124,6 +128,7 @@ __attribute__((weak)) uint16_t keycode_config(uint16_t keycode) { */ __attribute__((weak)) uint8_t mod_config(uint8_t mod) { +#ifdef MAGIC_ENABLE /** * Note: This function is for the 5-bit packed mods, NOT the full 8-bit mods. * More info about the mods can be seen in modifiers.h. @@ -161,5 +166,6 @@ __attribute__((weak)) uint8_t mod_config(uint8_t mod) { mod &= ~MOD_RGUI; } +#endif // MAGIC_ENABLE return mod; }