keymap.c 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. #include QMK_KEYBOARD_H
  2. #define MAXEMOJITAPS 80
  3. //declarations for tap dancing emojis
  4. void register_hex32(uint32_t hex);
  5. void cycleEmojis(qk_tap_dance_state_t *state, void *user_data);
  6. void cycleAnimals(qk_tap_dance_state_t *state, void *user_data);
  7. void cycleFoods(qk_tap_dance_state_t *state, void *user_data);
  8. void cycleEtc(qk_tap_dance_state_t *state, void *user_data);
  9. void cycleAll(qk_tap_dance_state_t *state, void *user_data);
  10. void tap(uint16_t keycode){
  11. register_code(keycode);
  12. unregister_code(keycode);
  13. };
  14. //Tap Dance Declarations
  15. enum taps{
  16. TD_CTCPS = 0,
  17. EMOJIS,
  18. ANIMAL,
  19. HAND,
  20. MEMES,
  21. COPA,
  22. ALLS
  23. };
  24. enum unicode_name {
  25. EMOTIS = 1,//80, //1F60x - 1F64x
  26. ANIMALS, //64, //1F40x - 1F43x
  27. SYMBOLS,// = 45, //1F300 - 1F32C
  28. FOODS,// = 87 , //1F32D -
  29. ETC,// = 192, //1F44x -1F4Fx
  30. VEHICLES,// = 83, //1F68x - 1F6Dx
  31. SUPPLEMENT,// = 32, //1F91x-1F92x
  32. ALCHEMY,// = 116 //1F70x - 1F773
  33. };
  34. enum my_macros {
  35. NEWDESK = 0,
  36. LEFTDESK,
  37. RIGHTDESK,
  38. CLOSEDESK
  39. };
  40. // Tap Dance Definitions
  41. qk_tap_dance_action_t tap_dance_actions[] = {
  42. // Tap once for CTRL, twice for Caps Lock
  43. [TD_CTCPS] = ACTION_TAP_DANCE_DOUBLE(KC_LCTL, KC_CAPS),
  44. [COPA] = ACTION_TAP_DANCE_DOUBLE(LCTL(KC_C), LCTL(KC_V)),
  45. [EMOJIS] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleEmojis, NULL, NULL, 800),
  46. [ANIMAL] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleAnimals, NULL, NULL, 800),
  47. //[SYMBOLS] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleSymbols, NULL, NULL, 800),
  48. [FOODS] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleFoods, NULL, NULL, 800),
  49. [ETC] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleEtc, NULL, NULL, 800),
  50. //[VEHICLES] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleVehicles, NULL, NULL, 800),
  51. //[SUPPLEMENT] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleSupplement, NULL, NULL, 800),
  52. [ALLS] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleAll, NULL, NULL, 800)
  53. // Other declarations would go here, separated by commas, if you have them
  54. };
  55. // macros
  56. const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
  57. switch(id) {
  58. case NEWDESK: // this would trigger when you hit a key mapped as M(0)
  59. if (record->event.pressed) {
  60. return MACRO( I(1), D(LGUI), D(LCTL), D(D), U(LGUI), U(LCTL), U(D), END ); // NEW DESKTOP
  61. }
  62. break;
  63. case LEFTDESK: // this would trigger when you hit a key mapped as M(0)
  64. if (record->event.pressed) {
  65. return MACRO( I(1), D(LGUI), D(LCTL), D(LEFT), U(LGUI), U(LCTL), U(LEFT), END ); // LEFT DESKTOP
  66. }
  67. break;
  68. case RIGHTDESK: // this would trigger when you hit a key mapped as M(0)
  69. if (record->event.pressed) {
  70. return MACRO( I(1), D(LGUI), D(LCTL), D(RGHT), U(LGUI), U(LCTL), U(RGHT), END ); // RIGHT DESKTOP
  71. }
  72. break;
  73. case CLOSEDESK: // this would trigger when you hit a key mapped as M(0)
  74. if (record->event.pressed) {
  75. return MACRO( I(1), D(LGUI), D(LCTL), D(F4), U(LGUI), U(LCTL), U(F4), END ); // CLOSE DESKTOP
  76. }
  77. break;
  78. }
  79. return MACRO_NONE;
  80. };
  81. // emojis in unicode
  82. const uint32_t PROGMEM unicode_map[] = {
  83. [EMOTIS] = 0x1F600,
  84. [ANIMALS] = 0x1F400,
  85. [SYMBOLS] = 0x1F300,
  86. [FOODS] = 0x1F32D,
  87. [ETC] = 0x1F440,
  88. [VEHICLES] = 0x1F680,
  89. [SUPPLEMENT] = 0x1F910,
  90. [ALCHEMY] = 0x1F700
  91. };
  92. // Layouts
  93. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  94. [0] = LAYOUT(\
  95. KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
  96. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
  97. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, \
  98. KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \
  99. KC_LSPO, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
  100. TD(TD_CTCPS), KC_LGUI, KC_LALT, KC_SPC, KC_LEAD, KC_RGUI, KC_APP, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT \
  101. ),
  102. [1] = LAYOUT(\
  103. TD(ALLS), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
  104. KC_GRV, TD(EMOJIS), TD(ANIMAL), TD(ETC), TD(FOODS), KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_MPRV, KC_MPLY, KC_MNXT, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
  105. KC_TAB, KC_Q, M(0), KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_UP, KC_RBRC, KC_BSLS, KC_MUTE, KC_VOLD, KC_VOLU, KC_P7, KC_P8, KC_P9, KC_PPLS, \
  106. KC_LCTL, M(1), M(3), M(2), KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_LEFT, KC_RGHT, KC_ENT, KC_P4, KC_P5, KC_P6, \
  107. KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_DOWN, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3, KC_PENT, \
  108. KC_BTN1, KC_BTN3, KC_BTN2, KC_SPC, KC_RALT, KC_RGUI, TG(2), _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_P0, KC_PDOT \
  109. ),
  110. [2] = LAYOUT(\
  111. KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
  112. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_MPRV, KC_MPLY, KC_MNXT, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
  113. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_MUTE, KC_VOLD, KC_VOLU, KC_P7, KC_P8, KC_P9, KC_PPLS, \
  114. KC_LCTL, KC_D, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \
  115. KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3, KC_PENT, \
  116. KC_BTN1, KC_BTN3, KC_BTN2, KC_SPC, KC_RALT, KC_RGUI, TG(2), KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_P0, KC_PDOT \
  117. ),
  118. };
  119. LEADER_EXTERNS();
  120. void matrix_scan_user(void) {
  121. LEADER_DICTIONARY() {
  122. leading = false;
  123. leader_end();
  124. SEQ_TWO_KEYS(KC_A, KC_A) { // select all and copy
  125. register_code(KC_LCTL);
  126. tap(KC_A);
  127. tap(KC_C);
  128. unregister_code(KC_LCTL);
  129. }
  130. }
  131. }
  132. void matrix_init_user(void) {
  133. _delay_ms(500);
  134. set_unicode_input_mode(UC_WINC);
  135. };
  136. void cycleAll(qk_tap_dance_state_t *state, void *user_data) {
  137. if(state->count == 1) {
  138. unicode_input_start();
  139. register_hex32(pgm_read_dword(&unicode_map[EMOTIS]));
  140. unicode_input_finish();
  141. }
  142. else if(state->count <= 1642) {
  143. tap(KC_BSPC);
  144. unicode_input_start();
  145. register_hex32(pgm_read_dword(&unicode_map[1])+state->count);
  146. unicode_input_finish();
  147. }
  148. };
  149. void cycleEmojis(qk_tap_dance_state_t *state, void *user_data) {
  150. if(state->count == 1) {
  151. unicode_input_start();
  152. register_hex32(pgm_read_dword(&unicode_map[EMOTIS]));
  153. unicode_input_finish();
  154. }
  155. else if(state->count <= 80) {
  156. tap(KC_BSPC);
  157. unicode_input_start();
  158. register_hex32(pgm_read_dword(&unicode_map[EMOTIS])+state->count);
  159. unicode_input_finish();
  160. }
  161. };
  162. void cycleAnimals(qk_tap_dance_state_t *state, void *user_data) {
  163. if(state->count == 1) {
  164. unicode_input_start();
  165. register_hex32(pgm_read_dword(&unicode_map[ANIMALS]));
  166. unicode_input_finish();
  167. }
  168. else if(state->count <= MAXEMOJITAPS) {
  169. tap(KC_BSPC);
  170. unicode_input_start();
  171. register_hex32(pgm_read_dword(&unicode_map[ANIMALS])+state->count);
  172. unicode_input_finish();
  173. }
  174. };
  175. void cycleFoods(qk_tap_dance_state_t *state, void *user_data) {
  176. if(state->count == 1) {
  177. unicode_input_start();
  178. register_hex32(pgm_read_dword(&unicode_map[FOODS]));
  179. unicode_input_finish();
  180. }
  181. else if(state->count <= 87) {
  182. tap(KC_BSPC);
  183. unicode_input_start();
  184. register_hex32(pgm_read_dword(&unicode_map[FOODS])+state->count);
  185. unicode_input_finish();
  186. }
  187. };
  188. void cycleEtc(qk_tap_dance_state_t *state, void *user_data) {
  189. if(state->count == 1) {
  190. unicode_input_start();
  191. register_hex32(pgm_read_dword(&unicode_map[ETC]));
  192. unicode_input_finish();
  193. }
  194. else if(state->count <= MAXEMOJITAPS) {
  195. tap(KC_BSPC);
  196. unicode_input_start();
  197. register_hex32(pgm_read_dword(&unicode_map[ETC])+state->count);
  198. unicode_input_finish();
  199. }
  200. };