keymap.c 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. #include "planck.h"
  2. #include "action_layer.h"
  3. #define a KC_A
  4. #define b KC_B
  5. #define c KC_C
  6. #define d KC_D
  7. #define e KC_E
  8. #define f KC_F
  9. #define g KC_G
  10. #define h KC_H
  11. #define i KC_I
  12. #define j KC_J
  13. #define k KC_K
  14. #define l KC_L
  15. #define m KC_M
  16. #define n KC_N
  17. #define o KC_O
  18. #define p KC_P
  19. #define q KC_Q
  20. #define r KC_R
  21. #define s KC_S
  22. #define t KC_T
  23. #define u KC_U
  24. #define v KC_V
  25. #define w KC_W
  26. #define x KC_X
  27. #define y KC_Y
  28. #define z KC_Z
  29. #define lalt KC_LALT
  30. #define lctl KC_LCTL
  31. #define lsft KC_LSFT
  32. #define ralt KC_RALT
  33. #define rctl KC_RCTL
  34. #define rsft KC_RSFT
  35. #define n0 KC_0
  36. #define n1 KC_1
  37. #define n2 KC_2
  38. #define n3 KC_3
  39. #define n4 KC_4
  40. #define n5 KC_5
  41. #define n6 KC_6
  42. #define n7 KC_7
  43. #define n8 KC_8
  44. #define n9 KC_9
  45. #define bspc KC_BSPC
  46. #define caps KC_CAPS
  47. #define comm KC_COMM
  48. #define dash A(KC_MINS)
  49. #define scln KC_SCLN
  50. #define slsh KC_SLSH
  51. #define spc KC_SPC
  52. #define tab KC_TAB
  53. #define del KC_DEL
  54. #define dot KC_DOT
  55. #define ent KC_ENT
  56. #define mins KC_MINS
  57. #define quot KC_QUOT
  58. #define esc KC_ESC
  59. #define gbp A(KC_3)
  60. #define down KC_DOWN
  61. #define home G(KC_LEFT)
  62. #define end G(KC_RGHT)
  63. #define up KC_UP
  64. #define pgdn KC_PGDN
  65. #define pgup KC_PGUP
  66. #define left KC_LEFT
  67. #define rght KC_RGHT
  68. #define tabl G(S(KC_LBRC))
  69. #define tabr G(S(KC_RBRC))
  70. #define fwd G(KC_RBRC)
  71. #define back G(KC_LBRC)
  72. #define dtl C(KC_LEFT)
  73. #define dtr C(KC_RGHT)
  74. #define slup S(A(KC_UP))
  75. #define sldn S(A(KC_DOWN))
  76. #define f1 KC_F1
  77. #define f2 KC_F2
  78. #define f3 KC_F3
  79. #define f4 KC_F4
  80. #define f5 KC_F5
  81. #define f6 KC_F6
  82. #define f7 KC_F7
  83. #define f8 KC_F8
  84. #define f9 KC_F9
  85. #define f10 KC_F10
  86. #define f11 KC_F11
  87. #define f12 KC_F12
  88. #define f13 KC_F13
  89. #define f14 KC_F14
  90. #define f15 KC_F15
  91. #define f16 KC_F16
  92. #define f17 KC_F17
  93. #define f18 KC_F18
  94. #define f19 KC_F19
  95. #define f20 KC_F20
  96. #define mute KC_MUTE
  97. #define next KC_MNXT
  98. #define play KC_MPLY
  99. #define prev KC_MPRV
  100. #define vold KC_F11
  101. #define volu KC_F12
  102. #define symb MO(SYMB)
  103. #define move MO(MOVE)
  104. #define func MO(FUNC)
  105. #define rset RESET
  106. #define powr KC_POWER
  107. #define ____ KC_TRNS
  108. #define xxxx KC_NO
  109. extern keymap_config_t keymap_config;
  110. enum planck_layers {
  111. BASE,
  112. SYMB,
  113. MOVE,
  114. FUNC,
  115. };
  116. enum planck_keycodes {
  117. ampr = SAFE_RANGE,
  118. astr,
  119. at,
  120. bsls,
  121. circ,
  122. dlr,
  123. eql,
  124. exlm,
  125. grv,
  126. hash,
  127. lbrc,
  128. lcbr,
  129. lprn,
  130. perc,
  131. pipe,
  132. plus,
  133. rbrc,
  134. rcbr,
  135. rprn,
  136. tild,
  137. cmd,
  138. };
  139. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  140. [BASE] = LAYOUT_planck_grid(
  141. tab, q, w, f, p, g, j, l, u, y, scln, mins,
  142. bspc, a, r, s, t, d, h, n, e, i, o, quot,
  143. lsft, z, x, c, v, b, k, m, comm, dot, slsh, rsft,
  144. func, lctl, lalt, cmd, move, ent, spc, symb, cmd, ralt, rctl, func
  145. ),
  146. [SYMB] = LAYOUT_planck_grid(
  147. esc, n7, n5, n3, n1, n9, n8, n0, n2, n4, n6, dash,
  148. del, at, dlr, eql, lprn, lbrc, rbrc, rprn, astr, hash, plus, gbp,
  149. caps, grv, pipe, bsls, lcbr, tild, circ, rcbr, ampr, exlm, perc, caps,
  150. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
  151. ),
  152. [MOVE] = LAYOUT_planck_grid(
  153. esc, xxxx, slup, dtl, dtr, xxxx, xxxx, home, up, end, xxxx, xxxx,
  154. del, xxxx, sldn, tabl, tabr, xxxx, xxxx, left, down, rght, xxxx, xxxx,
  155. ____, xxxx, xxxx, back, fwd, xxxx, xxxx, pgdn, pgup, xxxx, xxxx, ____,
  156. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
  157. ),
  158. [FUNC] = LAYOUT_planck_grid(
  159. rset, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, volu,
  160. powr, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, vold,
  161. ____, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, ____,
  162. ____, ____, ____, ____, prev, mute, play, next, ____, ____, ____, ____
  163. ),
  164. };
  165. bool send_string_if_keydown(keyrecord_t *record, const char *s) {
  166. if (record->event.pressed) {
  167. send_string(s);
  168. }
  169. return true;
  170. }
  171. int cmd_keys_down = 0;
  172. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  173. switch (keycode) {
  174. // Override the defualt auto shifted symbols to use SEND_STRING See
  175. // https://github.com/qmk/qmk_firmware/issues/4072
  176. case ampr:
  177. return send_string_if_keydown(record, "&");
  178. case astr:
  179. return send_string_if_keydown(record, "*");
  180. case at:
  181. return send_string_if_keydown(record, "@");
  182. case bsls:
  183. return send_string_if_keydown(record, "\\");
  184. case circ:
  185. return send_string_if_keydown(record, "^");
  186. case dlr:
  187. return send_string_if_keydown(record, "$");
  188. case eql:
  189. return send_string_if_keydown(record, "=");
  190. case exlm:
  191. return send_string_if_keydown(record, "!");
  192. case grv:
  193. return send_string_if_keydown(record, "`");
  194. case hash:
  195. return send_string_if_keydown(record, "#");
  196. case lbrc:
  197. return send_string_if_keydown(record, "[");
  198. case lcbr:
  199. return send_string_if_keydown(record, "{");
  200. case lprn:
  201. return send_string_if_keydown(record, "(");
  202. case perc:
  203. return send_string_if_keydown(record, "%");
  204. case pipe:
  205. return send_string_if_keydown(record, "|");
  206. case plus:
  207. return send_string_if_keydown(record, "+");
  208. case rbrc:
  209. return send_string_if_keydown(record, "]");
  210. case rcbr:
  211. return send_string_if_keydown(record, "}");
  212. case rprn:
  213. return send_string_if_keydown(record, ")");
  214. case tild:
  215. return send_string_if_keydown(record, "~");
  216. // cmd + cmd -> cmd + ctl
  217. case cmd:
  218. if (record->event.pressed) {
  219. if (cmd_keys_down == 0) {
  220. register_code(KC_LCMD);
  221. } else {
  222. register_code(KC_LCTL);
  223. }
  224. cmd_keys_down++;
  225. } else {
  226. if (cmd_keys_down == 1) {
  227. unregister_code(KC_LCMD);
  228. } else {
  229. unregister_code(KC_LCTL);
  230. }
  231. cmd_keys_down--;
  232. }
  233. return true;
  234. }
  235. return true;
  236. }