-
-
Notifications
You must be signed in to change notification settings - Fork 40k
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
0.12.4 breaks typing across tap dance start keys #12445
Comments
Haha, I both fixed and broke nearly the exact same scenario. |
Just a heads up, no need to wrap the commit hashes. Github will do that, and add a link for them, if you just post them. For instance: 765d8a3 |
As those issues have some pretty long conversations, TL;DR: the move was necessary for rolling to Tap Dance keys, Auto Shifted keys, or any other keys that would manually register before When rolling from a Tap Dance (or Auto Shift, if it hadn't accounted for the issue) key, the action is evaluated on the down event of another and so TD/AS must send their key to get it in before the new one and return true. The mod clear should have already happened at that point, as one expects weak mods from the last key to not affect new keypresses. Tap Dance does not clean up after itself like Auto Shift. Upon thinking about it further, IMO this should be fixed in Tap Dance, actually, instead of readding the old clear. Users (and features) should be able to add weak mods for the current record and return true instead of registering the key with the modifier themselves. |
A more interesting question here is: Should weak mods be cleared when a key is physically pressed (which might not actually result in sending any key events to the host), or when QMK is about to send a key press event to the host (which might not even correspond to a physical key press at all)? The current code ties the reset of weak mods to physical key presses (in various places on the processing path), but it seems that at least for weak mods set by Fixing this particular problem by calling |
We definitely can't clear before Why are we clearing on key press anyway? Weak mods should apply to one key, we should clear after Maybe we should have |
Tap dance callbacks may register weak mods; one case when it happens is when a tap dance registers a key with modifiers. When the tap dance is interrupted by pressing another key, these weak mods could affect the interrupting key (normally any stale weak mods are cleared at the start of action_exec() when handling a keypress event, but the tap dance interrupt check code is called later, and the weak mods left by that code were not cleared). Add another clear_weak_mods() call to preprocess_tap_dance() to make sure that the interrupting keypress is not affected by unrelated weak mods from the previous tap dance. Fixes qmk#12445.
…k#12471) Tap dance callbacks may register weak mods; one case when it happens is when a tap dance registers a key with modifiers. When the tap dance is interrupted by pressing another key, these weak mods could affect the interrupting key (normally any stale weak mods are cleared at the start of action_exec() when handling a keypress event, but the tap dance interrupt check code is called later, and the weak mods left by that code were not cleared). Add another clear_weak_mods() call to preprocess_tap_dance() to make sure that the interrupting keypress is not affected by unrelated weak mods from the previous tap dance. Fixes qmk#12445.
…k#12471) Tap dance callbacks may register weak mods; one case when it happens is when a tap dance registers a key with modifiers. When the tap dance is interrupted by pressing another key, these weak mods could affect the interrupting key (normally any stale weak mods are cleared at the start of action_exec() when handling a keypress event, but the tap dance interrupt check code is called later, and the weak mods left by that code were not cleared). Add another clear_weak_mods() call to preprocess_tap_dance() to make sure that the interrupting keypress is not affected by unrelated weak mods from the previous tap dance. Fixes qmk#12445.
…k#12471) Tap dance callbacks may register weak mods; one case when it happens is when a tap dance registers a key with modifiers. When the tap dance is interrupted by pressing another key, these weak mods could affect the interrupting key (normally any stale weak mods are cleared at the start of action_exec() when handling a keypress event, but the tap dance interrupt check code is called later, and the weak mods left by that code were not cleared). Add another clear_weak_mods() call to preprocess_tap_dance() to make sure that the interrupting keypress is not affected by unrelated weak mods from the previous tap dance. Fixes qmk#12445.
…k#12471) Tap dance callbacks may register weak mods; one case when it happens is when a tap dance registers a key with modifiers. When the tap dance is interrupted by pressing another key, these weak mods could affect the interrupting key (normally any stale weak mods are cleared at the start of action_exec() when handling a keypress event, but the tap dance interrupt check code is called later, and the weak mods left by that code were not cleared). Add another clear_weak_mods() call to preprocess_tap_dance() to make sure that the interrupting keypress is not affected by unrelated weak mods from the previous tap dance. Fixes qmk#12445.
…k#12471) Tap dance callbacks may register weak mods; one case when it happens is when a tap dance registers a key with modifiers. When the tap dance is interrupted by pressing another key, these weak mods could affect the interrupting key (normally any stale weak mods are cleared at the start of action_exec() when handling a keypress event, but the tap dance interrupt check code is called later, and the weak mods left by that code were not cleared). Add another clear_weak_mods() call to preprocess_tap_dance() to make sure that the interrupting keypress is not affected by unrelated weak mods from the previous tap dance. Fixes qmk#12445.
Commit
765d8a33d
breaks tap dance in a way where pressing another key outside the tap dance sequence is affected by the modifier that the tap dance is using. Using my configuration as:When typing
öl
quickly, the output instead becomesöø
, i.e. the RALT modifier from the tap dance is applied to the L key, which on the US International layout results inø
. This results in a lot of incorrect characters being sent when typing across keys that begin tap dance sequences.I have verified this by flashing the same config on
58e733b5a
, and then765d8a33d
. On58e733b5a
typing over tap dance keys works just fine, but starting from765d8a33d
tap dance breaks and you start to get a lot of incorrect output.The text was updated successfully, but these errors were encountered: