29 lines
		
	
	
	
		
			783 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			29 lines
		
	
	
	
		
			783 B
		
	
	
	
		
			C
		
	
	
	
	
	
#pragma once
 | 
						|
 | 
						|
#include <stdint.h>
 | 
						|
#include <stdbool.h>
 | 
						|
#include "action.h"
 | 
						|
 | 
						|
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);
 |