summaryrefslogtreecommitdiff
path: root/quantum/process_keycode/process_tap_dance.c
AgeCommit message (Collapse)Author
2024-09-07Merge remote-tracking branch 'qmk/master' into merge-2024-09-07Ilya Zhuravlev
2024-07-06Tap dance introspection (#24049)Nick Brassel
2024-04-15Merge remote-tracking branch 'qmk/master' into merge-2024-04-15Ilya Zhuravlev
2023-12-24Align location of tap dance keycode (#22742)Joel Challis
2023-09-08Merge remote-tracking branch 'qmk/master' into merge-2023-09-08Ilya Zhuravlev
2023-07-26On-each-release tap dance function (#20255)leep-frog
Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
2023-07-11process_keycode: remove direct `quantum.h` includes (#21486)Ryan
2023-03-18Merge remote-tracking branch 'qmk/master' into merge-2023-03-12Ilya Zhuravlev
2023-01-20Fix functions with empty params (#19647)Ryan
* Fix functions with empty params * Found a bunch more
2022-12-14Tap Dance: remove `qk_` prefix (#19313)Ryan
2022-10-03Fix layer switching from tap dances by redoing the keymap lookup (#17935)Sergey Vlasov
2022-09-10Merge remote-tracking branch 'qmk/master' into merge-2022-09-10Ilya Zhuravlev
2022-07-11Merge remote-tracking branch 'qmk/master' into merge-2022-07-11Ilya Zhuravlev
2022-06-13tap-dance: Restructure code and document in more detail (#16394)Jouke Witteveen
2022-04-16Add GET_TAPPING_TERM macro to reduce duplicate code (#16681)Jouke Witteveen
* Add GET_TAPPING_TERM macro to reduce duplicate code The macro gives the right tapping term depending on whether per-key tapping terms and/or dynamic tapping terms are enabled. Unnecessary function calls and variable resolution are avoided. Fixes #16472. * Use GET_TAPPING_TERM for Cirque trackpads Co-authored-by: Stefan Kerkmann <karlk90@pm.me>
2022-03-06Merge remote-tracking branch 'qmk/master' into merge-2022-03-06Ilya Zhuravlev
2022-02-12Format code according to conventions (#16322)QMK Bot
2022-02-11Pass in the keyrecord_t of the dual-role/tapping key when calling per-key ↵precondition
tap hold functions (#15938) * Replace keyp by &tapping_key in the record arg of per-key tap hold funcs * Replace NULL by &(keyrecord_t){} in 2nd arg of get_tapping_term
2021-12-11Merge remote-tracking branch 'qmk/master' into merge-2021-12-11Ilya Zhuravlev
2021-10-19Fix type of Tap Dance max index variable (#14887)Drashna Jaelre
2021-10-16vial: process tap dance release early, fix ↵Ilya Zhuravlev
https://github.com/vial-kb/vial-gui/issues/50
2021-09-13Apply `TAP_CODE_DELAY` to Tap Dance key sequences (#14412)Drashna Jaelre
* Add support to tap dances * Move default tap code defines to header file
2021-07-28matrix_scan_x -> x_task (#13748)Joel Challis
2021-04-25Do not leak weak mods from tap dance to the interrupting keypress (#12471)Sergey Vlasov
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 #12445.
2021-01-04Fix Tap-Hold Configs (#11127)Drashna Jaelre
* Add proper prototypes for Tap-Hold Per Key functions * Fix handwired/tennie default keymap * Remove unneeded references * Fix tapping term per key check in space cadet * Pre-emptive fix for tap dance * Fix marksard/leftover30 * Replace hard coded tapping term with define
2020-08-29Update features to use Custom Tapping Term when appropriate (#6259)Drashna Jaelre
* Update Space Cadet to use Custom Tapping Term functionality * Detect correct keycode for space cadet tapping term * Update tap dancing to use global custom tapping term * Update documentation for Tap Dances * formatting pass * Apply suggestions from code review Co-Authored-By: fauxpark <fauxpark@gmail.com> * Update docs/feature_tap_dance.md Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com> * Update for future * Update user keymaps for space cadet * Fix typos * Clean up tapping term stuff * Fix compiler issue if NO_ACTION_TAPPING is enabled Co-authored-by: fauxpark <fauxpark@gmail.com> Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
2019-09-21Generalize Tap Dance Layer functions (#6629)Drashna Jaelre
* made tapdance dual_role general * updated original dual_role functionality * added toggling layer example * Fix dual role and add alias * Update docs about new layer tap dances * Fix up based on feedback
2019-08-30clang-format changesskullY
2018-12-30Register the interrupting keycode in the tap dance state structGiuseppe Rota
2018-10-01Adds default value for TAPPING_TERM if Tap Dance is enabled (#2785)Drashna Jaelre
* Force require TAPPING_TERM if Tap Dance is enabled * Handle lack of TAPPING_TERM more gracefully
2018-07-15Fix tapdance when one-shot is disabled.Joe Wasson
2018-02-04Fixes to get tap dance to fire at proper places (#2272)scauligi
* tap dance fixes: fire immediately upon completion and also get properly interrupted before macros * bugfix for tapdance improvement * fix build
2018-01-12added the possibility to hav shifted(modded) tap dancepmalecka
2017-09-10fix for toggle tap dancePtomerty
2017-08-02tap-dance: key + layer helperGergely Nagy
This adds the `ACTION_TAP_DANCE_DUAL_ROLE` helper, which makes it easy to have keys that act as a key on the first tap, and as a layer toggle on the second. Fixes #1532, reported by @Ptomerty. Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
2017-05-29switched to uint8 and 16Nick Choi
2017-05-25moved specific tap term to its own functionNick Choi
included custom_tapping_term in action struct
2017-05-25Added per case tapping term, updated FF-nikchi keymap.Nick Choi
2017-03-30Worked around some new Makefile issues.nielsenz
2017-03-28Clarify the quantum license (#1042)skullydazed
* Clarify the license for files we have signoff on * Update against the currently signed off files * Remove unused and not clearly licensed headers * Replace an #endif I accidentally removed while resolving merge conflicts
2017-01-29race condition between oneshot_mods and tap_danceSjB
since the keycode for a tap dance process gets process only after the TAPPING_TERM timeout, you really only have ONESHOT_TIMEOUT - TAPPING_TERM time to tap or double tap on the key. This fix save the oneshot_mods into the action.state structure and applies the mods with the keycode when it's registered. It also unregisters the mod when the the tap dance process gets reset.
2016-09-21restore each_tap callbackPavlos Vinieratos
2016-09-01tap-dance: Do not start a sequence on keyupGergely Nagy
There was an odd case, which confused the hell out of tap-dance: suppose you had a number of tap-dance keys, on a layer, and as part of the tap-dance, you turned that layer off - or had it on one-shot to begin with. In this case, the keydown event would trigger the tap-dance key, but the keyup would not. This had two funky consequences: - tap-dance did not correctly register that the dance has ended. - pressing any other tap-dance key would interrupt the previous tap-dance, and potentially input unwanted characters. To fix this, we simply do not start a tap-dance sequence on keyup, only when it is pressed. This way the previous sequence has enough time to time-out and finish properly, and we don't get confused. This fixes algernon/ergodox-layout#107. Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
2016-08-18Add a register/unregister_code16 pair of functionsGergely Nagy
These functions register not only the 8bit keycode, but the modifiers too. It doesn't handle the full range of the upper 8bits, just the mods, but that's a good start. Changed the tap-dance pair functions to use these, so one can do: `ACTION_TAP_DANCE_DOUBLE (KC_COLN, KC_SCLN)` ...and that will do the right thing. Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
2016-08-17tap-dance: Major rework, to make it more reliableGergely Nagy
This reworks how the tap-dance feature works: instead of one global state, we have a state for each tap-dance key, so we can cancel them when another tap-dance key is in flight. This fixes #527. Since we have a state for each key, we can avoid situation where a keyup would mess with our global state. This fixes #563. And while here, we also make sure to fire events only once, and this fixes #574. There is one breaking change, though: tap-dance debugging support was removed, because dumping the whole state would increase the firmware size too much. Any keymap that made use of this, will have to be updated (but there's no such keymap in the repo). Also, there's a nice trick used in this rework: we need to iterate through tap_dance_actions in a few places, to check for timeouts, and so on. For this, we'd need to know the size of the array. We can't discover that at compile-time, because tap-dance gets compiled separately. We'd like to avoid having to terminate the list with a sentinel value, because that would require updates to all keymaps that use the feature. So, we keep track of the highest tap-dance code seen so far, and iterate until that index. Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
2016-08-17tap-dance: Include action_tapping.h for TAPPING_TERMGergely Nagy
Include `action_tapping.h`, so the keymap does not have to define a `TAPPING_TERM` for us, and we can use the default. Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
2016-07-27tap-dance: Add some debugging supportGergely Nagy
Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
2016-07-22tap-dance: Code cleanupGergely Nagy
Removes a number of duplicated code, by passing actions around instead of keycodes, so the various dance action functions do not have to look up the action, but the caller does that for them. Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
2016-07-22tap-dance: Support user_data for the callbacksGergely Nagy
Refactored the code a little, so all callbacks now receive a `user_data` pointer, which can be anything. As an example, the key pairs from `ACTION_TAP_DANCE_DOUBLE` now use this, and custom, built-in functions. This makes it easier to extend the tap dance functionality, and also simplifies the code a little. Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
2016-07-22tap-dance: Support for holding keysGergely Nagy
With this change, tap dance will now store the pressed state of the tap-dance key, and allow one to make an action sooner, while the key is still held, and only unregister when the key is released. The registration must happen in the `on_dance_finished` callback, while unregistering goes to `on_reset`. The surrounding code makes sure not to call either multiple times. Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>