* `qmk info`: Add `--ascii` flag
* Fix typo
* Force ASCII for Windows/MSYS2
* Make it gooder
* Remove redundant windows check
* ...And this too
* Make pytest work on Windows
* add new qmk generate-api command, to generate a complete set of API data.
* Generate api data and push it to the keyboard repo
* fix typo
* Apply suggestions from code review
Co-authored-by: Joel Challis <git@zvecr.com>
* fixup api workflow
* remove file-changes-action
* use a more mainstream github action
* fix yaml error
* Apply suggestions from code review
Co-authored-by: Erovia <Erovia@users.noreply.github.com>
* more uniform date handling
* make flake8 happy
* Update lib/python/qmk/decorators.py
Co-authored-by: Erovia <Erovia@users.noreply.github.com>
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Erovia <Erovia@users.noreply.github.com>
* Improve ANSI support and --no-color
* tweak when levelname gets stripped of ansi
* sync with latest milc
* make questions work with both milc versions
* pyformat
* 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>
* Improve LAYOUT macro searching
* Apply suggestions from code review
Co-authored-by: Zach White <skullydazed@users.noreply.github.com>
* Adjust signature
* Try to copy the makefile's handling of DEFAULT_FOLDER
* Move it further up, into `info_json()`
* Move it even further up so that keyboard_folder is correct
* Update lib/python/qmk/info.py
Co-authored-by: Zach White <skullydazed@drpepper.org>
* Update lib/python/qmk/info.py
Co-authored-by: Zach White <skullydazed@drpepper.org>
Co-authored-by: Zach White <skullydazed@users.noreply.github.com>
Co-authored-by: Zach White <skullydazed@drpepper.org>
* Consolidate udev rules into a single file
* Update rules in doctor.py
* Simplify doctor rule checking
* Fix errors
* Add TMK "FEED" VID to list of deprecated udev rules
* A comma would be nice
* Split rules back up into bootloaders
* Link to docs page in "missing" case
* Add Pololu VID
* Be more specific about Caterina devices, and add LilyPad PID
* Add `st-flash` flash target
Add support for flashing the firmware via the `st-flash` utility from
the STLink Tools package (https://github.com/stlink-org/stlink).
* Add `st-flash` to the `qmk flash -b` output
* Initial work for consolidation of board files and default ChibiOS configs.
* Migrate F401/F411 black pills for testing.
* Add early init bootloader jump flag.
* Add support for I2C in order to use i2c_scanner keymap.
* Add F401/F411 HSE bypass to get things booting.
* Exempt "hooked" ChibiOS conf files from updater script.
* Fix up ordering for bootloader_defs file check.
* Match previous $(KEYBOARD_PATHS) value for Proton-C, updated for all board configs.
* [kle2jinfo] use min/max instead of if
This is a slight change.
Before, the key_skel would keep the invalid value for future keys.
I think this is what was actually intended.
* [kle2info] calculate x
x is the current_x * key_size + (key_size/2)
y is the current_y * key_size + (key_size/2)
no reason to track both
The list of hidden subcommands were approved by @skullydazed ;)
Currently hidden if 'user.developer' is not True:
- cformat
- docs
- kle2json
- pyformat
- pytest
* CLI: More MSYS2 fixes
Now I can fully setup and work with qmk_firmware on an MSYS2
installation without any errors or exceptions.
* Apply suggestions from code review
Co-Authored-By: skullydazed <skullydazed@users.noreply.github.com>
* Some improvements
* Remove unnecessary import
* Remove slow, unused code
Getting the version from GIT was slow on both Windows and Docker.
Until we find a better, faster way, this is removed.
* remove unused imports
* Implement @vomindoraan's suggestions
* refine how we pick the shell to use
* Apply @fauxpark's suggestions
fauxpark investigated the topic of shells in MSYS2 a bit and we come to the conclusion that the safest bet was to just use the user's shell.
Anything more just opens up more edge-cases than it solves.
Co-Authored-By: Ryan <fauxpark@gmail.com>
* Use `platform_id` in doctor
This will bring it in line with the new code.
Co-authored-by: skullydazed <skullydazed@users.noreply.github.com>
Co-authored-by: skullY <skullydazed@gmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
* Use pathlib everywhere we can
* Improvements based on @erovia's feedback
* rework qmk compile and qmk flash to use pathlib
* style
* Remove the subcommand_name argument from find_keyboard_keymap()
* add experimental decorators
* Create decorators for finding keyboard and keymap based on current directory.
Decorators were inspired by @Erovia's brilliant work on the proof of concept.
* Use pathlib everywhere we can
* Update lib/python/qmk/path.py
Co-Authored-By: Erovia <Erovia@users.noreply.github.com>
* Update lib/python/qmk/path.py
Co-Authored-By: Erovia <Erovia@users.noreply.github.com>
* Improvements based on @erovia's feedback
* rework qmk compile and qmk flash to use pathlib
* style
* Remove the subcommand_name argument from find_keyboard_keymap()
Co-authored-by: Erovia <Erovia@users.noreply.github.com>
Clean up checks and logics that are unnecessary due to MILC updates.
Use pathlib instead of os.path for readability.
Use the 'pytest' keyboard for the tests.
Add community layout for 'handwired/onekey/pytest' so we can test
community layouts.
Instead of using regexes and globbing to find the rules.mk and keymap.c
files, walk the directory tree to find them.
Also, do away with the concept of revision.
The command now return all keymaps that's buildable for a
keyboard/revision. If the base directory of a keyboard does not contain
a 'rules.mk' file, nothing is returned. If the base directory contains a
'keymaps' directory, those keycaps will be returned for every revision.
Commandline args should be merged with the submodule's config.
Compare config values to None instead of False, so empty lines and False
can be used as values.
* MILC: Add support for hidden subcommands
Subcommands with 'hidden=True' will not show up in the help output, but
will work as any other subcommands.
* Hide those hidden submodules, for real now
* Rebase on latest MILC
* Pull in updates for MILC
* Remove the shadow argparser
* Make it easier to reason about arguments and how they're translated into the config tree
* Populate self.config during init to support setting user.qmk_home for the global CLI
* Remove the short argument -c so that we can unambiguously determine the config file location without doing full argument processing
* Remove the --save-config option as it's a little confusing anyway
* Use Pathlib for path manipulation
* Fix commands with no arguments
A new CLI subcommand was added, flash, which behaves very similar to the already present compile CLI comamnd, but with the added ability to target a bootloader. The command is used like so: qmk flash [-h] [-b] [-kb KEYBOARD] [-km KEYMAP] [-bl BOOTLOADER] [filename].
A -kb <keyboard> and -km <keymap> is expected, or a configurator export JSON filename. A bootloader can be specified using -bl <target>, and if left unspecified, the target is assumed to be :flash. -bl can be used to list the available bootloaders.
If -km <keymap> is provided, but no -kb <keyboard>, then a message is printed suggesting the user to run qmk list_keyboards.
* Add initial pass at KLE convert
* Add cli log on convert
* Move kle2xy, add absolute filepath arg support
* Add overwrite flag, and context sensitive conversion
* Update docs/cli.md
* Fix converter.py typo
* Add convert unit test
* Rename to kle2qmk
* Rename subcommand
* Rename subcommand to kle2json
* Change tests to cover rename
* Rename in __init__.py
* Update CLI docs with new subcommand name
* Fix from suggestions in PR #6898
* Help with cases of case sensitivity
* Update cli.md
* Use angle brackets to indicate required option
* Make the output text more accurate
The subcommand functions' name follows the Python convention of using
snake case, but looks odd on the command line.
Fix it by converting underscores to dashes, eg.: list_keyboards ->
list-keyboards.
* CLI command to serve docs locally
* Document it
* Default port
* Use `with` and subclass `SimpleHTTPRequestHandler` to set working dir
* Apply suggestions from code review
Co-Authored-By: skullydazed <skullydazed@users.noreply.github.com>
* Update docs/cli.md
`list_keyboards` replicates the `make list-keyboards` by globbing for all paths
that include `rules.mk` and then removing the paths that include `keymaps`.
This basis of this cli command could be reused in the future as a util, but is
not done so here since this would be the only place that would use it currently
Resolves#6911
This fixes the following issue related to encoding on linux systems. Add
`universal_newlines=True` to subprocess.
<class 'TypeError'>
☒ a bytes-like object is required, not 'str'
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/milc.py", line 564, in __call__
return self.__call__()
File "/usr/local/lib/python3.7/site-packages/milc.py", line 569, in __call__
return self._entrypoint(self)
File "$HOME/qmk_firmware/lib/python/qmk/cli/doctor.py", line 56, in doctor
for line in mm_check.stdout.split('\n'):
TypeError: a bytes-like object is required, not 'str'
* Rework how bin/qmk handles subcommands
* qmk config wip
* Code to show all configs
* Fully working `qmk config` command
* Mark some CLI arguments so they don't pollute the config file
* Fleshed out config support, nicer subcommand support
* sync with installable cli
* pyformat
* Add a test for subcommand_modules
* Documentation for the `qmk config` command
* split config_token on space so qmk config is more predictable
* Rework how subcommands are imported
* Document `arg_only`
* Document deleting from CLI
* Document how multiple operations work
* Add cli config to the doc index
* Add tests for the cli commands
* Make running the tests more reliable
* Be more selective about building all default keymaps
* Update new-keymap to fit the new subcommand style
* Add documentation about writing CLI scripts
* Document new-keyboard
* Update docs/cli_configuration.md
Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
* Update docs/cli_development.md
Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
* Update docs/cli_development.md
Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
* Update docs/cli_development.md
Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
* Address yan's comments.
* Apply suggestions from code review
suggestions from @noahfrederick
Co-Authored-By: Noah Frederick <code@noahfrederick.com>
* Apply suggestions from code review
Co-Authored-By: Noah Frederick <code@noahfrederick.com>
* Remove pip3 from the test runner
* Created python version of new_keymap.sh: new_keymap.py
* Updated usage message
* Updated new_keymap.py to use python3.5+ syntax & be more similar to new_keyboard.sh
* Updated complete message
* Updated usage in argparser and removed incorrect usage_message
* Reverted the fstrings back to strings that use .format() & updated docstring convention
* Added helper to recursively cd .. until at qmk_firmware root directory
* Revert "Added helper to recursively cd .. until at qmk_firmware root directory"
This reverts commit 61a0ff3b25f91901287bec8d58eb51a1f126e2ad.
* Updated new_keymap.py to use printf-style format strings
* First draft lib/python/qmk/cli/new/keymap.py with milc
* Removed shebang & syspath appending lines
* Added optional args & resolved some cr comemnts
* Added a docstring and updated strings
* Script to generate keymap.c from JSON file.
* Support for keymap.json
* Add a warning about the keymap.c getting overwritten.
* Fix keymap generating
* Install the python deps
* Flesh out more of the python environment
* Remove defunct json2keymap
* Style everything with yapf
* Polish up python support
* Hide json keymap.c into the .build dir
* Polish up qmk-compile-json
* Make milc work with positional arguments
* Fix a couple small things
* Fix some errors and make the CLI more understandable
* Make the qmk wrapper more robust
* Add basic QMK Doctor
* Clean up docstrings and flesh them out as needed
* remove unused compile_firmware() function