keymap.c 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962
  1. #include QMK_KEYBOARD_H
  2. #include "debug.h"
  3. #include "action_layer.h"
  4. #include "keymap_jp.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,F(1),
  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), F(1),
  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_DQT, 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 uint16_t PROGMEM fn_actions[] = {
  409. [1] = ACTION_LAYER_MOMENTARY(NUM) // FN1 - Momentary Layer 6 (Numbers)
  410. };
  411. const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
  412. {
  413. // MACRO only works in this function
  414. switch(id) {
  415. case 0:
  416. if (record->event.pressed) {
  417. register_code(KC_RSFT);
  418. } else {
  419. unregister_code(KC_RSFT);
  420. }
  421. break;
  422. case CTLSHFT:
  423. if (record->event.pressed) {
  424. return MACRO( D(LSFT), D(LCTL), END);
  425. } else {
  426. return MACRO( U(LSFT), U(LCTL), END);
  427. }
  428. break;
  429. case CUTCOPY:
  430. if (record->event.pressed) {
  431. start = timer_read();
  432. } else {
  433. if (timer_elapsed(start) > 150) {
  434. return MACRO( D(LCTL), T(X), U(LCTL), END);
  435. } else {
  436. return MACRO( D(LCTL), T(C), U(LCTL), END);
  437. }
  438. }
  439. break;
  440. // kana macros start here
  441. case JPVU:
  442. if (record->event.pressed) {
  443. return MACRO( I(1), T(V), T(U), END);
  444. }
  445. break;
  446. case JPNU:
  447. if (record->event.pressed) {
  448. return MACRO( I(1), T(N), T(U), END);
  449. }
  450. break;
  451. case JPKO:
  452. if (record->event.pressed) {
  453. return MACRO( I(1), T(K), T(O), END);
  454. }
  455. break;
  456. case JPSA:
  457. if (record->event.pressed) {
  458. return MACRO( I(1), T(S), T(A), END);
  459. }
  460. break;
  461. case JPKE:
  462. if (record->event.pressed) {
  463. return MACRO( I(1), T(K), T(E), END);
  464. }
  465. break;
  466. case JPHE:
  467. if (record->event.pressed) {
  468. return MACRO( I(1), T(H), T(E), END);
  469. }
  470. break;
  471. case JPSHI:
  472. if (record->event.pressed) {
  473. return MACRO( I(1), T(S), T(I), END);
  474. }
  475. break;
  476. case JPKA:
  477. if (record->event.pressed) {
  478. return MACRO( I(1), T(K), T(A), END);
  479. }
  480. break;
  481. case JPKI:
  482. if (record->event.pressed) {
  483. return MACRO( I(1), T(K), T(I), END);
  484. }
  485. break;
  486. case JPSU:
  487. if (record->event.pressed) {
  488. return MACRO( I(1), T(S), T(U), END);
  489. }
  490. break;
  491. case JPSO:
  492. if (record->event.pressed) {
  493. return MACRO( I(1), T(S), T(O), END);
  494. }
  495. break;
  496. case JPHI:
  497. if (record->event.pressed) {
  498. return MACRO( I(1), T(H), T(I), END);
  499. }
  500. break;
  501. case JPCHI:
  502. if (record->event.pressed) {
  503. return MACRO( I(1), T(T), T(I), END);
  504. }
  505. break;
  506. case JPFU:
  507. if (record->event.pressed) {
  508. return MACRO( I(1), T(F), T(U), END);
  509. }
  510. break;
  511. case JPSE:
  512. if (record->event.pressed) {
  513. return MACRO( I(1), T(S), T(E), END);
  514. }
  515. break;
  516. case JPTSU:
  517. if (record->event.pressed) {
  518. return MACRO( I(1), T(T), T(U), END);
  519. }
  520. break;
  521. case JPKU:
  522. if (record->event.pressed) {
  523. return MACRO( I(1), T(K), T(U), END);
  524. }
  525. break;
  526. case JPTE:
  527. if (record->event.pressed) {
  528. return MACRO( I(1), T(T), T(E), END);
  529. }
  530. break;
  531. case JPTA:
  532. if (record->event.pressed) {
  533. return MACRO( I(1), T(T), T(A), END);
  534. }
  535. break;
  536. case JPTO:
  537. if (record->event.pressed) {
  538. return MACRO( I(1), T(T), T(O), END);
  539. }
  540. break;
  541. case JPHA:
  542. if (record->event.pressed) {
  543. return MACRO( I(1), T(H), T(A), END);
  544. }
  545. break;
  546. case JPHO:
  547. if (record->event.pressed) {
  548. return MACRO( I(1), T(H), T(O), END);
  549. }
  550. break;
  551. case JPXKE:
  552. if (record->event.pressed) {
  553. return MACRO( I(1), T(X), T(K), T(E), END);
  554. }
  555. break;
  556. case JPXU:
  557. if (record->event.pressed) {
  558. return MACRO( I(1), T(X), T(U), END);
  559. }
  560. break;
  561. case JPXKA:
  562. if (record->event.pressed) {
  563. return MACRO( I(1), T(X), T(K), T(A), END);
  564. }
  565. break;
  566. case JPXA:
  567. if (record->event.pressed) {
  568. return MACRO( I(1), T(X), T(A), END);
  569. }
  570. break;
  571. case JPXO:
  572. if (record->event.pressed) {
  573. return MACRO( I(1), T(X), T(O), END);
  574. }
  575. break;
  576. case JPGO:
  577. if (record->event.pressed) {
  578. return MACRO( I(1), T(G), T(O), END);
  579. }
  580. break;
  581. case JPZA:
  582. if (record->event.pressed) {
  583. return MACRO( I(1), T(Z), T(A), END);
  584. }
  585. break;
  586. case JPGE:
  587. if (record->event.pressed) {
  588. return MACRO( I(1), T(G), T(E), END);
  589. }
  590. break;
  591. case JPBE:
  592. if (record->event.pressed) {
  593. return MACRO( I(1), T(B), T(E), END);
  594. }
  595. break;
  596. case JPYU:
  597. if (record->event.pressed) {
  598. return MACRO( I(1), T(Y), T(U), END);
  599. }
  600. break;
  601. case JPJI:
  602. if (record->event.pressed) {
  603. return MACRO( I(1), T(J), T(I), END);
  604. }
  605. break;
  606. case JPGA:
  607. if (record->event.pressed) {
  608. return MACRO( I(1), T(G), T(A), END);
  609. }
  610. break;
  611. case JPGI:
  612. if (record->event.pressed) {
  613. return MACRO( I(1), T(G), T(I), END);
  614. }
  615. break;
  616. case JPZU:
  617. if (record->event.pressed) {
  618. return MACRO( I(1), T(Z), T(U), END);
  619. }
  620. break;
  621. case JPZO:
  622. if (record->event.pressed) {
  623. return MACRO( I(1), T(Z), T(O), END);
  624. }
  625. break;
  626. case JPBI:
  627. if (record->event.pressed) {
  628. return MACRO( I(1), T(B), T(I), END);
  629. }
  630. break;
  631. case JPDI:
  632. if (record->event.pressed) {
  633. return MACRO( I(1), T(D), T(I), END);
  634. }
  635. break;
  636. case JPZE:
  637. if (record->event.pressed) {
  638. return MACRO( I(1), T(Z), T(E), END);
  639. }
  640. break;
  641. case JPDU:
  642. if (record->event.pressed) {
  643. return MACRO( I(1), T(D), T(U), END);
  644. }
  645. break;
  646. case JPGU:
  647. if (record->event.pressed) {
  648. return MACRO( I(1), T(G), T(U), END);
  649. }
  650. break;
  651. case JPYA:
  652. if (record->event.pressed) {
  653. return MACRO( I(1), T(Y), T(A), END);
  654. }
  655. break;
  656. case JPYO:
  657. if (record->event.pressed) {
  658. return MACRO( I(1), T(Y), T(O), END);
  659. }
  660. break;
  661. case JPDE:
  662. if (record->event.pressed) {
  663. return MACRO( I(1), T(D), T(E), END);
  664. }
  665. break;
  666. case JPDA:
  667. if (record->event.pressed) {
  668. return MACRO( I(1), T(D), T(A), END);
  669. }
  670. break;
  671. case JPDO:
  672. if (record->event.pressed) {
  673. return MACRO( I(1), T(D), T(O), END);
  674. }
  675. break;
  676. case JPBA:
  677. if (record->event.pressed) {
  678. return MACRO( I(1), T(B), T(A), END);
  679. }
  680. break;
  681. case JPBO:
  682. if (record->event.pressed) {
  683. return MACRO( I(1), T(B), T(O), END);
  684. }
  685. break;
  686. case JPRI:
  687. if (record->event.pressed) {
  688. return MACRO( I(1), T(R), T(I), END);
  689. }
  690. break;
  691. case JPRE:
  692. if (record->event.pressed) {
  693. return MACRO( I(1), T(R), T(E), END);
  694. }
  695. break;
  696. case JPRA:
  697. if (record->event.pressed) {
  698. return MACRO( I(1), T(R), T(A), END);
  699. }
  700. break;
  701. case JPNA:
  702. if (record->event.pressed) {
  703. return MACRO( I(1), T(N), T(A), END);
  704. }
  705. break;
  706. case JPNO:
  707. if (record->event.pressed) {
  708. return MACRO( I(1), T(N), T(O), END);
  709. }
  710. break;
  711. case JPMI:
  712. if (record->event.pressed) {
  713. return MACRO( I(1), T(M), T(I), END);
  714. }
  715. break;
  716. case JPMU:
  717. if (record->event.pressed) {
  718. return MACRO( I(1), T(M), T(U), END);
  719. }
  720. break;
  721. case JPME:
  722. if (record->event.pressed) {
  723. return MACRO( I(1), T(M), T(E), END);
  724. }
  725. break;
  726. case JPNE:
  727. if (record->event.pressed) {
  728. return MACRO( I(1), T(N), T(E), END);
  729. }
  730. break;
  731. case JPMA:
  732. if (record->event.pressed) {
  733. return MACRO( I(1), T(M), T(A), END);
  734. }
  735. break;
  736. case JPXTU:
  737. if (record->event.pressed) {
  738. return MACRO( I(1), T(X), T(T), T(U), END);
  739. }
  740. break;
  741. case JPWA:
  742. if (record->event.pressed) {
  743. return MACRO( I(1), T(W), T(A), END);
  744. }
  745. break;
  746. case JPRU:
  747. if (record->event.pressed) {
  748. return MACRO( I(1), T(R), T(U), END);
  749. }
  750. break;
  751. case JPWO:
  752. if (record->event.pressed) {
  753. return MACRO( I(1), T(W), T(O), END);
  754. }
  755. break;
  756. case JPNI:
  757. if (record->event.pressed) {
  758. return MACRO( I(1), T(N), T(I), END);
  759. }
  760. break;
  761. case JPNN:
  762. if (record->event.pressed) {
  763. return MACRO( I(1), T(N), T(N), END);
  764. }
  765. break;
  766. case JPMO:
  767. if (record->event.pressed) {
  768. return MACRO( I(1), T(M), T(O), END);
  769. }
  770. break;
  771. case JPRO:
  772. if (record->event.pressed) {
  773. return MACRO( I(1), T(R), T(O), END);
  774. }
  775. break;
  776. case JPXE:
  777. if (record->event.pressed) {
  778. return MACRO( I(1), T(X), T(E), END);
  779. }
  780. break;
  781. case JPXI:
  782. if (record->event.pressed) {
  783. return MACRO( I(1), T(X), T(I), END);
  784. }
  785. break;
  786. case JPXYU:
  787. if (record->event.pressed) {
  788. return MACRO( I(1), T(X), T(Y), T(U), END);
  789. }
  790. break;
  791. case JPXYA:
  792. if (record->event.pressed) {
  793. return MACRO( I(1), T(X), T(Y), T(A), END);
  794. }
  795. break;
  796. case JPXYO:
  797. if (record->event.pressed) {
  798. return MACRO( I(1), T(X), T(Y), T(O), END);
  799. }
  800. break;
  801. case JPPE:
  802. if (record->event.pressed) {
  803. return MACRO( I(1), T(P), T(E), END);
  804. }
  805. break;
  806. case JPPU:
  807. if (record->event.pressed) {
  808. return MACRO( I(1), T(P), T(U), END);
  809. }
  810. break;
  811. case JPPI:
  812. if (record->event.pressed) {
  813. return MACRO( I(1), T(P), T(I), END);
  814. }
  815. break;
  816. case JPPA:
  817. if (record->event.pressed) {
  818. return MACRO( I(1), T(P), T(A), END);
  819. }
  820. break;
  821. case JPPO:
  822. if (record->event.pressed) {
  823. return MACRO( I(1), T(P), T(O), END);
  824. }
  825. break;
  826. case JPBU:
  827. if (record->event.pressed) {
  828. return MACRO( I(1), T(B), T(U), END);
  829. }
  830. break;
  831. // kana macros end here
  832. break;
  833. case SHIFT:
  834. if (record->event.pressed) {
  835. start = timer_read();
  836. if (layer_state == (1<<JPKAZARI)) {
  837. layer_state = (1<<JPTOPROW)| (1<<JPTRKZ);
  838. } else {
  839. layer_state = (1<<JPTOPROW);
  840. }
  841. } else {
  842. layer_state = (0<<JPTOPROW);
  843. clear_keyboard_but_mods();
  844. if (timer_elapsed(start) < 100) {
  845. return MACRO( I(1), T(SPC), END);
  846. }
  847. }
  848. break;
  849. case KAZARI:
  850. if (record->event.pressed) {
  851. start = timer_read();
  852. if (layer_state == (1<<JPTOPROW)) {
  853. layer_state = (1<<JPKAZARI)| (1<<JPTRKZ);
  854. } else {
  855. layer_state = (1<<JPKAZARI);
  856. }
  857. break;
  858. } else {
  859. layer_state = (0<<JPKAZARI);
  860. layer_state = (0<<JPTRKZ);
  861. if (timer_elapsed(start) < 100) {
  862. return MACRO( T(ENTER), END);
  863. }
  864. }
  865. break;
  866. case JPFN:
  867. if (record->event.pressed) {
  868. start = timer_read();
  869. layer_state = (1<<JPXON);
  870. } else {
  871. layer_state = (0<<JPXON);
  872. if (timer_elapsed(start) < 100) {
  873. return MACRO( T(F7), END);
  874. }
  875. }
  876. break;
  877. case TOJPLOUT:
  878. if (record->event.pressed) {
  879. if (default_layer_state == (1<<JP)) {
  880. default_layer_state = (0<<JP);
  881. } else {
  882. default_layer_state = (1<<JP);
  883. }
  884. return MACRO( T(ZKHK), END);
  885. }
  886. break;
  887. /*
  888. // TOJPL and TOENL switch keyboard language.
  889. // The Ctrl+[] commands here load the appropriate ibus-anthy input engine via a WM shortcut
  890. // The first key pressed in the new engine is missed, thus the space key
  891. // TOJPLOUT works in the same way but is used for switching engines on external systems.
  892. case TOJPL:
  893. if (record->event.pressed) {
  894. default_layer_state = (1<<JP);
  895. return MACRO( D(LCTL), T(END), U(LCTL), END);
  896. //return MACRO( D(LCTL), T(END), U(LCTL), W(250), W(250), W(250), T(SPACE), END);
  897. }
  898. break;
  899. case TOENL:
  900. if (record->event.pressed) {
  901. default_layer_state = (1<<BASE);
  902. return MACRO( D(LCTL), T(HOME), U(LCTL), END);
  903. //return MACRO( D(LCTL), T(HOME), U(LCTL), W(250), W(250), W(250), T(SPACE), END);
  904. }
  905. break;
  906. */
  907. }
  908. return MACRO_NONE;
  909. };
  910. // Runs just one time when the keyboard initializes.
  911. void matrix_init_user(void) {
  912. };
  913. // Runs constantly in the background, in a loop.
  914. void matrix_scan_user(void) {
  915. uint8_t layer = biton32(layer_state);
  916. uint8_t deflayer = biton32(default_layer_state);
  917. ergodox_board_led_off();
  918. ergodox_right_led_1_off();
  919. ergodox_right_led_2_off();
  920. ergodox_right_led_3_off();
  921. switch (layer) {
  922. case 0:
  923. //none
  924. break;
  925. // case 1:
  926. // ergodox_right_led_2_on();
  927. // break;
  928. case 6:
  929. ergodox_right_led_3_on();
  930. break;
  931. }
  932. switch (deflayer) {
  933. case 0:
  934. ergodox_right_led_1_off();
  935. break;
  936. case 1:
  937. ergodox_right_led_1_on();
  938. break;
  939. }
  940. };