diff options
Diffstat (limited to 'lib/python/qmk/keymap.py')
| -rw-r--r-- | lib/python/qmk/keymap.py | 30 | 
1 files changed, 30 insertions, 0 deletions
| diff --git a/lib/python/qmk/keymap.py b/lib/python/qmk/keymap.py index dddf6449a7..8ae8a5ed19 100644 --- a/lib/python/qmk/keymap.py +++ b/lib/python/qmk/keymap.py @@ -25,6 +25,7 @@ __INCLUDES__   * This file was generated by qmk json2c. You may or may not want to   * edit it directly.   */ +__KEYCODE_OUTPUT_GOES_HERE__  const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {  __KEYMAP_GOES_HERE__ @@ -123,6 +124,29 @@ def _generate_macros_function(keymap_json):      return macro_txt +def _generate_keycodes_function(keymap_json): +    """Generates keymap level keycodes. +    """ +    lines = [] +    lines.append('enum keymap_keycodes {') + +    for index, item in enumerate(keymap_json.get('keycodes', [])): +        key = item["key"] +        if index == 0: +            lines.append(f'  {key} = QK_USER_0,') +        else: +            lines.append(f'  {key},') + +    lines.append('};') + +    for item in keymap_json.get('keycodes', []): +        key = item["key"] +        for alias in item.get("aliases", []): +            lines.append(f'#define {alias} {key}') + +    return lines + +  def template_json(keyboard):      """Returns a `keymap.json` template for a keyboard. @@ -317,6 +341,12 @@ def generate_c(keymap_json):          hostlang = f'#include "keymap_{keymap_json["host_language"]}.h"\n#include "sendstring_{keymap_json["host_language"]}.h"\n'      new_keymap = new_keymap.replace('__INCLUDES__', hostlang) +    keycodes = '' +    if 'keycodes' in keymap_json and keymap_json['keycodes'] is not None: +        keycodes_txt = _generate_keycodes_function(keymap_json) +        keycodes = '\n'.join(keycodes_txt) +    new_keymap = new_keymap.replace('__KEYCODE_OUTPUT_GOES_HERE__', keycodes) +      return new_keymap | 
