process_records.c 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #include "bocaj.h"
  2. #include QMK_KEYBOARD_H
  3. uint16_t copy_paste_timer;
  4. uint16_t grave_layer_timer;
  5. uint16_t heal_layer_timer;
  6. __attribute__ ((weak))
  7. bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
  8. return true;
  9. }
  10. // Defines actions tor my global custom keycodes. Defined in bocaj.h file
  11. // Then runs the _keymap's record handler if not processed here
  12. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  13. switch (keycode) {
  14. case KC_MWRK:
  15. if (!record->event.pressed) {
  16. set_single_persistent_default_layer(_WORKMAN);
  17. #if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE))
  18. set_unicode_input_mode(0);
  19. #endif
  20. layer_move(0);
  21. ergodox_blink_all_leds();
  22. }
  23. break;
  24. case KC_WWRK:
  25. if (!record->event.pressed) {
  26. set_single_persistent_default_layer(_WINWORKMAN);
  27. #if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE))
  28. set_unicode_input_mode(4);
  29. #endif
  30. layer_move(0);
  31. ergodox_blink_all_leds();
  32. }
  33. break;
  34. case KC_MQWR:
  35. if (!record->event.pressed) {
  36. set_single_persistent_default_layer(_QWERTY);
  37. #if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE))
  38. set_unicode_input_mode(0);
  39. #endif
  40. layer_move(0);
  41. ergodox_blink_all_leds();
  42. }
  43. break;
  44. case MC_LOCK:
  45. if (!record->event.pressed) {
  46. layer_move(0);
  47. SEND_STRING(SS_LCTRL(SS_LGUI("q")));
  48. }
  49. break;
  50. case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader
  51. if (!record->event.pressed) {
  52. uint8_t temp_mod = get_mods();
  53. uint8_t temp_osm = get_oneshot_mods();
  54. clear_mods();
  55. clear_oneshot_mods();
  56. if (biton32(default_layer_state) == _WINWORKMAN) {
  57. send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP), 10);
  58. } else {
  59. send_string_with_delay_P(PSTR("util/docker_build.sh " QMK_KEYBOARD ":" QMK_KEYMAP), 10);
  60. }
  61. if (temp_mod & MODS_SHIFT_MASK) {
  62. send_string_with_delay_P(PSTR(":teensy"), 10);
  63. }
  64. if (temp_mod & MODS_CTRL_MASK) {
  65. send_string_with_delay_P(PSTR(" -j8 --output-sync"), 10);
  66. }
  67. send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), 10);
  68. set_mods(temp_mod);
  69. layer_move(0);
  70. }
  71. break;
  72. case KC_DCLR: // reset all Diablo timers, disabling them
  73. #ifdef TAP_DANCE_ENABLE
  74. if (record->event.pressed) {
  75. uint8_t dtime;
  76. for (dtime = 0; dtime < 4; dtime++) {
  77. diablo_key_time[dtime] = diablo_times[0];
  78. }
  79. }
  80. #endif // TAP_DANCE_ENABLE
  81. break;
  82. case JJ_ARRW:
  83. if (!record->event.pressed) {
  84. SEND_STRING("->");
  85. }
  86. return false;
  87. break;
  88. case LM_GRAVE:
  89. if (record->event.pressed) {
  90. grave_layer_timer = timer_read();
  91. } else {
  92. if (timer_elapsed(grave_layer_timer) < TAPPING_TERM) {
  93. uint8_t temp_mod = get_mods();
  94. uint8_t one_shot = get_oneshot_mods();
  95. clear_mods();
  96. if (temp_mod & MODS_SHIFT_MASK || one_shot & MODS_SHIFT_MASK) {
  97. register_code(KC_LSFT);
  98. tap(KC_GRAVE);
  99. unregister_code(KC_LSFT);
  100. } else {
  101. tap(KC_GRAVE);
  102. }
  103. set_mods(temp_mod);
  104. } else {
  105. layer_move(0);
  106. }
  107. }
  108. return false;
  109. break;
  110. case KC_CCCV:
  111. if (record->event.pressed) {
  112. copy_paste_timer = timer_read();
  113. } else {
  114. if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy
  115. SEND_STRING(SS_LGUI("c"));
  116. } else {
  117. SEND_STRING(SS_LGUI("v"));
  118. }
  119. }
  120. return false;
  121. break;
  122. #ifdef UNICODE_ENABLE
  123. case UC_FLIP: // (ノಠ痊ಠ)ノ彡┻━┻
  124. if (record->event.pressed) {
  125. send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B");
  126. }
  127. break;
  128. case UC_TABL: // ┬─┬ノ( º _ ºノ)
  129. if (record->event.pressed) {
  130. send_unicode_hex_string("252C 2500 252C 30CE 0028 0020 00BA 0020 005F 0020 00BA 30CE 0029");
  131. }
  132. break;
  133. case UC_SHRG: // ¯\_(ツ)_/¯
  134. if (record->event.pressed) {
  135. send_unicode_hex_string("00AF 005C 005F 0028 30C4 0029 005F 002F 00AF");
  136. }
  137. break;
  138. case UC_DISA: // ಠ_ಠ
  139. if (record->event.pressed) {
  140. send_unicode_hex_string("0CA0 005F 0CA0");
  141. }
  142. break;
  143. #endif
  144. }
  145. return process_record_keymap(keycode, record);
  146. }