blob: 9e3caca414783cd944139882a78d61df849b0518 (
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
#include "konstantin.h"
__attribute__((weak))
void keyboard_pre_init_keymap(void) {}
void keyboard_pre_init_user(void) {
keyboard_pre_init_keymap();
}
__attribute__((weak))
void eeconfig_init_keymap(void) {}
void eeconfig_init_user(void) {
eeconfig_init_keymap();
}
__attribute__((weak))
void keyboard_post_init_keymap(void) {}
void keyboard_post_init_user(void) {
keyboard_post_init_keymap();
}
__attribute__((weak))
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
return true;
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (!process_record_keymap(keycode, record)) {
return false;
}
switch (keycode) {
case CLEAR:
if (record->event.pressed) {
SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE));
}
return false;
case DST_P_R:
(record->event.pressed ? register_code16 : unregister_code16)(
(get_mods() & DST_MOD_MASK) ? DST_REM : DST_PRV
);
return false;
case DST_N_A:
(record->event.pressed ? register_code16 : unregister_code16)(
(get_mods() & DST_MOD_MASK) ? DST_ADD : DST_NXT
);
return false;
#ifdef LAYER_FN
static bool fn_lock;
case FN_FNLK:
if (record->event.pressed && record->tap.count == TAPPING_TOGGLE) {
fn_lock = !IS_LAYER_ON(L_FN); // Fn layer will be toggled after this
}
return true;
#endif
case KC_ESC:
if (record->event.pressed) {
#ifdef LAYER_NUMPAD // Disable Numpad layer before Fn layer
if (IS_LAYER_ON(L_NUMPAD)) {
layer_off(L_NUMPAD);
return false;
}
#endif
#ifdef LAYER_FN
if (IS_LAYER_ON(L_FN) && fn_lock) {
layer_off(L_FN);
return fn_lock = false;
}
#endif
}
return true;
default:
return true;
}
}
__attribute__((weak))
uint32_t layer_state_set_keymap(uint32_t state) {
return state;
}
uint32_t layer_state_set_user(uint32_t state) {
state = layer_state_set_keymap(state);
#ifdef LAYER_NUMPAD
bool numpad = state & 1UL<<L_NUMPAD;
bool num_lock = IS_HOST_LED_ON(USB_LED_NUM_LOCK);
if (numpad != num_lock) {
tap_code(KC_NLCK); // Toggle Num Lock to match Numpad layer state
}
#endif
return state;
}
|