diff options
author | Nick Brassel <[email protected]> | 2024-11-24 20:32:30 +1100 |
---|---|---|
committer | GitHub <[email protected]> | 2024-11-24 20:32:30 +1100 |
commit | 7d8f193988495deb0e12ad79d5104d30c0724bf9 (patch) | |
tree | bff63d89048b699e393e8f65ec1c059f0d953d0c /lib/python/qmk/keymap.py | |
parent | 859dab864a0738f577d1da8e7189748ed8109c44 (diff) | |
download | qmk_firmware-7d8f193988495deb0e12ad79d5104d30c0724bf9.tar.gz qmk_firmware-7d8f193988495deb0e12ad79d5104d30c0724bf9.zip |
Allow codegen of `keymap.json` => `keymap.c` without requiring layers/layout etc. (#23451)
Diffstat (limited to 'lib/python/qmk/keymap.py')
-rw-r--r-- | lib/python/qmk/keymap.py | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/lib/python/qmk/keymap.py b/lib/python/qmk/keymap.py index 97c358788a..9dd043c4a8 100644 --- a/lib/python/qmk/keymap.py +++ b/lib/python/qmk/keymap.py @@ -29,38 +29,40 @@ __INCLUDES__ * This file was generated by qmk json2c. You may or may not want to * edit it directly. */ -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -__KEYMAP_GOES_HERE__ -}; -#if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE) -const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { +__KEYMAP_GOES_HERE__ __ENCODER_MAP_GOES_HERE__ -}; -#endif // defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE) - __MACRO_OUTPUT_GOES_HERE__ + +#ifdef OTHER_KEYMAP_C +# include OTHER_KEYMAP_C +#endif // OTHER_KEYMAP_C """ def _generate_keymap_table(keymap_json): - lines = [] + lines = ['const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {'] for layer_num, layer in enumerate(keymap_json['layers']): if layer_num != 0: lines[-1] = lines[-1] + ',' layer = map(_strip_any, layer) layer_keys = ', '.join(layer) lines.append(' [%s] = %s(%s)' % (layer_num, keymap_json['layout'], layer_keys)) + lines.append('};') return lines def _generate_encodermap_table(keymap_json): - lines = [] + lines = [ + '#if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE)', + 'const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {', + ] for layer_num, layer in enumerate(keymap_json['encoders']): if layer_num != 0: lines[-1] = lines[-1] + ',' encoder_keycode_txt = ', '.join([f'ENCODER_CCW_CW({_strip_any(e["ccw"])}, {_strip_any(e["cw"])})' for e in layer]) lines.append(' [%s] = {%s}' % (layer_num, encoder_keycode_txt)) + lines.extend(['};', '#endif // defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE)']) return lines @@ -271,8 +273,11 @@ def generate_c(keymap_json): A sequence of strings containing macros to implement for this keyboard. """ new_keymap = DEFAULT_KEYMAP_C - layer_txt = _generate_keymap_table(keymap_json) - keymap = '\n'.join(layer_txt) + + keymap = '' + if 'layers' in keymap_json and keymap_json['layers'] is not None: + layer_txt = _generate_keymap_table(keymap_json) + keymap = '\n'.join(layer_txt) new_keymap = new_keymap.replace('__KEYMAP_GOES_HERE__', keymap) encodermap = '' |