2020-03-10 13:51:19 -07:00
"""Generate a keymap.c from a configurator export.
"""
import json
from milc import cli
import qmk.keymap
import qmk.path
2020-03-12 11:17:43 -07:00
@cli.argument ( '-o' , '--output' , arg_only = True , type = qmk . path . normpath , help = 'File to write to' )
2020-03-10 13:51:19 -07:00
@cli.argument ( '-q' , '--quiet' , arg_only = True , action = 'store_true' , help = "Quiet mode, only output error messages" )
2021-02-07 21:02:51 +00:00
@cli.argument ( 'filename' , type = qmk . path . FileType ( 'r' ), arg_only = True , help = 'Configurator JSON file' )
2020-03-10 13:51:19 -07:00
@cli.subcommand ( 'Creates a keymap.c from a QMK Configurator export.' )
def json2c ( cli ):
"""Generate a keymap.c from a configurator export.
This command uses the `qmk.keymap` module to generate a keymap.c from a configurator export. The generated keymap is written to stdout, or to a file if -o is provided.
"""
2020-12-29 20:34:48 +01:00
try :
2021-02-07 21:02:51 +00:00
# Parse the configurator from json file (or stdin)
user_keymap = json . load ( cli . args . filename )
2020-12-29 20:34:48 +01:00
except json . decoder . JSONDecodeError as ex :
cli . log . error ( 'The JSON input does not appear to be valid.' )
cli . log . error ( ex )
2020-10-07 10:46:10 +11:00
return False
2020-05-26 17:43:33 +02:00
2020-03-10 13:51:19 -07:00
# Environment processing
2020-05-26 17:43:33 +02:00
if cli . args . output and cli . args . output . name == '-' :
2020-03-10 13:51:19 -07:00
cli . args . output = None
# Generate the keymap
2020-10-25 14:48:44 -07:00
keymap_c = qmk . keymap . generate_c ( user_keymap [ 'keyboard' ], user_keymap [ 'layout' ], user_keymap [ 'layers' ])
2020-03-10 13:51:19 -07:00
if cli . args . output :
cli . args . output . parent . mkdir ( parents = True , exist_ok = True )
if cli . args . output . exists ():
2021-02-28 20:19:07 +00:00
cli . args . output . replace ( cli . args . output . parent / ( cli . args . output . name + '.bak' ))
2020-03-10 13:51:19 -07:00
cli . args . output . write_text ( keymap_c )
if not cli . args . quiet :
cli . log . info ( 'Wrote keymap to %s .' , cli . args . output )
else :
print ( keymap_c )