bb-macro.c 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. /* Copyright 2021 Batuhan Başerdem
  2. * <baserdem.batuhan@gmail.com> @bbaserdem
  3. *
  4. * This program is free software: you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation, either version 2 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. */
  17. #include "bb-macro.h"
  18. /* MACRO Definitions
  19. * This file has my macros/unicodes
  20. * Hooks for other functionality to inject itself into the process_record
  21. */
  22. // Tap dance definitons
  23. #ifdef AUDIO_ENABLE
  24. #ifdef TAP_DANCE_ENABLE
  25. qk_tap_dance_action_t tap_dance_actions[] = {
  26. // Music playback speed modulator
  27. [TD_AUDIO_TEMPO] = ACTION_TAP_DANCE_DOUBLE(MU_SLOW, MU_FAST),
  28. };
  29. #endif // AUDIO_ENABLE
  30. #endif // TAP_DANCE_ENABLE
  31. // Unicode definitions; for single character keys
  32. // We mask their definitions if unicode is not enabled
  33. #ifdef UNICODEMAP_ENABLE
  34. const uint32_t PROGMEM unicode_map[] = {
  35. [UPC_A_CIRC] = 0x00C2, [LOW_A_CIRC] = 0x00E2, // Â â
  36. [UPC_C_CEDI] = 0x00C7, [LOW_C_CEDI] = 0x00E7, // Ç ç
  37. [UPC_G_BREV] = 0x011E, [LOW_G_BREV] = 0x001F, // Ğ ğ
  38. [UPC_I_CIRC] = 0x00CE, [LOW_I_CIRC] = 0x00EE, // Î î
  39. [UPC_I_DOTL] = 0x0049, [LOW_I_DOTL] = 0x0131, // I ı
  40. [UPC_I_DOTT] = 0x0130, [LOW_I_DOTT] = 0x0069, // İ i
  41. [UPC_O_DIAE] = 0x00D6, [LOW_O_DIAE] = 0x00F6, // Ö ö
  42. [UPC_S_CEDI] = 0x015E, [LOW_S_CEDI] = 0x015F, // Ş ş
  43. [UPC_U_CIRC] = 0x00DB, [LOW_U_CIRC] = 0x00FB, // Û û
  44. [UPC_U_DIAE] = 0x00DC, [LOW_U_DIAE] = 0x00FC, // Ü ü
  45. [UPC_ALPHA] = 0x0391, [LOW_ALPHA] = 0x03B1, // Α α
  46. [UPC_BETA] = 0x0392, [LOW_BETA] = 0x03B2, // Β β
  47. [UPC_GAMMA] = 0x0393, [LOW_GAMMA] = 0x03B3, // Γ γ
  48. [UPC_DELTA] = 0x0394, [LOW_DELTA] = 0x03B4, // Δ δ
  49. [UPC_EPSILON] = 0x0395, [LOW_EPSILON] = 0x03B5, // Ε ε
  50. [UPC_ZETA] = 0x0396, [LOW_ZETA] = 0x03B6, // Ζ ζ
  51. [UPC_ETA] = 0x0397, [LOW_ETA] = 0x03B7, // Η η
  52. [UPC_THETA] = 0x0398, [LOW_THETA] = 0x03B8, // Θ θ
  53. [UPC_IOTA] = 0x0399, [LOW_IOTA] = 0x03B9, // Ι ι
  54. [UPC_KAPPA] = 0x039A, [LOW_KAPPA] = 0x03BA, // Κ κ
  55. [UPC_LAMBDA] = 0x039B, [LOW_LAMBDA] = 0x03BB, // Λ λ
  56. [UPC_MU] = 0x039C, [LOW_MU] = 0x03BC, // Μ μ
  57. [UPC_NU] = 0x039D, [LOW_NU] = 0x03BD, // Ν ν
  58. [UPC_XI] = 0x039E, [LOW_XI] = 0x03BE, // Ξ ξ
  59. [UPC_OMICRON] = 0x039F, [LOW_OMICRON] = 0x03BF, // Ο ο
  60. [UPC_PI] = 0x03A0, [LOW_PI] = 0x03C0, // Π π
  61. [UPC_RHO] = 0x03A1, [LOW_RHO] = 0x03C1, // Ρ ρ
  62. [UPC_SIGMA] = 0x03A3, [LOW_SIGMA] = 0x03C3, // Σ σ
  63. [UPC_TAU] = 0x03A4, [LOW_TAU] = 0x03C4, // Τ τ
  64. [UPC_UPSILON] = 0x03A5, [LOW_UPSILON] = 0x03C5, // Υ υ
  65. [UPC_PHI] = 0x03A6, [LOW_PHI] = 0x03C6, // Φ φ
  66. [UPC_CHI] = 0x03A7, [LOW_CHI] = 0x03C7, // Χ χ
  67. [UPC_PSI] = 0x03A8, [LOW_PSI] = 0x03C8, // Ψ ψ
  68. [UPC_OMEGA] = 0x03A9, [LOW_OMEGA] = 0x03C9, // Ω ω
  69. [ELLIPSIS] = 0x2026, // …
  70. [PLANCK_CON] = 0x210F, // ℏ
  71. [ANGSTROM] = 0x212B, // Å
  72. [BITCOIN] = 0x20BF // ₿
  73. };
  74. #endif // UNICODEMAP_ENABLE
  75. // Keycodes
  76. bool process_record_macro(uint16_t keycode, keyrecord_t *record) {
  77. switch (keycode) {
  78. // AltGr + Caps should change the oled layout variable
  79. case KC_CAPSLOCK:
  80. if (record->event.pressed) {
  81. if (get_mods() & MOD_BIT(KC_RALT)) {
  82. userspace_config.layout = (userspace_config.layout + 1) % 3;
  83. }
  84. }
  85. return true;
  86. break;
  87. case BB_OLED:
  88. if (record->event.pressed) {
  89. if (get_mods() & MOD_MASK_SHIFT) {
  90. // Scroll in opposite direction
  91. userspace_config.layout = (userspace_config.layout + 4) % 3;
  92. } else {
  93. userspace_config.layout = (userspace_config.layout + 1) % 3;
  94. }
  95. }
  96. return false;
  97. break;
  98. // Plain macros
  99. case BB_PGPK:
  100. // My public PGP key
  101. if (record->event.pressed) {
  102. SEND_STRING("0B7151C823559DD8A7A04CE36426139E2F4C6CCE");
  103. }
  104. return false; break;
  105. case DBL_ANG:
  106. // Double angular bracket
  107. if (record->event.pressed) {
  108. SEND_STRING("<>"SS_TAP(X_LEFT));
  109. }
  110. return false; break;
  111. case DBL_PAR:
  112. // Double paranthesis
  113. if (record->event.pressed) {
  114. SEND_STRING("()"SS_TAP(X_LEFT));
  115. }
  116. return false; break;
  117. case DBL_BRC:
  118. // Double square brackets
  119. if (record->event.pressed) {
  120. SEND_STRING("[]"SS_TAP(X_LEFT));
  121. }
  122. return false; break;
  123. case DBL_CBR:
  124. // Double curly brackets
  125. if (record->event.pressed) {
  126. SEND_STRING("{}"SS_TAP(X_LEFT));
  127. }
  128. return false; break;
  129. // Unicode macros
  130. # ifdef UNICODEMAP_ENABLE
  131. case TR_FLAG:
  132. // Turkish flag
  133. if (record->event.pressed) {
  134. send_unicode_string("🇹🇷");
  135. }
  136. return false; break;
  137. case BB_LENY:
  138. // Lenny face: ( ͡° ͜ʖ ͡°)
  139. if (record->event.pressed) {
  140. send_unicode_string("( ͡° ͜ʖ ͡°)");
  141. }
  142. return false; break;
  143. case BB_TABL:
  144. // Table flip: ┻━┻︵ \(°□°)/ ︵ ┻━┻
  145. if (record->event.pressed) {
  146. send_unicode_string("┻━┻︵ \\(°□°)/ ︵ ┻━┻");
  147. }
  148. return false; break;
  149. # endif // UNICODEMAP_ENABLE
  150. }
  151. return true;
  152. }