forked from mirrors/qmk_firmware
add support for writing a default keymap with 2 layers
This commit is contained in:
parent
0f8b34771d
commit
88cfd3554a
1 changed files with 35 additions and 13 deletions
|
@ -15,14 +15,14 @@ from qmk.info_json_encoder import InfoJSONEncoder
|
|||
|
||||
|
||||
@cli.argument('kle', arg_only=True, help='A file or KLE id to convert')
|
||||
@cli.argument('--vid', arg_only=True, default='0x03A8', help='USB VID.')
|
||||
@cli.argument('--pid', arg_only=True, default='0x0000', help='USB PID.')
|
||||
@cli.argument('-m', '--manufacturer', arg_only=True, default='', help='Manufacturer of the keyboard.')
|
||||
@cli.argument('-l', '--layout', arg_only=True, default='LAYOUT', help='The LAYOUT name this KLE represents.')
|
||||
@cli.argument('-kb', '--keyboard', help='The folder for the keyboard.')
|
||||
@cli.argument('-d', '--diode', arg_only=True, default='COL2ROW', help='The diode direction for the keyboard. (COL2ROW, ROW2COL)')
|
||||
@cli.subcommand('Use a KLE layout to build info.json and a default keymap', hidden=False if cli.config.user.developer else True)
|
||||
@automagic_keyboard
|
||||
@cli.argument('--vid', arg_only=True, default='0x03A8', help='USB VID (Default: 0x03A8)')
|
||||
@cli.argument('--pid', arg_only=True, default='0x0000', help='USB PID (Default: 0x0000)')
|
||||
@cli.argument('-m', '--manufacturer', arg_only=True, default='', help='Manufacturer of the keyboard')
|
||||
@cli.argument('-l', '--layout', arg_only=True, default='LAYOUT', help='The LAYOUT name this KLE represents')
|
||||
@cli.argument('-kb', '--keyboard', arg_only=True, required=True, help='The folder name for the keyboard')
|
||||
@cli.argument('-km', '--keymap', arg_only=True, default='default', help='The name of the keymap to write (Default: default)')
|
||||
@cli.argument('-d', '--diode', arg_only=True, default='COL2ROW', help='The diode direction for the keyboard (COL2ROW, ROW2COL)')
|
||||
@cli.subcommand('Use a KLE layout to build info.json and a keymap', hidden=False if cli.config.user.developer else True)
|
||||
def kle2json(cli):
|
||||
"""Convert a KLE layout to QMK's layout format.
|
||||
"""
|
||||
|
@ -46,18 +46,18 @@ def kle2json(cli):
|
|||
return False
|
||||
|
||||
# Make sure the user supplied a keyboard
|
||||
if not cli.config.kle2json.keyboard:
|
||||
if not cli.args.keyboard:
|
||||
cli.log.error('You must pass --keyboard or be in a keyboard directory!')
|
||||
cli.print_usage()
|
||||
return False
|
||||
|
||||
# Check for an existing info.json
|
||||
if qmk.path.is_keyboard(cli.config.kle2json.keyboard):
|
||||
kb_info_json = info_json(cli.config.kle2json.keyboard)
|
||||
if qmk.path.is_keyboard(cli.args.keyboard):
|
||||
kb_info_json = info_json(cli.args.keyboard)
|
||||
else:
|
||||
kb_info_json = {
|
||||
"manufacturer": cli.args.manufacturer,
|
||||
"keyboard_name": cli.config.kle2json.keyboard,
|
||||
"keyboard_name": cli.args.keyboard,
|
||||
"maintainer": "",
|
||||
"diode_direction": cli.args.diode,
|
||||
"features": {
|
||||
|
@ -96,8 +96,30 @@ def kle2json(cli):
|
|||
kb_info_json['layouts'][cli.args.layout]['layout'] = kle2qmk(kle)
|
||||
|
||||
# Write our info.json
|
||||
keyboard_dir = qmk.path.keyboard(cli.config.kle2json.keyboard)
|
||||
keyboard_dir = qmk.path.keyboard(cli.args.keyboard)
|
||||
keyboard_dir.mkdir(exist_ok=True, parents=True)
|
||||
info_json_file = keyboard_dir / 'info.json'
|
||||
|
||||
json.dump(kb_info_json, info_json_file.open('w'), indent=4, separators=(', ', ': '), sort_keys=False, cls=InfoJSONEncoder)
|
||||
cli.log.info('Wrote file %s', info_json_file)
|
||||
|
||||
# Generate and write a keymap
|
||||
keymap = [key.get('label', 'KC_NO') for key in kb_info_json['layouts'][cli.args.layout]['layout']]
|
||||
keymap_json = {
|
||||
'version': 1,
|
||||
'documentation': "This file is a QMK Keymap. You can compile it with `qmk compile` or import it at <https://config.qmk.fm>. It can also be used directly with QMK's source code.",
|
||||
'author': '',
|
||||
'keyboard': kb_info_json['keyboard_name'],
|
||||
'keymap': cli.args.keymap,
|
||||
'layout': cli.args.layout,
|
||||
'layers': [
|
||||
keymap,
|
||||
['KC_TRNS' for key in keymap],
|
||||
],
|
||||
}
|
||||
keymap_path = keyboard_dir / 'keymaps' / cli.args.keymap
|
||||
keymap_path.mkdir(exist_ok=True, parents=True)
|
||||
keymap_file = keymap_path / 'keymap.json'
|
||||
|
||||
json.dump(keymap_json, keymap_file.open('w'), indent=4, separators=(', ', ': '), sort_keys=False)
|
||||
cli.log.info('Wrote file %s', keymap_file)
|
||||
|
|
Loading…
Reference in a new issue