You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
2.8 KiB

  1. #include "konstantin.h"
  2. __attribute__((weak))
  3. void keyboard_pre_init_keymap(void) {}
  4. void keyboard_pre_init_user(void) {
  5. keyboard_pre_init_keymap();
  6. }
  7. __attribute__((weak))
  8. void eeconfig_init_keymap(void) {}
  9. void eeconfig_init_user(void) {
  10. eeconfig_init_keymap();
  11. }
  12. __attribute__((weak))
  13. void keyboard_post_init_keymap(void) {}
  14. void keyboard_post_init_user(void) {
  15. keyboard_post_init_keymap();
  16. }
  17. __attribute__((weak))
  18. bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
  19. return true;
  20. }
  21. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  22. if (!process_record_keymap(keycode, record)) {
  23. return false;
  24. }
  25. switch (keycode) {
  26. uint16_t kc;
  27. #ifdef LAYER_FN
  28. static bool fn_lock = false;
  29. case FNLK:
  30. if (record->event.pressed) {
  31. fn_lock = !IS_LAYER_ON(L_FN); // Fn layer will be toggled after this
  32. }
  33. break;
  34. case FN_FNLK:
  35. if (record->event.pressed && record->tap.count == TAPPING_TOGGLE) {
  36. fn_lock = !IS_LAYER_ON(L_FN);
  37. }
  38. break;
  39. #endif
  40. case KC_ESC:
  41. if (record->event.pressed) {
  42. #ifdef LAYER_NUMPAD // Disable Numpad layer before Fn layer
  43. if (IS_LAYER_ON(L_NUMPAD)) {
  44. layer_off(L_NUMPAD);
  45. return false;
  46. }
  47. #endif
  48. #ifdef LAYER_FN
  49. if (IS_LAYER_ON(L_FN) && fn_lock) {
  50. layer_off(L_FN);
  51. return fn_lock = false;
  52. }
  53. #endif
  54. }
  55. break;
  56. case CLEAR:
  57. if (record->event.pressed) {
  58. CLEAN_MODS(
  59. SEND_STRING(SS_LCTL("a") SS_TAP(X_DELETE));
  60. )
  61. }
  62. break;
  63. case DST_P_R:
  64. kc = (get_mods() & DST_MOD_MASK) ? DST_REM : DST_PRV;
  65. CLEAN_MODS(
  66. (record->event.pressed ? register_code16 : unregister_code16)(kc);
  67. )
  68. break;
  69. case DST_N_A:
  70. kc = (get_mods() & DST_MOD_MASK) ? DST_ADD : DST_NXT;
  71. CLEAN_MODS(
  72. (record->event.pressed ? register_code16 : unregister_code16)(kc);
  73. )
  74. break;
  75. }
  76. return true;
  77. }
  78. __attribute__((weak))
  79. uint32_t layer_state_set_keymap(uint32_t state) {
  80. return state;
  81. }
  82. uint32_t layer_state_set_user(uint32_t state) {
  83. state = layer_state_set_keymap(state);
  84. #ifdef LAYER_NUMPAD
  85. bool numpad = IS_LAYER_ON_STATE(state, L_NUMPAD);
  86. bool num_lock = IS_HOST_LED_ON(USB_LED_NUM_LOCK);
  87. if (numpad != num_lock) {
  88. tap_code(KC_NLCK); // Toggle Num Lock to match Numpad layer state
  89. }
  90. #endif
  91. return state;
  92. }
  93. __attribute__((weak))
  94. void led_set_keymap(uint8_t usb_led) {}
  95. void led_set_user(uint8_t usb_led) {
  96. led_set_keymap(usb_led);
  97. }
  98. __attribute__((weak))
  99. bool led_update_keymap(led_t led_state) {
  100. return true;
  101. }
  102. bool led_update_user(led_t led_state) {
  103. return led_update_keymap(led_state);
  104. }