summaryrefslogtreecommitdiffstats
path: root/users/ericgebhart/extensions/oneshot.h
blob: 774dc4ab39a0b0f14e25206a42f0148920f65103 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#define ENABLE_ONESHOT
#ifdef ENABLE_ONESHOT
#pragma once

typedef enum {
  ONESHOT_LCTL = 0,
  ONESHOT_LSFT = 1,
  ONESHOT_LALT = 2,
  ONESHOT_LGUI = 3,
  ONESHOT_RCTL = 4,
  ONESHOT_RSFT = 5,
  ONESHOT_RALT = 6,
  ONESHOT_RGUI = 7,
  ONESHOT_NONE = 8,
  ONESHOT_MOD_COUNT = 8,
} oneshot_mod;


// This function should be called inside proces_record_user and does everything needed to get one shot modifiers working.
// Returns true if the keycode needs further handling, false otherwise.
int8_t update_oneshot_modifiers(uint16_t keycode, keyrecord_t *record, int8_t keycode_consumed);
int8_t turnoff_oneshot_modifiers(void);

// TO BE IMPLEMENTED BY THE USER
// This function should return one of the oneshot_mod enumerations (see keymap.c implementation)
oneshot_mod get_modifier_for_trigger_key(uint16_t keycode);

// TO BE IMPLEMENTED BY THE USER
// This function should return true for keycodes that must be ignored in the oneshot modifier behaviour.
// You probably want to ignore layer keys. Trigger keys don't need to be specified here.
bool is_oneshot_modifier_ignored_key(uint16_t keycode);

// TO BE IMPLEMENTED BY THE USER
// This function should return true for keycodes that should reset all oneshot modifiers.
bool is_oneshot_modifier_cancel_key(uint16_t keycode);

#endif