forked from qmk/qmk_firmware
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Basic keymap parsing finally works * Add 'keymap.json' creation to the qmk.keymap module * Add tests and fix formatting * Fix/exclude flake8 errors * Convert keymap.c to valid keymap.json * Fix some errors * Add tests * Finalize keymap.json creation, add json template * Add docs * Move pygments to the standard requirements * Add support for nameless layers, fix tests * Fix things after rebase * Add missing 'keymap' value. * Fix missing layer numbers from advanced keycodes Buckwich noticed that if the advanced keycode / layer toggling key contains a number, it goes missing. Now we properly handle them. Thx for noticing! * Apply suggestions from code review * fixup tests Co-authored-by: Zach White <skullydazed@drpepper.org> Co-authored-by: skullY <skullydazed@gmail.com>
- Loading branch information
1 parent
df32b83
commit aef040d
Showing
9 changed files
with
367 additions
and
35 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
"""Generate a keymap.json from a keymap.c file. | ||
""" | ||
import json | ||
import sys | ||
|
||
from milc import cli | ||
|
||
import qmk.keymap | ||
import qmk.path | ||
|
||
|
||
@cli.argument('--no-cpp', arg_only=True, action='store_false', help='Do not use \'cpp\' on keymap.c') | ||
@cli.argument('-o', '--output', arg_only=True, type=qmk.path.normpath, help='File to write to') | ||
@cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages") | ||
@cli.argument('-kb', '--keyboard', arg_only=True, required=True, help='The keyboard\'s name') | ||
@cli.argument('-km', '--keymap', arg_only=True, required=True, help='The keymap\'s name') | ||
@cli.argument('filename', arg_only=True, help='keymap.c file') | ||
@cli.subcommand('Creates a keymap.json from a keymap.c file.') | ||
def c2json(cli): | ||
"""Generate a keymap.json from a keymap.c file. | ||
This command uses the `qmk.keymap` module to generate a keymap.json from a keymap.c file. 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('C 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 keymap.c | ||
keymap_json = qmk.keymap.c2json(cli.args.keyboard, cli.args.keymap, cli.args.filename, use_cpp=cli.args.no_cpp) | ||
|
||
# Generate the keymap.json | ||
try: | ||
keymap_json = qmk.keymap.generate(keymap_json['keyboard'], keymap_json['layout'], keymap_json['layers'], type='json', keymap=keymap_json['keymap']) | ||
except KeyError: | ||
cli.log.error('Something went wrong. Try to use --no-cpp.') | ||
sys.exit(1) | ||
|
||
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(json.dumps(keymap_json)) | ||
|
||
if not cli.args.quiet: | ||
cli.log.info('Wrote keymap to %s.', cli.args.output) | ||
|
||
else: | ||
print(json.dumps(keymap_json)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.