2023-03-23 18:21:37 +01:00
|
|
|
#pragma once
|
|
|
|
|
2024-04-03 01:44:25 +02:00
|
|
|
#include <stdint.h>
|
|
|
|
#include <stdbool.h>
|
|
|
|
#include "action.h"
|
2020-05-09 08:59:50 +02:00
|
|
|
|
|
|
|
typedef enum taphold_mode_t {
|
|
|
|
TAPHOLD_LAYER,
|
|
|
|
TAPHOLD_MOD
|
|
|
|
} taphold_mode_t;
|
|
|
|
|
|
|
|
typedef struct taphold_t {
|
|
|
|
uint16_t key;
|
|
|
|
uint32_t time;
|
|
|
|
taphold_mode_t mode;
|
|
|
|
uint16_t shortAction;
|
|
|
|
uint16_t longAction;
|
|
|
|
keypos_t keypos;
|
|
|
|
// We store key pos to properly release the key
|
|
|
|
// even when a different layer is active and the key has a different action now
|
|
|
|
} taphold_t;
|
|
|
|
|
|
|
|
extern taphold_t taphold_config[];
|
|
|
|
extern uint16_t taphold_config_size;
|
|
|
|
// Dual keys tap/hold timeout.
|
|
|
|
// If key is tapped for less than this value, send key in addition to primary action after completing the action.
|
|
|
|
extern uint32_t taphold_timeout;
|
|
|
|
|
|
|
|
bool taphold_process(uint16_t keycode, keyrecord_t *record);
|