add achordion config

This commit is contained in:
Christoph Cullmann 2023-10-02 20:51:37 +02:00
parent d1f1e184f5
commit 7d77543667
2 changed files with 30 additions and 14 deletions

View file

@ -35,5 +35,5 @@
// Enable rapid switch from tap to hold, disables double tap hold auto-repeat. // Enable rapid switch from tap to hold, disables double tap hold auto-repeat.
#define QUICK_TAP_TERM 0 #define QUICK_TAP_TERM 0
// allow that thumb buttons have permissive hold, see keymap.h // use permissive hold together with achordion
#define PERMISSIVE_HOLD_PER_KEY #define PERMISSIVE_HOLD

View file

@ -71,16 +71,32 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
}; };
bool get_permissive_hold(uint16_t keycode, keyrecord_t *record) { #include "achordion.h"
switch (keycode) {
case LT(_SYM, KC_SCLN): bool process_record_user(uint16_t keycode, keyrecord_t* record) {
case LT(_NUM, KC_SPC): if (!process_achordion(keycode, record)) { return false; }
case LT(_NAV, KC_E):
case LT(_FN, KC_MINS):
// Immediately select the hold action when another key is tapped.
return true; return true;
default: }
// Do not select the hold action when another key is tapped.
return false; void matrix_scan_user(void) {
} achordion_task();
}
// Returns true if `pos` on the left hand of the keyboard, false if right.
static bool on_left_hand(keypos_t pos) {
// works not really on planck for bottom row, but we handle that differently
return pos.row < MATRIX_ROWS / 2;
}
bool achordion_chord(uint16_t tap_hold_keycode,
keyrecord_t* tap_hold_record,
uint16_t other_keycode,
keyrecord_t* other_record) {
// Also allow same-hand holds when the other key is in the rows below the
// alphas. I need the `% (MATRIX_ROWS / 2)` because my keyboard is split.
if (other_record->event.key.row % (MATRIX_ROWS / 2) >= 3) { return true; }
// Otherwise, follow the opposite hands rule.
return on_left_hand(tap_hold_record->event.key) !=
on_left_hand(other_record->event.key);
} }