-
-
Notifications
You must be signed in to change notification settings - Fork 39.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Bug] Fast typing can drop characters, or not output the expect char #20318
Comments
That's one really complicated keymap…
This might not be fixable with the current combo implementation. The order of key event processing is as follows:
Your Using Alternatively, you may try using case COMBO_1:
static uint8_t combo_1_layer;
if (record->event.pressed) {
combo_1_layer = get_highest_layer(layer_state);
}
if (combo_1_layer == 0) {
// ... handle press/release on layer 0
} else if (combo_1_layer == 1) {
// ... handle press/release on layer 1
}
break; You need to save the layer state on press separately for each such keycode, so that the release action would match the press action even if the layer state had changed in the meantime. This essentially duplicates the builtin keymap lookup functionality and the source layer cache, but is apparently the only way to apply the layer state set by (Instead of using |
This might be the issue with dropped modifiers on keycodes like |
Just to be sure, this issue involves these keys: #define RTR0 RSFT_T(KC_H)
#define RHI0 LT(1, KC_I) and you are sure to press Both of those keycodes are also involved in some combos (but there is no combo that includes both of them): const uint16_t PROGMEM RTM0_RTR0_combo[] = {RTR0, RTM0, COMBO_END}; // KC_Q
const uint16_t PROGMEM RTI0_RTR0_combo[] = {RTR0, RTI0, COMBO_END}; // KC_Z
const uint16_t PROGMEM RTI0_RTM0_RTR0_combo[] = {RTR0, RTM0, RTI0, COMBO_END}; // KC_BACKSPACE
const uint16_t PROGMEM RHI0_RHM0_combo[] = {RHM0, RHI0, COMBO_END}; // KC_Y
const uint16_t PROGMEM RHI0_RHR0_combo[] = {RHR0, RHI0, COMBO_END}; // KC_M
const uint16_t PROGMEM RHI0_RHM0_RHR0_combo[] = {RHR0, RHM0, RHI0, COMBO_END}; // KC_B |
Correct, that's what I would expect. To be precise, Because of
Thanks. I'll wait for the PR to be merged and will report again if it isn't solved.
It's a fast roll. I can't be 100% sure, but what's is certain is that I always get |
This seems to be fundamentally impossible, because with If you have a limited number of combos which are problematic in that way, you may just replace the outputs of those combos on layer 0 with custom keycodes and then check the layer state to choose the proper action. This would still fail if some combo on layer 1 does not and must not have an equivalent combo on layer 0 - in that case those keys would be handled separately, but their mappings would be taken from layer 1. |
I don't know about QMK internal, but I was expecting a buffer for the inputs, and a decision made once enough information is known. Apparently that is not the case. Some actions are taken while the input is still undetermined. I have probably about a dozen combos. I suppose I can try declaring a combo for each combination. |
That's good to know, I am having this exact same issue, as well as #19449 didn't solved that issue, but #19405 appears to work! |
Describe the Bug
Keyboard configuration available here
Keyboard Used
No response
Link to product page (if applicable)
https://shop.beekeeb.com/product/pre-soldered-hillside-keyboard/
Operating System
Linux (Fedora 37)
qmk doctor Output
Is AutoHotKey / Karabiner installed
Other keyboard-related software installed
None
Additional Context
Board: Hillside46
MCU: Sea-picro controller (RP2040).
The text was updated successfully, but these errors were encountered: