]> git.donarmstrong.com Git - qmk_firmware.git/blob - users/konstantin/konstantin.c
DO NOT USE Merge branch 'master' into debounce_refactor
[qmk_firmware.git] / users / konstantin / konstantin.c
1 #include "konstantin.h"
2
3 #ifdef LAYER_NUMPAD
4 static 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))
14 bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
15   return true;
16 }
17
18 bool 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))
71 uint32_t layer_state_set_keymap(uint32_t state) {
72   return state;
73 }
74
75 uint32_t layer_state_set_user(uint32_t state) {
76   return layer_state_set_keymap(state);
77 }