import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.B9AX-CPi.js"; const __pageData = JSON.parse('{"title":"QMK Breaking Changes - 2022 November 26 Changelog","description":"","frontmatter":{},"headers":[],"relativePath":"ChangeLog/20221126.md","filePath":"ChangeLog/20221126.md","lastUpdated":null}'); const _sfc_main = { name: "ChangeLog/20221126.md" }; const _hoisted_1 = /* @__PURE__ */ createStaticVNode('

QMK Breaking Changes - 2022 November 26 Changelog

Notable Features

Autocorrect (#15699)

@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).

Changes Requiring User Action

Updated Keyboard Codebases

The following keyboards have had their source moved within QMK:

Old Keyboard NameNew Keyboard Name
converter/numeric_keypad_IIeconverter/numeric_keypad_iie
durgod/k3x0/k310durgod/k310
durgod/k3x0/k320durgod/k320
emptystring/NQGemptystring/nqg
handwired/hillside/46hillside/46
handwired/hillside/48hillside/48
handwired/hillside/52hillside/52
maple_computing/christmas_tree/V2017maple_computing/christmas_tree/v2017

Keycodes refactoring

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.

Configuration Item Refactoring

A number of configuration items have been renamed for consistency.

RGB Matrix configuration:

Old ConfigNew Config
DRIVER_LED_COUNTRGB_MATRIX_LED_COUNT
RGB_DISABLE_TIMEOUTRGB_MATRIX_TIMEOUT
RGB_MATRIX_STARTUP_HUERGB_MATRIX_DEFAULT_HUE
RGB_MATRIX_STARTUP_MODERGB_MATRIX_DEFAULT_MODE
RGB_MATRIX_STARTUP_SATRGB_MATRIX_DEFAULT_SAT
RGB_MATRIX_STARTUP_SPDRGB_MATRIX_DEFAULT_SPD
RGB_MATRIX_STARTUP_VALRGB_MATRIX_DEFAULT_VAL

LED Matrix configuration:

Old ConfigNew Config
DRIVER_LED_COUNTLED_MATRIX_LED_COUNT
LED_DISABLE_TIMEOUTLED_MATRIX_TIMEOUT
LED_MATRIX_STARTUP_MODELED_MATRIX_DEFAULT_MODE
LED_MATRIX_STARTUP_SPDLED_MATRIX_DEFAULT_SPD
LED_MATRIX_STARTUP_VALLED_MATRIX_DEFAULT_VAL

Joystick configuration:

Old ConfigNew Config
JOYSTICK_AXES_COUNTJOYSTICK_AXIS_COUNT
JOYSTICK_AXES_RESOLUTIONJOYSTICK_AXIS_RESOLUTION

Data-driven USB IDs Refactoring (#18152)

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:

c
#define VENDOR_ID    0x1234\n#define PRODUCT_ID   0x5678\n#define DEVICE_VER   0x0001\n#define MANUFACTURER Me\n#define PRODUCT      MyKeyboard

Replaced by info.json:

json
{\n    "keyboard_name": "MyKeyboard",\n    "manufacturer": "Me",\n    "usb": {\n        "vid": "0x1234",\n        "pid": "0x5678",\n        "device_version": "0.0.1"\n    }\n}

LED Indicator callback refactoring (#14864)

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:

c
void rgb_matrix_indicators_user(void) {\n    // keymap LED code\n}

...but the new RGB Matrix keymap code looks like this:

c
bool rgb_matrix_indicators_user(void) {\n    // keymap LED code\n    return false;\n}

Keyboard designers should now structure their keyboard-level routines like the following, in order to allow for keymap overrides:

c
bool rgb_matrix_indicators_kb(void) {\n    // Defer to the keymap if they want to override\n    if (!rgb_matrix_indicators_user()) { return false; }\n\n    // keyboard LED code\n    return true;\n}

The equivalent transformations should be done for LED Matrix boards.

Unicode mode refactoring

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.

Notable core changes

This breaking changes cycle, a lot of the core changes are related to cleanup and refactoring -- commonly called "tech debt".

Keycodes refactoring

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:

Board Converters

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.

Pointing and Digitizer device updates

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!

Full changelist

Core:

CLI:

Submodule updates:

Keyboards:

Keyboard fixes:

Others:

Bugs:

', 66); const _hoisted_67 = [ _hoisted_1 ]; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("div", null, _hoisted_67); } const _20221126 = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]); export { __pageData, _20221126 as default };