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 " )
@cli.argument ( ' filename ' , arg_only = True , help = ' Configurator JSON file ' )
@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.
"""
cli . args . filename = qmk . path . normpath ( cli . args . filename )
# Error checking
if not cli . args . filename . exists ( ) :
cli . log . error ( ' JSON file does not exist! ' )
cli . print_usage ( )
exit ( 1 )
if str ( cli . args . filename ) == ' - ' :
# TODO(skullydazed/anyone): Read file contents from STDIN
cli . log . error ( ' Reading from STDIN is not (yet) supported. ' )
cli . print_usage ( )
exit ( 1 )
# Environment processing
if cli . args . output == ( ' - ' ) :
cli . args . output = None
# Parse the configurator json
with cli . args . filename . open ( ' r ' ) as fd :
user_keymap = json . load ( fd )
# Generate the keymap
keymap_c = qmk . keymap . generate ( user_keymap [ ' keyboard ' ] , user_keymap [ ' layout ' ] , user_keymap [ ' layers ' ] )
if cli . args . output :
cli . args . output . parent . mkdir ( parents = True , exist_ok = True )
if cli . args . output . exists ( ) :
cli . args . output . replace ( cli . args . output . name + ' .bak ' )
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 )