qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

keymap_h.py (1806B)


      1 from argcomplete.completers import FilesCompleter
      2 
      3 from milc import cli
      4 
      5 import qmk.path
      6 from qmk.commands import dump_lines
      7 from qmk.commands import parse_configurator_json
      8 from qmk.constants import GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE
      9 
     10 
     11 def _generate_keycodes_function(keymap_json):
     12     """Generates keymap level keycodes.
     13     """
     14     lines = []
     15     lines.append('enum keymap_keycodes {')
     16 
     17     for index, item in enumerate(keymap_json.get('keycodes', [])):
     18         key = item["key"]
     19         if index == 0:
     20             lines.append(f'  {key} = QK_USER_0,')
     21         else:
     22             lines.append(f'  {key},')
     23 
     24     lines.append('};')
     25 
     26     for item in keymap_json.get('keycodes', []):
     27         key = item["key"]
     28         for alias in item.get("aliases", []):
     29             lines.append(f'#define {alias} {key}')
     30 
     31     return lines
     32 
     33 
     34 @cli.argument('-o', '--output', arg_only=True, type=qmk.path.normpath, help='File to write to')
     35 @cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages")
     36 @cli.argument('filename', type=qmk.path.FileType('r'), arg_only=True, completer=FilesCompleter('.json'), help='Configurator JSON file')
     37 @cli.subcommand('Creates a keymap.h from a QMK Configurator export.')
     38 def generate_keymap_h(cli):
     39     """Creates a keymap.h from a QMK Configurator export
     40     """
     41     if cli.args.output and cli.args.output.name == '-':
     42         cli.args.output = None
     43 
     44     keymap_h_lines = [GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE, '#pragma once', '// clang-format off']
     45 
     46     keymap_json = parse_configurator_json(cli.args.filename)
     47 
     48     if 'keycodes' in keymap_json and keymap_json['keycodes'] is not None:
     49         keymap_h_lines += _generate_keycodes_function(keymap_json)
     50 
     51     dump_lines(cli.args.output, keymap_h_lines, cli.args.quiet)