docs/ChangeLog/20230528.md
As per last breaking changes cycle, there has been a lot of emphasis on behind-the-scenes changes, mainly around migration of configurables into info.json files, cleanup of info.json files, additional layout definitions for keyboards, adding support for general community layouts to keyboards, as well as addressing technical debt.
Of note for keyboard designers:
info.json are now mandatory for merge into QMK.
<yourkeyboard>.h are no longer accepted into QMK Firmware."w":1 or "h":1 if the key size is 1 -- w/h should only be present for sizes other than 1config_common.h has been removed and should not be present anywhere in your keyboard code.RGB_DI_PIN will now cause an error during build:
info.json: "ws2812": { "pin": "xxx" }info.json: "apa102": { "data_pin": "xxx" }encoder_map should now have the following change made:
encoder_map[][NUM_ENCODERS][2] => encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS]2 referred to the number of encoders, rather than the number of directions (which is always 2)A new pair of keys has been added to QMK -- namely QK_REPEAT_KEY and QK_ALT_REPEAT_KEY (shortened: QK_REP/QK_AREP). These allow you to repeat the last key pressed, or in the case of the alternate key, press the "opposite" of the last key. For example, if you press KC_LEFT, pressing QK_REPEAT_KEY afterwards repeats KC_LEFT, but pressing QK_ALT_REPEAT_KEY instead sends KC_RIGHT.
The full list of default alternate keys is available on the Repeat Key documentation.
To enable these keys, in your keymap's rules.mk, add:
REPEAT_KEY_ENABLE = yes
...and add them to your keymap.
Two new boolean callback functions, pre_process_record_kb and pre_process_record_user, have been added. They are called at the beginning of process_record, right before process_combo.
Similar to existing *_kb and *_user callback functions, returning false will halt further processing of key events. The pre_process_record_user function will allow user space opportunity to handle or capture an input before it undergoes quantum processing. For example, while action tapping is still resolving the tap or hold output of a mod-tap key, pre_process_record_user can capture the next key record of an input event that follows. That key record can be used to influence the decision of the mod-tap key that is currently undergoing quantum processing.
Several build targets for the IBM Model M were cluttered in different folders. The maintainers of several Model M replacement controller projects agreed to consolidate them under one common folder.
The list of all moved keyboard locations is listed below.
IGNORE_MOD_TAP_INTERRUPT behaviour changes (#20211) {#i-m-t-i}Following up from the last breaking changes cycle, IGNORE_MOD_TAP_INTERRUPT has been removed and if present in keymap code, will now fail to build. The previous functionality for IGNORE_MOD_TAP_INTERRUPT is now default, and should you wish to revert to the old behaviour, you can use HOLD_ON_OTHER_KEY_PRESS instead.
For more information, you are invited to read the section on HOLD_ON_OTHER_KEY_PRESS in the page on Tap-Hold configuration options.
| Old Keyboard Name | New Keyboard Name |
|---|---|
| ashpil/modelm_usbc | ibm/model_m/ashpil_usbc |
| binepad/bn009r2 | binepad/bn009/r2 |
| converter/modelm101 | ibm/model_m/teensypp |
| converter/modelm101_teensy2 | ibm/model_m/teensy2 |
| converter/modelm_ssk | ibm/model_m_ssk/teensypp_ssk |
| durgod/dgk6x/hades | durgod/dgk6x/hades_ansi |
| handwired/ibm122m | ibm/model_m_122/ibm122m |
| jacky_studio/piggy60/hotswap | jacky_studio/piggy60/rev1/hotswap |
| jacky_studio/piggy60/solder | jacky_studio/piggy60/rev1/solder |
| kamigakushi | jaykeeb/kamigakushi |
| massdrop/thekey | drop/thekey/v1 |
| massdrop/thekey_v2 | drop/thekey/v2 |
| mschwingen/modelm | ibm/model_m/mschwingen |
| tronguylabs/m122_3270 | ibm/model_m_122/m122_3270 |
| tronguylabs/m122_3270/blackpill | ibm/model_m_122/m122_3270/blackpill |
| tronguylabs/m122_3270/bluepill | ibm/model_m_122/m122_3270/bluepill |
| tronguylabs/m122_3270/teensy | ibm/model_m_122/m122_3270/teensy |
| yugo_m/model_m_101 | ibm/model_m/yugo_m |
For keyboards who have not yet been migrated to encoder map, a default set of encoder functionality is now enabled, gracefully degrading functionality depending on which flags are enabled by the keyboard:
EXTRAKEY_ENABLE is enabled by the keyboard, the encoder will be mapped to KC_VOLU/KC_VOLDMOUSEKEY_ENABLE is enabled by the keyboard, the encoder will be mapped to KC_MS_WH_UP/KC_MS_WH_DOWNKC_PGDN/KC_PGUP will be usedAdditionally, this ensures that builds on QMK Configurator produce some sort of usable encoder mapping.
The "classic" OLED driver picked up support for additional sizes of OLED displays, support for the SH1107 controller, and SPI-based OLED support.
Other configurable items are available and can be found on the OLED Driver page.
Core:
keyevent_t for 1ms timing resolution (#15847)mcu_selection.mk (#20150)rgblight.pin and RGB_DI_PIN to ws2812.pin (#20303)pre_process_record_kb() before process_combo() (#20969)CLI:
qmk info (#20234)qmk find: usability improvements (#20440)qmk format-json: Expose full key path and respect sort_keys (#20836)Submodule updates:
Keyboards:
"w":1 and "h":1 from info.json (#19961)USE_I2C blocks in keyboard headers (#20084)QMK_KEYBOARD_H (#20167)keychron keymap rules.mk cleanup (#20168)RGB_DI_PIN ifdefs (#20218)WS2812_DRIVER to data driven (#20248)default layouts to data driven (#20349)RGB_MATRIX_DRIVER to data driven (#20350)LAYOUTs to data driven (#20365)LAYOUTs to data driven (#20422)LAYOUT_alls to data driven (#20430)60_ansi, 60_hhkb and 60_iso layouts to data driven (#20438)LAYOUT_alls to data driven (#20463)ekow/akira (#20474)FLIP_HALF layouts and move to data driven (#20588)FORCE_NKRO to data driven (#20604)USB_MAX_POWER_CONSUMPTION to data driven (#20648)info.json whitespace cleanups (#20651)info.json whitespace cleanups (#20665)dactyl_manuform variants (#20688)info.json whitespace cleanups (#20703)thekey to Drop vendor folder (#21032)Keyboard fixes:
#pragma onces (#20241)nack. (#20292)via keymap (#20475)music_map (#20634)test_json2c_no_json() (#20756)Others:
Bugs:
g_led_config (#19954)qmk info: account for ISO enter when calculating layout X offset (#20325)KEEP_INTERMEDIATES=yes. (#20339)qmk info - Remove printing of "Keyboard Folder" (#21033)