aboutsummaryrefslogtreecommitdiff
path: root/users/konstantin/konstantin.c
diff options
context:
space:
mode:
Diffstat (limited to 'users/konstantin/konstantin.c')
-rw-r--r--users/konstantin/konstantin.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/users/konstantin/konstantin.c b/users/konstantin/konstantin.c
new file mode 100644
index 000000000..977111c1f
--- /dev/null
+++ b/users/konstantin/konstantin.c
@@ -0,0 +1,77 @@
1#include "konstantin.h"
2
3#ifdef LAYER_NUMPAD
4static void toggle_numpad(void) {
5 layer_invert(L_NUMPAD);
6 bool num_lock = host_keyboard_leds() & 1<<USB_LED_NUM_LOCK;
7 if (num_lock != (bool)IS_LAYER_ON(L_NUMPAD)) {
8 tap_code(KC_NLCK); // Toggle Num Lock to match layer state
9 }
10}
11#endif
12
13__attribute__((weak))
14bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
15 return true;
16}
17
18bool process_record_user(uint16_t keycode, keyrecord_t *record) {
19 if (!process_record_keymap(keycode, record)) {
20 return false;
21 }
22
23 switch (keycode) {
24 case CLEAR:
25 if (record->event.pressed) {
26 SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE));
27 }
28 return false;
29
30#ifdef LAYER_FN
31 static bool fn_lock;
32
33 case FN_FNLK:
34 if (record->event.pressed && record->tap.count == TAPPING_TOGGLE) {
35 fn_lock = !IS_LAYER_ON(L_FN); // Fn layer will be toggled after this
36 }
37 return true;
38#endif
39
40#ifdef LAYER_NUMPAD
41 case NUMPAD:
42 if (record->event.pressed) {
43 toggle_numpad();
44 }
45 return false;
46#endif
47
48 case KC_ESC:
49 if (record->event.pressed) {
50#ifdef LAYER_NUMPAD
51 if (IS_LAYER_ON(L_NUMPAD)) {
52 toggle_numpad();
53 return false;
54 }
55#endif
56#ifdef LAYER_FN
57 if (IS_LAYER_ON(L_FN) && fn_lock) {
58 layer_off(L_FN);
59 return fn_lock = false;
60 }
61#endif
62 }
63 return true;
64
65 default:
66 return true;
67 }
68}
69
70__attribute__((weak))
71uint32_t layer_state_set_keymap(uint32_t state) {
72 return state;
73}
74
75uint32_t layer_state_set_user(uint32_t state) {
76 return layer_state_set_keymap(state);
77}