docs/ChangeLog/20221126.md
@getreuer in their infinite wisdom decided that autocorrect was a feature needed by QMK. As is customary, @drashna adapted it to core and got it into a state that everyone else can use it. See Feature: Autocorrect for more ifnormation (grin).
The following keyboards have had their source moved within QMK:
| Old Keyboard Name | New Keyboard Name |
|---|---|
| converter/numeric_keypad_IIe | converter/numeric_keypad_iie |
| durgod/k3x0/k310 | durgod/k310 |
| durgod/k3x0/k320 | durgod/k320 |
| emptystring/NQG | emptystring/nqg |
| handwired/hillside/46 | hillside/46 |
| handwired/hillside/48 | hillside/48 |
| handwired/hillside/52 | hillside/52 |
| maple_computing/christmas_tree/V2017 | maple_computing/christmas_tree/v2017 |
QMK's keycodes got a very significant overhaul this breaking changes cycle, with the bulk of the work done by @zvecr and @fauxpark -- renaming, reordering, removing has been their focus in this area. In an attempt to standardise interoperation with host applications, keycode values now have strong versioning so that any connected application has confidence that the keys it thinks exist on the board actually match up with what's compiled in. These strongly-versioned keycode definitions are now published online and will not change, so tools that remap keycodes have a reference to work with. In future versions of QMK, any new or changed keycodes will result in a new version specification. See API docs for more information on the published versions if you're writing a tool to manage keycodes.
In most cases user keymaps in the repository have already been updated to reflect the new naming scheme. In some cases user keymaps outside the repository may strike a missing keycode with the old name -- it's highly likely that the name had already been deprecated for some time, and should have been updated previously.
See below for the full list of changesets.
::: warning Keycode aliases have been put in place in most cases to cater for "old names" being mapped to "new names" -- the documentation already reflects all the new naming of keys. :::
A number of configuration items have been renamed for consistency.
RGB Matrix configuration:
| Old Config | New Config |
|---|---|
| DRIVER_LED_COUNT | RGB_MATRIX_LED_COUNT |
| RGB_DISABLE_TIMEOUT | RGB_MATRIX_TIMEOUT |
| RGB_MATRIX_STARTUP_HUE | RGB_MATRIX_DEFAULT_HUE |
| RGB_MATRIX_STARTUP_MODE | RGB_MATRIX_DEFAULT_MODE |
| RGB_MATRIX_STARTUP_SAT | RGB_MATRIX_DEFAULT_SAT |
| RGB_MATRIX_STARTUP_SPD | RGB_MATRIX_DEFAULT_SPD |
| RGB_MATRIX_STARTUP_VAL | RGB_MATRIX_DEFAULT_VAL |
LED Matrix configuration:
| Old Config | New Config |
|---|---|
| DRIVER_LED_COUNT | LED_MATRIX_LED_COUNT |
| LED_DISABLE_TIMEOUT | LED_MATRIX_TIMEOUT |
| LED_MATRIX_STARTUP_MODE | LED_MATRIX_DEFAULT_MODE |
| LED_MATRIX_STARTUP_SPD | LED_MATRIX_DEFAULT_SPD |
| LED_MATRIX_STARTUP_VAL | LED_MATRIX_DEFAULT_VAL |
Joystick configuration:
| Old Config | New Config |
|---|---|
| JOYSTICK_AXES_COUNT | JOYSTICK_AXIS_COUNT |
| JOYSTICK_AXES_RESOLUTION | JOYSTICK_AXIS_RESOLUTION |
QMK has decided to deprecate the specification of USB IDs inside config.h in favour of info.json, leaving data-driven as the only method to specify USB information. As per the deprecation schedule put forward last breaking changes cycle, USB information must be specified in info.json instead.
Previously in config.h:
#define VENDOR_ID 0x1234
#define PRODUCT_ID 0x5678
#define DEVICE_VER 0x0001
#define MANUFACTURER Me
#define PRODUCT MyKeyboard
Replaced by info.json:
{
"keyboard_name": "MyKeyboard",
"manufacturer": "Me",
"usb": {
"vid": "0x1234",
"pid": "0x5678",
"device_version": "0.0.1"
}
}
RGB Matrix and LED Matrix Indicator display code was traditionally difficult to override in keymaps as they did not follow the standard pattern of bool *_kb() deferring to bool *_user() functions, allowing signalling to the higher level that processing had already been done.
This changes the standard callback model to allow for a base implementation to be provided by a keyboard, but also still allow for keymap-level overrides without needing to modify the keyboard's code.
The old RGB Matrix keymap code went something like this:
void rgb_matrix_indicators_user(void) {
// keymap LED code
}
...but the new RGB Matrix keymap code looks like this:
bool rgb_matrix_indicators_user(void) {
// keymap LED code
return false;
}
Keyboard designers should now structure their keyboard-level routines like the following, in order to allow for keymap overrides:
bool rgb_matrix_indicators_kb(void) {
// Defer to the keymap if they want to override
if (!rgb_matrix_indicators_user()) { return false; }
// keyboard LED code
return true;
}
The equivalent transformations should be done for LED Matrix boards.
Unicode modes were renamed in order to prevent collision with equivalent keycodes. The available values for UNICODE_SELECTED_MODES changed -- see Feature: Unicode for the new list of values and how to configure them.
This breaking changes cycle, a lot of the core changes are related to cleanup and refactoring -- commonly called "tech debt".
We aren't going to list each and every change -- they're far too numerous -- instead, we'll just list the related PRs in order to convey just how wide-reaching these changes were:
CAPS_WORD/CAPSWRD for CW_TOGG (#18834)KC_LEAD for QK_LEAD (#18792)KC_LOCK for QK_LOCK (#18796)KEY_OVERRIDE_* keycodes for KO_* (#18843)ONESHOT_* keycodes for QK_ONE_SHOT_* (#18844)SECURE_* keycodes for QK_SECURE_* (#18847)VLK_TOG for VK_TOGG (#18807)KC_DELT (#18882)UNICODE_KEY_OSX and UC_OSX (#18290)There was additional work in the space of board converters -- historically QMK allowed for "converting" a Pro Micro build to a QMK Proton-C build. The last few versions of QMK have added support for replacement boards much like the Proton-C, and this quarter was no exception:
See Feature: Converters for the full list of board conversions available.
Both pointing devices and digitizer got a host of updates this cycle. Inertia, automatic mouse layers, fixes for preventing sleep... you even get more buttons with digitizers!
Core:
TAP_CODE_DELAY for encoder mapping by default. Add docs. (#18098)UNICODE_KEY_OSX and UC_OSX (#18290)DRIVER_LED_COUNT to {LED,RGB}_MATRIX_LED_COUNT (#18399){LED,RGB}_DISABLE_TIMEOUT to {LED,RGB}_MATRIX_TIMEOUT (#18415)nano USE flag (#18527)get_u16_str instead of snprintf in autoshift_timer_report (#18606)send_extra (#18615)KC_LEAD for QK_LEAD (#18792)KC_LOCK for QK_LOCK (#18796)VLK_TOG for VK_TOGG (#18807)CAPS_WORD/CAPSWRD for CW_TOGG (#18834)KEY_OVERRIDE_* keycodes for KO_* (#18843)ONESHOT_* keycodes for QK_ONE_SHOT_* (#18844)SECURE_* keycodes for QK_SECURE_* (#18847)KC_DELT (#18882)RGB_MATRIX_STARTUP_* defines to RGB_MATRIX_DEFAULT_* (#19079)LED_MATRIX_STARTUP_* defines to LED_MATRIX_DEFAULT_* (#19080)CLI:
usb.device_ver (#18259)Submodule updates:
Keyboards:
DRIVER_LED_TOTAL references (#18475)DRIVER_LED_TOTAL references (#18594)DRIVER_LED_TOTAL references (#18662)UNUSED_PINS defines (#18940)manufacturer fields (#19065)Keyboard fixes:
handwired/swiftrax/walter: fix layout mismatch (#18974)pizzakeyboards/pizza65: fix layouts (#18979)cannonkeys/db60/hotswap: fix layouts (#18982)handwired/swiftrax/cowfish: fix layouts (#18984)mechlovin/adelais/standard_led/avr/rev1: fix layout (#18997)gboards/gergoplex: fix matrix pins (#18999)DRIVER_LED_TOTAL defines to RGB_MATRIX_LED_COUNT (#19089)mouse_report_t (which doesnt exist) (#19107)Others:
Bugs:
bluetooth.driver rules.mk mapping (#18205)EXTRAKEY_ENABLE ifdefs for send_extra() (#18249)RGB_MATRIX_INDICATOR_SET_COLOR (#18650)keyboard.jsonschema. (#19059)