mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-07-19 22:22:03 +00:00
add support for writing a default keymap with 2 layers
This commit is contained in:
parent
0f8b34771d
commit
88cfd3554a
@ -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('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('--vid', arg_only=True, default='0x03A8', help='USB VID (Default: 0x03A8)')
|
||||||
@cli.argument('--pid', arg_only=True, default='0x0000', help='USB PID.')
|
@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('-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('-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('-kb', '--keyboard', arg_only=True, required=True, help='The folder name for the keyboard')
|
||||||
@cli.argument('-d', '--diode', arg_only=True, default='COL2ROW', help='The diode direction for the keyboard. (COL2ROW, ROW2COL)')
|
@cli.argument('-km', '--keymap', arg_only=True, default='default', help='The name of the keymap to write (Default: default)')
|
||||||
@cli.subcommand('Use a KLE layout to build info.json and a default keymap', hidden=False if cli.config.user.developer else True)
|
@cli.argument('-d', '--diode', arg_only=True, default='COL2ROW', help='The diode direction for the keyboard (COL2ROW, ROW2COL)')
|
||||||
@automagic_keyboard
|
@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):
|
def kle2json(cli):
|
||||||
"""Convert a KLE layout to QMK's layout format.
|
"""Convert a KLE layout to QMK's layout format.
|
||||||
"""
|
"""
|
||||||
@ -46,18 +46,18 @@ def kle2json(cli):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
# Make sure the user supplied a keyboard
|
# 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.log.error('You must pass --keyboard or be in a keyboard directory!')
|
||||||
cli.print_usage()
|
cli.print_usage()
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# Check for an existing info.json
|
# Check for an existing info.json
|
||||||
if qmk.path.is_keyboard(cli.config.kle2json.keyboard):
|
if qmk.path.is_keyboard(cli.args.keyboard):
|
||||||
kb_info_json = info_json(cli.config.kle2json.keyboard)
|
kb_info_json = info_json(cli.args.keyboard)
|
||||||
else:
|
else:
|
||||||
kb_info_json = {
|
kb_info_json = {
|
||||||
"manufacturer": cli.args.manufacturer,
|
"manufacturer": cli.args.manufacturer,
|
||||||
"keyboard_name": cli.config.kle2json.keyboard,
|
"keyboard_name": cli.args.keyboard,
|
||||||
"maintainer": "",
|
"maintainer": "",
|
||||||
"diode_direction": cli.args.diode,
|
"diode_direction": cli.args.diode,
|
||||||
"features": {
|
"features": {
|
||||||
@ -96,8 +96,30 @@ def kle2json(cli):
|
|||||||
kb_info_json['layouts'][cli.args.layout]['layout'] = kle2qmk(kle)
|
kb_info_json['layouts'][cli.args.layout]['layout'] = kle2qmk(kle)
|
||||||
|
|
||||||
# Write our info.json
|
# 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)
|
keyboard_dir.mkdir(exist_ok=True, parents=True)
|
||||||
info_json_file = keyboard_dir / 'info.json'
|
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)
|
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)
|
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 New Issue
Block a user