keymap.c 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958
  1. #include QMK_KEYBOARD_H
  2. #include "debug.h"
  3. #include "action_layer.h"
  4. #include "keymap_japanese.h"
  5. static uint16_t start;
  6. #define BASE 0 // EN layer
  7. #define JP 1 // Japanese
  8. #define JPXON 2 // JP + Fn
  9. #define JPKAZARI 3 // JP + KAZARI
  10. #define JPTOPROW 4 // JP + TOPROW
  11. #define JPTRKZ 5 // JP + TOPROW + KAZARI
  12. #define NUM 6 // Numbers
  13. #define CTLSHFT 1
  14. #define CUTCOPY 2
  15. //kana macro definitions start here
  16. #define JPVU 4
  17. #define JPNU 6
  18. #define JPKO 7
  19. #define JPSA 8
  20. #define JPKE 9
  21. #define JPHE 10
  22. #define JPSHI 11
  23. #define JPKA 12
  24. #define JPKI 13
  25. #define JPSU 14
  26. #define JPSO 15
  27. #define JPHI 16
  28. #define JPCHI 17
  29. #define JPFU 18
  30. #define JPSE 19
  31. #define JPTSU 20
  32. #define JPKU 21
  33. #define JPTE 22
  34. #define JPTA 23
  35. #define JPTO 24
  36. #define JPHA 25
  37. #define JPHO 26
  38. #define JPXKE 27
  39. #define JPXU 28
  40. #define JPXKA 29
  41. #define JPXA 30
  42. #define JPXO 31
  43. #define JPGO 32
  44. #define JPZA 33
  45. #define JPGE 34
  46. #define JPBE 35
  47. #define JPYU 36
  48. #define JPJI 37
  49. #define JPGA 38
  50. #define JPGI 39
  51. #define JPZU 40
  52. #define JPZO 41
  53. #define JPBI 42
  54. #define JPDI 43
  55. #define JPZE 44
  56. #define JPDU 45
  57. #define JPGU 46
  58. #define JPYA 47
  59. #define JPYO 48
  60. #define JPDE 49
  61. #define JPDA 50
  62. #define JPDO 51
  63. #define JPBA 52
  64. #define JPBO 53
  65. #define JPRI 54
  66. #define JPRE 55
  67. #define JPRA 56
  68. #define JPNA 57
  69. #define JPNO 58
  70. #define JPMI 59
  71. #define JPMU 60
  72. #define JPME 61
  73. #define JPNE 62
  74. #define JPMA 63
  75. #define JPXTU 64
  76. #define JPWA 65
  77. #define JPRU 66
  78. #define JPWO 67
  79. #define JPNI 68
  80. #define JPNN 69
  81. #define JPMO 70
  82. #define JPRO 71
  83. #define JPXE 72
  84. #define JPXI 73
  85. #define JPXYU 74
  86. #define JPXYA 75
  87. #define JPXYO 76
  88. #define JPPE 77
  89. #define JPPU 78
  90. #define JPPI 79
  91. #define JPPA 80
  92. #define JPPO 81
  93. #define JPBU 82
  94. // kana macro definitions end here
  95. #define SHIFT 86
  96. #define KAZARI 87
  97. #define JPFN 88 //shifts to JPXON layer
  98. #define TOJPLOUT 89
  99. #define TOENL 90
  100. #define TOJPL 91
  101. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  102. /* Keymap 0: Basic layer
  103. *
  104. *
  105. * ,----------------------------------------------------. ,--------------------------------------------------.
  106. * | En / 和 | | ^ | % | | |Selall| | Undo | | $ | @ | LT | UP | RT |
  107. * |----------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  108. * | Tab | Q | D | R | W | B | Cut | | PgUP | J | F | U | P | DN | \ |
  109. * |----------+------+------+------+------+------| Copy | | |------+------+------+------+------+--------|
  110. * | / | A | S | H | T | G |------| |------| Y | N | E | O | I | , |
  111. * |----------+------+------+------+------+------|Paste | | PgDN |------+------+------+------+------+--------|
  112. * | Ctl+Shft | Z | X | M | C | V | | | | . | L | K | ' | ? | tmux |
  113. * `----------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  114. * | LCtrl | LGui | Alt| _ | Esc | |MouseL|MouseR| - | ~ | Ctrl |
  115. * `------------------------------------' `----------------------------------'
  116. * ,-------------. ,-------------.
  117. * |MidMs | Del | | VolUp| Mute |
  118. * ,------|------|------| |------+--------+------.
  119. * | | | | | VolDn| | |
  120. * | Space| Shift|------| |------| Backsp |Enter |
  121. * | | | Num | | Esc | | |
  122. * `--------------------' `----------------------'
  123. *
  124. *
  125. * tmux prefix set to C-b
  126. *
  127. */
  128. // If it accepts an argument (i.e, is a function), it doesn't need KC_.
  129. // Otherwise, it needs KC_*
  130. [BASE] = LAYOUT_ergodox( // layer 0 : default
  131. // left hand
  132. M(TOJPLOUT), KC_NO, KC_EQL, LSFT(KC_5), KC_NO, KC_NO, LCTL(KC_A),
  133. KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, M(CUTCOPY),
  134. KC_SLSH, KC_A, KC_S, KC_H, KC_T, KC_G,
  135. M(CTLSHFT), KC_Z, KC_X, KC_M, KC_C, KC_V, LCTL(KC_V),
  136. KC_RCTL, KC_LGUI, KC_LALT,JP_UNDS,KC_LCTL,
  137. KC_BTN3, KC_DEL,
  138. KC_NO,
  139. KC_SPC,KC_LSFT,MO(NUM),
  140. // right hand
  141. LCTL(KC_Z), KC_NO, LSFT(KC_4), JP_AT, KC_LEFT, KC_UP, KC_RIGHT,
  142. KC_PGUP, KC_J, KC_F, KC_U, KC_P, KC_DOWN, LSFT(KC_3),
  143. KC_Y, KC_N, KC_E, KC_O, KC_I, KC_COMMA,
  144. KC_PGDN, KC_DOT, KC_L, KC_K, LSFT(KC_7), KC_QUES, LCTL(KC_B),
  145. KC_BTN1, KC_BTN2,KC_MINS,JP_TILD, KC_RCTL,
  146. KC_VOLU, KC_MUTE,
  147. KC_VOLD,
  148. KC_SPC,KC_BSLS, KC_ENT
  149. ),
  150. /* Keymap 1: Japanese
  151. *
  152. * ,--------------------------------------------------. ,--------------------------------------------------.
  153. * | En / 和| | | | | | | | | | | | | | |
  154. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  155. * | |   nu | ko | sa | he | ke | | | | fu | se | tsu | ku | | |
  156. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  157. * | | to | shi | ka | ki | su |------| |------| a | ha | te | ta | u | |
  158. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  159. * | | mu | so | hi | chi | me | | | | | ma | ho | i | | |
  160. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  161. * | | | | | | | | | | | |
  162. * `----------------------------------' `----------------------------------'
  163. * ,-------------. ,-------------.
  164. * | | | | | |
  165. * ,------|------|------| |------+------+------.
  166. * | | | | | | | |
  167. * | shift| fn |------| |------| |kazari|
  168. * | | | Num | | | | |
  169. * `--------------------' `--------------------'
  170. *
  171. *
  172. *
  173. */
  174. [JP] = LAYOUT_ergodox(
  175. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  176. KC_TRNS, M(JPNU), M(JPKO), M(JPSA), M(JPHE), M(JPKE), KC_TRNS,
  177. KC_TRNS, M(JPTO), M(JPSHI), M(JPKA), M(JPKI), M(JPSU),
  178. KC_TRNS, M(JPMU), M(JPSO), M(JPHI), M(JPCHI), M(JPME), KC_TRNS,
  179. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  180. KC_TRNS, KC_TRNS,
  181. KC_NO,
  182. M(SHIFT), M(JPFN), MO(NUM),
  183. // right hand
  184. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  185. KC_TRNS, M(JPFU), M(JPSE), M(JPTSU), M(JPKU), KC_TRNS, KC_TRNS,
  186. KC_A, M(JPHA), M(JPTE), M(JPTA), KC_U, KC_TRNS,
  187. KC_TRNS, KC_TRNS, M(JPMA), M(JPHO), KC_I, KC_TRNS, KC_TRNS,
  188. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  189. KC_TRNS, KC_TRNS,
  190. KC_TRNS,
  191. KC_TRNS,KC_TRNS,M(KAZARI)
  192. ),
  193. /* Keymap 2: Japanese with Fn
  194. *
  195. * ,--------------------------------------------------. ,--------------------------------------------------.
  196. * | | | | | | | | | | | | | | | |
  197. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  198. * | |   | xe | | | xke | | | | xya | | xtsu | xo | | |
  199. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  200. * | | | | xka | | |------| |------| xa | xyo | | | xu | |
  201. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  202. * | | | | | | | | | | | | | xi | | |
  203. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  204. * | | | | | | | | | | | |
  205. * `----------------------------------' `----------------------------------'
  206. * ,-------------. ,-------------.
  207. * | | | | | |
  208. * ,------|------|------| |------+------+------.
  209. * | | | | | | | |
  210. * | | |------| |------| | |
  211. * | | | | | | | |
  212. * `--------------------' `--------------------'
  213. *
  214. *
  215. *
  216. */
  217. [JPXON] = LAYOUT_ergodox(
  218. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  219. KC_NO, KC_NO, M(JPXE), KC_NO, M(JPXKE), KC_NO, KC_NO,
  220. KC_NO, KC_NO, KC_NO, M(JPXKA), KC_NO, KC_NO,
  221. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  222. KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO,
  223. KC_NO, KC_NO,
  224. KC_NO,
  225. KC_NO, KC_TRNS, KC_TRNS,
  226. // right hand
  227. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  228. KC_NO, M(JPXYA), KC_NO, M(JPXTU), M(JPXO), KC_NO, KC_NO,
  229. M(JPXA), M(JPXYO), M(JPXYU), KC_NO, M(JPXU), KC_NO,
  230. KC_NO, KC_NO,KC_NO, KC_NO, M(JPXI), KC_NO, KC_NO,
  231. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  232. KC_NO, KC_NO,
  233. KC_NO,
  234. KC_NO, KC_NO, KC_NO
  235. ),
  236. /* Keymap 3: Japanese with kazari
  237. *
  238. * ,--------------------------------------------------. ,--------------------------------------------------.
  239. * | | | | | | | | | | | | | | | |
  240. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  241. * | |   | go | za | be | ge | | | | bu | ze | du | gu | | |
  242. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  243. * | | do | ji | ga | gi | zu |------| |------| | ba | de | da | vu | |
  244. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  245. * | | | zo | bi | di | | | | | | | bo | | | |
  246. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  247. * | | | | | | | | | | | |
  248. * `----------------------------------' `----------------------------------'
  249. * ,-------------. ,-------------.
  250. * | | | | | |
  251. * ,------|------|------| |------+------+------.
  252. * | | | | | | | |
  253. * | | |------| |------| | |
  254. * | | | | | | | |
  255. * `--------------------' `--------------------'
  256. *
  257. *
  258. *
  259. */
  260. [JPKAZARI] = LAYOUT_ergodox(
  261. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  262. KC_NO, KC_NO, M(JPGO), M(JPZA), M(JPBE), M(JPGE), KC_NO,
  263. KC_NO, M(JPDO), M(JPJI), M(JPGA), M(JPGI), M(JPZU),
  264. KC_NO, KC_NO, M(JPZO), M(JPBI), M(JPDI), KC_NO, KC_NO,
  265. KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO,
  266. KC_NO, KC_NO,
  267. KC_NO,
  268. M(SHIFT), KC_NO, KC_TRNS,
  269. // right hand
  270. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  271. KC_NO, M(JPBU), M(JPZE), M(JPDU), M(JPGU), KC_NO, KC_NO,
  272. KC_NO, M(JPBA), M(JPDE), M(JPDA), M(JPVU), KC_NO,
  273. KC_NO, KC_NO, KC_NO, M(JPBO), KC_NO, KC_NO, KC_NO,
  274. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  275. KC_NO, KC_NO,
  276. KC_NO,
  277. KC_NO, KC_NO, KC_TRNS
  278. ),
  279. /* Keymap 4: Japanese with Toprow
  280. *
  281. * ,--------------------------------------------------. ,--------------------------------------------------.
  282. * | | | | | | | | | | | | | | | |
  283. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  284. * | |   | e | - | re | | | | | ya | ne | ru | o | | |
  285. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  286. * | | ra | ri | na | no | mi |------| |------| wa | yo | yu | ni | nn | |
  287. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  288. * | | | | | | | | | | | mo | ro | wo | | |
  289. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  290. * | | | | | | | | | | | |
  291. * `----------------------------------' `----------------------------------'
  292. * ,-------------. ,-------------.
  293. * | | | | | |
  294. * ,------|------|------| |------+------+------.
  295. * | | | | | | | |
  296. * | | |------| |------| | |
  297. * | | | | | | | |
  298. * `--------------------' `--------------------'
  299. *
  300. *
  301. *
  302. */
  303. [JPTOPROW] = LAYOUT_ergodox(
  304. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  305. KC_NO, KC_NO, KC_E, KC_MINS, M(JPRE), KC_NO, KC_NO,
  306. KC_NO, M(JPRA), M(JPRI), M(JPNA), M(JPNO), M(JPMI),
  307. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  308. KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO,
  309. KC_NO, KC_NO,
  310. KC_NO,
  311. KC_TRNS, KC_NO, KC_NO,
  312. // right hand
  313. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  314. KC_NO, M(JPYA), M(JPNE), M(JPRU), KC_O, KC_NO, KC_NO,
  315. M(JPWA), M(JPYO), M(JPYU), M(JPNI), M(JPNN), KC_NO,
  316. KC_NO, KC_NO, M(JPMO), M(JPRO), M(JPWO), KC_NO, KC_NO,
  317. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  318. KC_NO, KC_NO,
  319. KC_NO,
  320. KC_NO, KC_NO, M(KAZARI)
  321. ),
  322. /* Keymap 5: Japanese with Toprow and Kazari
  323. *
  324. * ,--------------------------------------------------. ,--------------------------------------------------.
  325. * | | | | | | | | | | | | | | | |
  326. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  327. * | |   | | | pe | | | | | pu | | | | | |
  328. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  329. * | | | | | | |------| |------| | pa | | | | |
  330. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  331. * | | | | pi | | | | | | | | po | | | |
  332. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  333. * | | | | | | | | | | | |
  334. * `----------------------------------' `----------------------------------'
  335. * ,-------------. ,-------------.
  336. * | | | | | |
  337. * ,------|------|------| |------+------+------.
  338. * | | | | | | | |
  339. * | | |------| |------| | |
  340. * | | | | | | | |
  341. * `--------------------' `--------------------'
  342. *
  343. *
  344. *
  345. */
  346. [JPTRKZ] = LAYOUT_ergodox(
  347. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  348. KC_NO, KC_NO, KC_NO, KC_NO, M(JPPE),KC_NO, KC_NO,
  349. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  350. KC_NO, KC_NO, KC_NO, M(JPPI), KC_NO, KC_NO, KC_NO,
  351. KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO,
  352. KC_NO, KC_NO,
  353. KC_NO,
  354. KC_TRNS, KC_NO, KC_NO,
  355. // right hand
  356. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  357. KC_NO, M(JPPU), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  358. KC_NO, M(JPPA), KC_NO, KC_NO, KC_NO, KC_NO,
  359. KC_NO, KC_NO, KC_NO, M(JPPO), KC_NO, KC_NO, KC_NO,
  360. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  361. KC_NO, KC_NO,
  362. KC_NO,
  363. KC_NO, KC_NO, KC_TRNS
  364. ),
  365. /* Keymap 6: Number Layer
  366. *
  367. * ,--------------------------------------------------. ,--------------------------------------------------.
  368. * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
  369. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  370. * | | | | " | [ | ] | | | | | % | 7 | 8 | 9 | | F12 |
  371. * |--------+------+------+------+------+------| ; | | |------+------+------+------+------+--------|
  372. * | | | / | + | { | } |------| |------| ! | 4 | 5 | 6 | 0 | , |
  373. * |--------+------+------+------+------+------| : | | & |------+------+------+------+------+--------|
  374. * | | | * | - | ( | ) | | | | . | 1 | 2 | 3 | ? | |
  375. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  376. * | | | | | # | | < | = | > | | |
  377. * `----------------------------------' `----------------------------------'
  378. * ,-------------. ,-------------.
  379. * | | | | | |
  380. * ,------|------|------| |------+------+------.
  381. * | | | | | | | |
  382. * | | |------| |------| Back | Ent |
  383. * | | | | | | | |
  384. * `--------------------' `--------------------'
  385. */
  386. // Numbers
  387. [NUM] = LAYOUT_ergodox(
  388. // left hand
  389. KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO,
  390. KC_NO, KC_NO, KC_NO, JP_DQUO, KC_RBRACKET, KC_BSPC, KC_SCLN,
  391. KC_NO, KC_NO, KC_SLSH, JP_PLUS, LSFT(KC_RBRACKET), JP_RCBR,
  392. KC_NO, KC_NO, JP_ASTR, KC_MINS, LSFT(KC_8), LSFT(KC_9), JP_COLN,
  393. KC_TRNS, KC_NO, KC_NO, KC_NO, KC_HASH,
  394. KC_NO, KC_NO,
  395. KC_NO,
  396. KC_NO, KC_NO, KC_TRNS,
  397. // right hand
  398. KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
  399. LSFT(KC_JYEN), KC_PERC, KC_7, KC_8, KC_9, KC_NO, KC_F12,
  400. KC_EXLM, KC_4, KC_5, KC_6, KC_0, KC_COMM,
  401. LSFT(KC_6), KC_DOT, KC_1, KC_2, KC_3, KC_QUES, KC_NO,
  402. KC_LT,JP_EQL, KC_GT, KC_NO, KC_NO,
  403. KC_NO, KC_NO,
  404. KC_NO,
  405. KC_SPC, KC_BSLS, KC_DOT
  406. ),
  407. };
  408. const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
  409. {
  410. // MACRO only works in this function
  411. switch(id) {
  412. case 0:
  413. if (record->event.pressed) {
  414. register_code(KC_RSFT);
  415. } else {
  416. unregister_code(KC_RSFT);
  417. }
  418. break;
  419. case CTLSHFT:
  420. if (record->event.pressed) {
  421. return MACRO( D(LSFT), D(LCTL), END);
  422. } else {
  423. return MACRO( U(LSFT), U(LCTL), END);
  424. }
  425. break;
  426. case CUTCOPY:
  427. if (record->event.pressed) {
  428. start = timer_read();
  429. } else {
  430. if (timer_elapsed(start) > 150) {
  431. return MACRO( D(LCTL), T(X), U(LCTL), END);
  432. } else {
  433. return MACRO( D(LCTL), T(C), U(LCTL), END);
  434. }
  435. }
  436. break;
  437. // kana macros start here
  438. case JPVU:
  439. if (record->event.pressed) {
  440. return MACRO( I(1), T(V), T(U), END);
  441. }
  442. break;
  443. case JPNU:
  444. if (record->event.pressed) {
  445. return MACRO( I(1), T(N), T(U), END);
  446. }
  447. break;
  448. case JPKO:
  449. if (record->event.pressed) {
  450. return MACRO( I(1), T(K), T(O), END);
  451. }
  452. break;
  453. case JPSA:
  454. if (record->event.pressed) {
  455. return MACRO( I(1), T(S), T(A), END);
  456. }
  457. break;
  458. case JPKE:
  459. if (record->event.pressed) {
  460. return MACRO( I(1), T(K), T(E), END);
  461. }
  462. break;
  463. case JPHE:
  464. if (record->event.pressed) {
  465. return MACRO( I(1), T(H), T(E), END);
  466. }
  467. break;
  468. case JPSHI:
  469. if (record->event.pressed) {
  470. return MACRO( I(1), T(S), T(I), END);
  471. }
  472. break;
  473. case JPKA:
  474. if (record->event.pressed) {
  475. return MACRO( I(1), T(K), T(A), END);
  476. }
  477. break;
  478. case JPKI:
  479. if (record->event.pressed) {
  480. return MACRO( I(1), T(K), T(I), END);
  481. }
  482. break;
  483. case JPSU:
  484. if (record->event.pressed) {
  485. return MACRO( I(1), T(S), T(U), END);
  486. }
  487. break;
  488. case JPSO:
  489. if (record->event.pressed) {
  490. return MACRO( I(1), T(S), T(O), END);
  491. }
  492. break;
  493. case JPHI:
  494. if (record->event.pressed) {
  495. return MACRO( I(1), T(H), T(I), END);
  496. }
  497. break;
  498. case JPCHI:
  499. if (record->event.pressed) {
  500. return MACRO( I(1), T(T), T(I), END);
  501. }
  502. break;
  503. case JPFU:
  504. if (record->event.pressed) {
  505. return MACRO( I(1), T(F), T(U), END);
  506. }
  507. break;
  508. case JPSE:
  509. if (record->event.pressed) {
  510. return MACRO( I(1), T(S), T(E), END);
  511. }
  512. break;
  513. case JPTSU:
  514. if (record->event.pressed) {
  515. return MACRO( I(1), T(T), T(U), END);
  516. }
  517. break;
  518. case JPKU:
  519. if (record->event.pressed) {
  520. return MACRO( I(1), T(K), T(U), END);
  521. }
  522. break;
  523. case JPTE:
  524. if (record->event.pressed) {
  525. return MACRO( I(1), T(T), T(E), END);
  526. }
  527. break;
  528. case JPTA:
  529. if (record->event.pressed) {
  530. return MACRO( I(1), T(T), T(A), END);
  531. }
  532. break;
  533. case JPTO:
  534. if (record->event.pressed) {
  535. return MACRO( I(1), T(T), T(O), END);
  536. }
  537. break;
  538. case JPHA:
  539. if (record->event.pressed) {
  540. return MACRO( I(1), T(H), T(A), END);
  541. }
  542. break;
  543. case JPHO:
  544. if (record->event.pressed) {
  545. return MACRO( I(1), T(H), T(O), END);
  546. }
  547. break;
  548. case JPXKE:
  549. if (record->event.pressed) {
  550. return MACRO( I(1), T(X), T(K), T(E), END);
  551. }
  552. break;
  553. case JPXU:
  554. if (record->event.pressed) {
  555. return MACRO( I(1), T(X), T(U), END);
  556. }
  557. break;
  558. case JPXKA:
  559. if (record->event.pressed) {
  560. return MACRO( I(1), T(X), T(K), T(A), END);
  561. }
  562. break;
  563. case JPXA:
  564. if (record->event.pressed) {
  565. return MACRO( I(1), T(X), T(A), END);
  566. }
  567. break;
  568. case JPXO:
  569. if (record->event.pressed) {
  570. return MACRO( I(1), T(X), T(O), END);
  571. }
  572. break;
  573. case JPGO:
  574. if (record->event.pressed) {
  575. return MACRO( I(1), T(G), T(O), END);
  576. }
  577. break;
  578. case JPZA:
  579. if (record->event.pressed) {
  580. return MACRO( I(1), T(Z), T(A), END);
  581. }
  582. break;
  583. case JPGE:
  584. if (record->event.pressed) {
  585. return MACRO( I(1), T(G), T(E), END);
  586. }
  587. break;
  588. case JPBE:
  589. if (record->event.pressed) {
  590. return MACRO( I(1), T(B), T(E), END);
  591. }
  592. break;
  593. case JPYU:
  594. if (record->event.pressed) {
  595. return MACRO( I(1), T(Y), T(U), END);
  596. }
  597. break;
  598. case JPJI:
  599. if (record->event.pressed) {
  600. return MACRO( I(1), T(J), T(I), END);
  601. }
  602. break;
  603. case JPGA:
  604. if (record->event.pressed) {
  605. return MACRO( I(1), T(G), T(A), END);
  606. }
  607. break;
  608. case JPGI:
  609. if (record->event.pressed) {
  610. return MACRO( I(1), T(G), T(I), END);
  611. }
  612. break;
  613. case JPZU:
  614. if (record->event.pressed) {
  615. return MACRO( I(1), T(Z), T(U), END);
  616. }
  617. break;
  618. case JPZO:
  619. if (record->event.pressed) {
  620. return MACRO( I(1), T(Z), T(O), END);
  621. }
  622. break;
  623. case JPBI:
  624. if (record->event.pressed) {
  625. return MACRO( I(1), T(B), T(I), END);
  626. }
  627. break;
  628. case JPDI:
  629. if (record->event.pressed) {
  630. return MACRO( I(1), T(D), T(I), END);
  631. }
  632. break;
  633. case JPZE:
  634. if (record->event.pressed) {
  635. return MACRO( I(1), T(Z), T(E), END);
  636. }
  637. break;
  638. case JPDU:
  639. if (record->event.pressed) {
  640. return MACRO( I(1), T(D), T(U), END);
  641. }
  642. break;
  643. case JPGU:
  644. if (record->event.pressed) {
  645. return MACRO( I(1), T(G), T(U), END);
  646. }
  647. break;
  648. case JPYA:
  649. if (record->event.pressed) {
  650. return MACRO( I(1), T(Y), T(A), END);
  651. }
  652. break;
  653. case JPYO:
  654. if (record->event.pressed) {
  655. return MACRO( I(1), T(Y), T(O), END);
  656. }
  657. break;
  658. case JPDE:
  659. if (record->event.pressed) {
  660. return MACRO( I(1), T(D), T(E), END);
  661. }
  662. break;
  663. case JPDA:
  664. if (record->event.pressed) {
  665. return MACRO( I(1), T(D), T(A), END);
  666. }
  667. break;
  668. case JPDO:
  669. if (record->event.pressed) {
  670. return MACRO( I(1), T(D), T(O), END);
  671. }
  672. break;
  673. case JPBA:
  674. if (record->event.pressed) {
  675. return MACRO( I(1), T(B), T(A), END);
  676. }
  677. break;
  678. case JPBO:
  679. if (record->event.pressed) {
  680. return MACRO( I(1), T(B), T(O), END);
  681. }
  682. break;
  683. case JPRI:
  684. if (record->event.pressed) {
  685. return MACRO( I(1), T(R), T(I), END);
  686. }
  687. break;
  688. case JPRE:
  689. if (record->event.pressed) {
  690. return MACRO( I(1), T(R), T(E), END);
  691. }
  692. break;
  693. case JPRA:
  694. if (record->event.pressed) {
  695. return MACRO( I(1), T(R), T(A), END);
  696. }
  697. break;
  698. case JPNA:
  699. if (record->event.pressed) {
  700. return MACRO( I(1), T(N), T(A), END);
  701. }
  702. break;
  703. case JPNO:
  704. if (record->event.pressed) {
  705. return MACRO( I(1), T(N), T(O), END);
  706. }
  707. break;
  708. case JPMI:
  709. if (record->event.pressed) {
  710. return MACRO( I(1), T(M), T(I), END);
  711. }
  712. break;
  713. case JPMU:
  714. if (record->event.pressed) {
  715. return MACRO( I(1), T(M), T(U), END);
  716. }
  717. break;
  718. case JPME:
  719. if (record->event.pressed) {
  720. return MACRO( I(1), T(M), T(E), END);
  721. }
  722. break;
  723. case JPNE:
  724. if (record->event.pressed) {
  725. return MACRO( I(1), T(N), T(E), END);
  726. }
  727. break;
  728. case JPMA:
  729. if (record->event.pressed) {
  730. return MACRO( I(1), T(M), T(A), END);
  731. }
  732. break;
  733. case JPXTU:
  734. if (record->event.pressed) {
  735. return MACRO( I(1), T(X), T(T), T(U), END);
  736. }
  737. break;
  738. case JPWA:
  739. if (record->event.pressed) {
  740. return MACRO( I(1), T(W), T(A), END);
  741. }
  742. break;
  743. case JPRU:
  744. if (record->event.pressed) {
  745. return MACRO( I(1), T(R), T(U), END);
  746. }
  747. break;
  748. case JPWO:
  749. if (record->event.pressed) {
  750. return MACRO( I(1), T(W), T(O), END);
  751. }
  752. break;
  753. case JPNI:
  754. if (record->event.pressed) {
  755. return MACRO( I(1), T(N), T(I), END);
  756. }
  757. break;
  758. case JPNN:
  759. if (record->event.pressed) {
  760. return MACRO( I(1), T(N), T(N), END);
  761. }
  762. break;
  763. case JPMO:
  764. if (record->event.pressed) {
  765. return MACRO( I(1), T(M), T(O), END);
  766. }
  767. break;
  768. case JPRO:
  769. if (record->event.pressed) {
  770. return MACRO( I(1), T(R), T(O), END);
  771. }
  772. break;
  773. case JPXE:
  774. if (record->event.pressed) {
  775. return MACRO( I(1), T(X), T(E), END);
  776. }
  777. break;
  778. case JPXI:
  779. if (record->event.pressed) {
  780. return MACRO( I(1), T(X), T(I), END);
  781. }
  782. break;
  783. case JPXYU:
  784. if (record->event.pressed) {
  785. return MACRO( I(1), T(X), T(Y), T(U), END);
  786. }
  787. break;
  788. case JPXYA:
  789. if (record->event.pressed) {
  790. return MACRO( I(1), T(X), T(Y), T(A), END);
  791. }
  792. break;
  793. case JPXYO:
  794. if (record->event.pressed) {
  795. return MACRO( I(1), T(X), T(Y), T(O), END);
  796. }
  797. break;
  798. case JPPE:
  799. if (record->event.pressed) {
  800. return MACRO( I(1), T(P), T(E), END);
  801. }
  802. break;
  803. case JPPU:
  804. if (record->event.pressed) {
  805. return MACRO( I(1), T(P), T(U), END);
  806. }
  807. break;
  808. case JPPI:
  809. if (record->event.pressed) {
  810. return MACRO( I(1), T(P), T(I), END);
  811. }
  812. break;
  813. case JPPA:
  814. if (record->event.pressed) {
  815. return MACRO( I(1), T(P), T(A), END);
  816. }
  817. break;
  818. case JPPO:
  819. if (record->event.pressed) {
  820. return MACRO( I(1), T(P), T(O), END);
  821. }
  822. break;
  823. case JPBU:
  824. if (record->event.pressed) {
  825. return MACRO( I(1), T(B), T(U), END);
  826. }
  827. break;
  828. // kana macros end here
  829. break;
  830. case SHIFT:
  831. if (record->event.pressed) {
  832. start = timer_read();
  833. if (layer_state == (1<<JPKAZARI)) {
  834. layer_state = (1<<JPTOPROW)| (1<<JPTRKZ);
  835. } else {
  836. layer_state = (1<<JPTOPROW);
  837. }
  838. } else {
  839. layer_state = (0<<JPTOPROW);
  840. clear_keyboard_but_mods();
  841. if (timer_elapsed(start) < 100) {
  842. return MACRO( I(1), T(SPC), END);
  843. }
  844. }
  845. break;
  846. case KAZARI:
  847. if (record->event.pressed) {
  848. start = timer_read();
  849. if (layer_state == (1<<JPTOPROW)) {
  850. layer_state = (1<<JPKAZARI)| (1<<JPTRKZ);
  851. } else {
  852. layer_state = (1<<JPKAZARI);
  853. }
  854. break;
  855. } else {
  856. layer_state = (0<<JPKAZARI);
  857. layer_state = (0<<JPTRKZ);
  858. if (timer_elapsed(start) < 100) {
  859. return MACRO( T(ENTER), END);
  860. }
  861. }
  862. break;
  863. case JPFN:
  864. if (record->event.pressed) {
  865. start = timer_read();
  866. layer_state = (1<<JPXON);
  867. } else {
  868. layer_state = (0<<JPXON);
  869. if (timer_elapsed(start) < 100) {
  870. return MACRO( T(F7), END);
  871. }
  872. }
  873. break;
  874. case TOJPLOUT:
  875. if (record->event.pressed) {
  876. if (default_layer_state == (1<<JP)) {
  877. default_layer_state = (0<<JP);
  878. } else {
  879. default_layer_state = (1<<JP);
  880. }
  881. return MACRO( T(ZKHK), END);
  882. }
  883. break;
  884. /*
  885. // TOJPL and TOENL switch keyboard language.
  886. // The Ctrl+[] commands here load the appropriate ibus-anthy input engine via a WM shortcut
  887. // The first key pressed in the new engine is missed, thus the space key
  888. // TOJPLOUT works in the same way but is used for switching engines on external systems.
  889. case TOJPL:
  890. if (record->event.pressed) {
  891. default_layer_state = (1<<JP);
  892. return MACRO( D(LCTL), T(END), U(LCTL), END);
  893. //return MACRO( D(LCTL), T(END), U(LCTL), W(250), W(250), W(250), T(SPACE), END);
  894. }
  895. break;
  896. case TOENL:
  897. if (record->event.pressed) {
  898. default_layer_state = (1<<BASE);
  899. return MACRO( D(LCTL), T(HOME), U(LCTL), END);
  900. //return MACRO( D(LCTL), T(HOME), U(LCTL), W(250), W(250), W(250), T(SPACE), END);
  901. }
  902. break;
  903. */
  904. }
  905. return MACRO_NONE;
  906. };
  907. // Runs just one time when the keyboard initializes.
  908. void matrix_init_user(void) {
  909. };
  910. // Runs constantly in the background, in a loop.
  911. void matrix_scan_user(void) {
  912. uint8_t layer = get_highest_layer(layer_state);
  913. uint8_t deflayer = get_highest_layer(default_layer_state);
  914. ergodox_board_led_off();
  915. ergodox_right_led_1_off();
  916. ergodox_right_led_2_off();
  917. ergodox_right_led_3_off();
  918. switch (layer) {
  919. case 0:
  920. //none
  921. break;
  922. // case 1:
  923. // ergodox_right_led_2_on();
  924. // break;
  925. case 6:
  926. ergodox_right_led_3_on();
  927. break;
  928. }
  929. switch (deflayer) {
  930. case 0:
  931. ergodox_right_led_1_off();
  932. break;
  933. case 1:
  934. ergodox_right_led_1_on();
  935. break;
  936. }
  937. };