forked from qmk/qmk_firmware
-
Notifications
You must be signed in to change notification settings - Fork 395
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
Showing
10 changed files
with
382 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
#include QMK_KEYBOARD_H | ||
#include "audio.h" | ||
|
||
/* THIS FILE WAS GENERATED AND IS EXPERIMENTAL! | ||
* | ||
* This file was generated by qmk-compile-json. You may or may not want to | ||
* edit it directly. | ||
*/ | ||
|
||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||
[0] = LAYOUT(KC_ENTER) | ||
}; | ||
|
||
void encoder_update_user(uint8_t index, bool clockwise) { | ||
if (index == 0) { | ||
if (clockwise) { | ||
tap_code(KC_UP); | ||
} else { | ||
tap_code(KC_DOWN); | ||
} | ||
} | ||
|
||
}; |
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,3 @@ | ||
{ | ||
"documentation": "This file is a keymap.json file for handwired/onekey/pytest" | ||
} |
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.