diff --git a/docs/unit_testing.md b/docs/unit_testing.md index 7ef3817f186..a404fc22473 100644 --- a/docs/unit_testing.md +++ b/docs/unit_testing.md @@ -78,7 +78,8 @@ Many common QMK keycodes are recognized by `get_keycode_string()`, but not all. Optionally, `keycode_string_names_user` may be defined to add names for additional keycodes. For example, supposing keymap.c defines `MYMACRO1` and `MYMACRO2` as custom keycodes, the following adds their names: ```c -const keycode_string_name_t keycode_string_names_user[] = { +const keycode_string_name_t *keycode_string_names_user = +(keycode_string_name_t []){ KEYCODE_STRING_NAME(MYMACRO1), KEYCODE_STRING_NAME(MYMACRO2), KEYCODE_STRING_NAMES_END // End of table sentinel. diff --git a/quantum/keycode_string.c b/quantum/keycode_string.c index 369065936a8..0ba497dbcbb 100644 --- a/quantum/keycode_string.c +++ b/quantum/keycode_string.c @@ -92,10 +92,13 @@ static const keycode_string_name_t keycode_names[] = { KEYCODE_STRING_NAMES_END }; // clang-format on + +__attribute__((weak)) const keycode_string_name_t empty_table[] = {KEYCODE_STRING_NAMES_END}; + /** Users can override this to define names of additional keycodes. */ -__attribute__((weak)) const keycode_string_name_t keycode_string_names_user[] = {KEYCODE_STRING_NAMES_END}; +__attribute__((weak)) const keycode_string_name_t* keycode_string_names_user = empty_table; /** Keyboard vendors can override this to define names of additional keycodes. */ -__attribute__((weak)) const keycode_string_name_t keycode_string_names_kb[] = {KEYCODE_STRING_NAMES_END}; +__attribute__((weak)) const keycode_string_name_t* keycode_string_names_kb = empty_table; /** Names of the 4 mods on each hand. */ static const char* mod_names[4] = {PSTR("CTL"), PSTR("SFT"), PSTR("ALT"), PSTR("GUI")}; /** Internal buffer for holding a stringified keycode. */ diff --git a/quantum/keycode_string.h b/quantum/keycode_string.h index 1673fcfeaa9..5f4d7c2866c 100644 --- a/quantum/keycode_string.h +++ b/quantum/keycode_string.h @@ -90,9 +90,9 @@ typedef struct { * The above defines names for `MYMACRO1` and `MYMACRO2`, and overrides * `KC_EXLM` to format as "KC_EXLM" instead of the default "S(KC_1)". */ -extern const keycode_string_name_t keycode_string_names_user[]; +extern const keycode_string_name_t* keycode_string_names_user; /** Same as `keycode_string_names_user`, but for use at the keyboard level. */ -extern const keycode_string_name_t keycode_string_names_kb[]; +extern const keycode_string_name_t* keycode_string_names_kb; /** Helper to define a keycode_string_name_t. */ # define KEYCODE_STRING_NAME(kc) \ diff --git a/tests/keycode_string/test_keycode_string.cpp b/tests/keycode_string/test_keycode_string.cpp index 781b5b72b75..ac90d7854cf 100644 --- a/tests/keycode_string/test_keycode_string.cpp +++ b/tests/keycode_string/test_keycode_string.cpp @@ -22,11 +22,11 @@ enum { }; // clang-format off -extern "C" const keycode_string_name_t keycode_string_names_kb[] = { +extern "C" const keycode_string_name_t *keycode_string_names_kb = (keycode_string_name_t []){ KEYCODE_STRING_NAME(MYMACRO1), KEYCODE_STRING_NAMES_END // End of table sentinel. }; -extern "C" const keycode_string_name_t keycode_string_names_user[] = { +extern "C" const keycode_string_name_t *keycode_string_names_user = (keycode_string_name_t []){ KEYCODE_STRING_NAME(MYMACRO2), KEYCODE_STRING_NAME(KC_EXLM), KEYCODE_STRING_NAMES_END // End of table sentinel.