2
0

keymap.c 46 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105
  1. /*
  2. * algernon's ErgoDox EZ layout, please see the readme.md file!
  3. */
  4. #include "ergodox_ez.h"
  5. #include "led.h"
  6. #include "debug.h"
  7. #include "action_layer.h"
  8. #include "action_util.h"
  9. #include "mousekey.h"
  10. #include "timer.h"
  11. #include "keymap_plover.h"
  12. #include "eeconfig.h"
  13. /* Layers */
  14. enum {
  15. BASE = 0,
  16. ADORE,
  17. ARRW,
  18. APPSEL,
  19. HUN,
  20. NMDIA,
  21. OHLFT,
  22. OHRGT,
  23. PLVR,
  24. };
  25. /* Macros */
  26. enum {
  27. NONE = 0,
  28. // Buttons that do extra stuff
  29. A_GUI,
  30. A_PLVR,
  31. A_ESC,
  32. A_MPN,
  33. // Function / number keys
  34. KF_1, // 1, F1
  35. KF_2, // 2, F2
  36. KF_3, // ...
  37. KF_4,
  38. KF_5,
  39. KF_6,
  40. KF_7,
  41. KF_8,
  42. KF_9,
  43. KF_10,
  44. KF_11, // =, F11
  45. // Application select keys
  46. APP_SLK, // Slack
  47. APP_EMCS, // Emacs
  48. APP_TERM, // Terminal
  49. APP_CHRM, // Chrome
  50. APP_MSIC, // Music
  51. // Diagonal mouse movement
  52. A_MUL,
  53. A_MUR,
  54. A_MDL,
  55. A_MDR,
  56. // Hungarian layer keys
  57. HU_AA, // Á
  58. HU_OO, // Ó
  59. HU_EE, // É
  60. HU_UU, // Ú
  61. HU_II, // Í
  62. HU_OE, // Ö
  63. HU_UE, // Ü
  64. HU_OEE, // Ő
  65. HU_UEE, // Ű
  66. // One-handed layout specials
  67. OH_BSSPC,
  68. OH_ENTSFT,
  69. OH_BASE,
  70. OH_LEFT,
  71. OH_RIGHT,
  72. };
  73. /* Fn keys */
  74. enum {
  75. F_BSE = 0,
  76. F_HUN,
  77. F_GUI,
  78. F_SFT,
  79. F_ALT,
  80. F_CTRL
  81. };
  82. /* Custom keycodes */
  83. enum {
  84. CT_CLN = 0
  85. };
  86. /* States & timers */
  87. uint16_t gui_timer = 0;
  88. uint16_t kf_timers[12];
  89. uint16_t oh_base_timer = 0;
  90. uint16_t oh_bsspc_timer = 0;
  91. uint16_t oh_entsft_timer = 0;
  92. #define OH_BLINK_INTERVAL 500
  93. uint8_t oh_left_blink = 0;
  94. uint16_t oh_left_blink_timer = 0;
  95. uint8_t oh_right_blink = 0;
  96. uint16_t oh_right_blink_timer = 0;
  97. bool log_enable = false;
  98. /* The Keymap */
  99. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  100. /* Keymap 0: Base Layer
  101. *
  102. * ,-----------------------------------------------------. ,-----------------------------------------------------.
  103. * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 |
  104. * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
  105. * | Next/Prev | ' | , | . | P | Y | [ | | ] | F | G | C | R | L | \ |
  106. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  107. * | Tab/ARROW | A | O | E | U | I |------| |------| D | H | T | N | S | = / Arrow |
  108. * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------|
  109. * | Play/Pause| / | Q | J | K | X | | | | B | M | W | V | Z | Stop |
  110. * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
  111. * | | | | | : | | - | | | | |
  112. * `-----------------------------------' `-----------------------------------'
  113. * ,-------------. ,-------------.
  114. * | LAlt | GUI | | MDIA | 1HND |
  115. * ,------|------|------| |------+------+------.
  116. * | | | Ctrl | | LEAD | | |
  117. * |Backsp|LShift|------| |------| Enter| Space|
  118. * | | | ESC | | HUN | | |
  119. * `--------------------' `--------------------'
  120. */
  121. [BASE] = KEYMAP(
  122. // left hand
  123. KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
  124. ,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC
  125. ,LT(ARRW,KC_TAB) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I
  126. ,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN
  127. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN)
  128. ,F(F_ALT),F(F_GUI)
  129. ,F(F_CTRL)
  130. ,KC_BSPC,F(F_SFT),M(A_ESC)
  131. // right hand
  132. ,KC_APP ,M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11
  133. ,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS
  134. ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,LT(ARRW, KC_EQL)
  135. ,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP
  136. ,KC_MINS,KC_NO ,KC_NO ,KC_NO ,KC_NO
  137. ,OSL(NMDIA),M(OH_LEFT)
  138. ,KC_LEAD
  139. ,F(F_HUN) ,KC_ENT ,KC_SPC
  140. ),
  141. /* Keymap 1: Adore layer
  142. *
  143. * ,-----------------------------------------------------. ,-----------------------------------------------------.
  144. * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 |
  145. * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
  146. * | Next/Prev | , | . | L | W | M | [ | | ] | F | H | C | P | Y | \ |
  147. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  148. * | Tab/Arrow | A | O | E | I | U |------| |------| D | R | T | N | S | = / Arrow |
  149. * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------|
  150. * | Play/Pause| / | Z | ' | K | X | | | | B | G | V | J | Q | Stop |
  151. * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
  152. * | | | | | : | | - | | | | |
  153. * `-----------------------------------' `-----------------------------------'
  154. * ,-------------. ,-------------.
  155. * | LAlt | GUI | | MDIA | 1HND |
  156. * ,------|------|------| |------+------+------.
  157. * | | | Ctrl | | LEAD | | |
  158. * |Backsp|LShift|------| |------| Enter| Space|
  159. * | | | ESC | | HUN | | |
  160. * `--------------------' `--------------------'
  161. */
  162. [ADORE] = KEYMAP(
  163. // left hand
  164. KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
  165. ,M(A_MPN) ,KC_COMM ,KC_DOT ,KC_L ,KC_W ,KC_M ,KC_LBRC
  166. ,LT(ARRW, KC_TAB) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U
  167. ,KC_MPLY ,KC_SLSH ,KC_Z ,KC_QUOT,KC_K ,KC_X ,KC_LPRN
  168. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN)
  169. ,F(F_ALT),F(F_GUI)
  170. ,F(F_CTRL)
  171. ,KC_BSPC,F(F_SFT),M(A_ESC)
  172. // right hand
  173. ,KC_APP ,M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11
  174. ,KC_RBRC ,KC_F ,KC_H ,KC_C ,KC_P ,KC_Y ,KC_BSLS
  175. ,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,LT(ARRW, KC_EQL)
  176. ,KC_RPRN ,KC_B ,KC_G ,KC_V ,KC_J ,KC_Q ,KC_MSTP
  177. ,KC_MINS,KC_NO ,KC_NO ,KC_NO ,KC_NO
  178. ,OSL(NMDIA),M(OH_LEFT)
  179. ,KC_LEAD
  180. ,F(F_HUN) ,KC_ENT ,KC_SPC
  181. ),
  182. /* Keymap 2: Arrow layer
  183. *
  184. * ,-----------------------------------------------------. ,-----------------------------------------------------.
  185. * | | | | | | | | | | | | | | | |
  186. * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
  187. * | | | | | | | | | | | Home | Up | End | | |
  188. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  189. * | | | | | | |------| |------| | Left | Down | Rght | | |
  190. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  191. * | | | | | | | | | | | | | | | |
  192. * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
  193. * | | | | | | | | | | | |
  194. * `----------------------------------' `----------------------------------'
  195. * ,-------------. ,-------------.
  196. * | | | | | |
  197. * ,------|------|------| |------+------+------.
  198. * | | | | | | | |
  199. * | | |------| |------| PgUp | PgDn |
  200. * | | | | | | | |
  201. * `--------------------' `--------------------'
  202. */
  203. [ARRW] = KEYMAP(
  204. // left hand
  205. KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  206. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  207. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  208. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  209. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  210. ,KC_TRNS ,KC_TRNS
  211. ,KC_TRNS
  212. ,KC_TRNS ,KC_TRNS ,KC_TRNS
  213. // right hand
  214. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  215. ,KC_TRNS ,KC_TRNS ,KC_HOME ,KC_UP ,KC_END ,KC_TRNS ,KC_TRNS
  216. ,KC_TRNS ,KC_LEFT ,KC_DOWN ,KC_RGHT ,KC_TRNS ,KC_TRNS
  217. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  218. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  219. ,KC_TRNS ,KC_TRNS
  220. ,KC_TRNS
  221. ,KC_TRNS ,KC_PGUP ,KC_PGDN
  222. ),
  223. /* Keymap 3: Application select layer
  224. *
  225. * ,-----------------------------------------------------. ,-----------------------------------------------------.
  226. * | |Music |Slack |Emacs |Term |Chrome| | | | | | | | | |
  227. * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
  228. * | | | | | | | | | | | | | | | |
  229. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  230. * | | | | | | |------| |------| | | | | | |
  231. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  232. * | | | | | | | | | | | | | | | |
  233. * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
  234. * | | | | | | | | | | | |
  235. * `----------------------------------' `----------------------------------'
  236. * ,-------------. ,-------------.
  237. * | | | | | |
  238. * ,------|------|------| |------+------+------.
  239. * | | | | | | | |
  240. * | | |------| |------| | |
  241. * | | | | | | | |
  242. * `--------------------' `--------------------'
  243. */
  244. [APPSEL] = KEYMAP(
  245. // left hand
  246. KC_TRNS ,M(APP_MSIC),M(APP_SLK),M(APP_EMCS),M(APP_TERM),M(APP_CHRM),KC_TRNS
  247. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  248. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  249. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  250. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  251. ,KC_TRNS ,KC_TRNS
  252. ,KC_TRNS
  253. ,KC_TRNS ,KC_TRNS ,KC_TRNS
  254. // right hand
  255. ,KC_TRNS ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_TRNS
  256. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  257. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  258. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  259. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  260. ,KC_TRNS ,KC_TRNS
  261. ,KC_TRNS
  262. ,KC_TRNS ,KC_TRNS ,KC_TRNS
  263. ),
  264. /* Keymap 4: Hungarian Layer
  265. *
  266. * ,-----------------------------------------------------. ,-----------------------------------------------------.
  267. * | | | | | | | | | | | | | | | |
  268. * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
  269. * | | | Ő | | Ű | | | | | | | | | | |
  270. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  271. * | | Á | Ó | É | Ú | Í |------| |------| | | | | | |
  272. * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
  273. * | | | Ö | | Ü | | | | | | | | | | |
  274. * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
  275. * | | | | | | | | | | | |
  276. * `----------------------------------' `----------------------------------'
  277. * ,-------------. ,-------------.
  278. * | | | | | |
  279. * ,------|------|------| |------+------+------.
  280. * | | | | | | | |
  281. * | | |------| |------| | |
  282. * | | | | | BASE | | |
  283. * `--------------------' `--------------------'
  284. */
  285. [HUN] = KEYMAP(
  286. // left hand
  287. KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  288. ,KC_NO ,KC_NO ,M(HU_OEE),KC_NO ,M(HU_UEE),KC_NO ,KC_NO
  289. ,KC_NO ,M(HU_AA),M(HU_OO) ,M(HU_EE),M(HU_UU) ,M(HU_II)
  290. ,KC_NO ,KC_NO ,M(HU_OE) ,KC_NO ,M(HU_UE) ,KC_NO ,KC_NO
  291. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  292. ,KC_NO ,KC_NO
  293. ,KC_NO
  294. ,KC_NO ,KC_TRNS ,KC_TRNS
  295. // right hand
  296. ,KC_TRNS ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  297. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  298. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  299. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  300. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  301. ,KC_NO ,KC_NO
  302. ,KC_NO
  303. ,F(F_BSE),KC_TRNS ,KC_TRNS
  304. ),
  305. /* Keymap 5: Navigation & Media layer
  306. *
  307. * ,-----------------------------------------------------. ,-----------------------------------------------------.
  308. * | MS Slow | | | | | |ScrLCK| |ScrLCK| | | | | | |
  309. * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
  310. * | MS Normal | | Home | Up | PgUp | | | |Scroll| |MsUpL | MsUp |MsUpR | |PrintScreen|
  311. * |-----------+------+------+------+------+------| | | Up |------+------+------+------+------+-----------|
  312. * | MS Fast | | Left | Down | Right| |------| |------| |MsLeft| MsDn |MsRght| | |
  313. * |-----------+------+------+------+------+------| | |Scroll|------+------+------+------+------+-----------|
  314. * | Play/Pause| | End | Down | PgDn | | | | Down | |MsDnL | MsDn |MsDnR | | Stop |
  315. * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
  316. * | | | | | | | | | | | |
  317. * `----------------------------------' `----------------------------------'
  318. * ,-------------. ,-------------.
  319. * | Mute | VlUp | | BASE | MClk |
  320. * ,------|------|------| |------+------+------.
  321. * | | | VlDn | | Prev |Left |Right |
  322. * | SPC | Enter|------| |------| Click| Click|
  323. * | | | ESC | | Next | | |
  324. * `--------------------' `--------------------'
  325. */
  326. [NMDIA] = KEYMAP(
  327. // left hand
  328. KC_ACL0 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,LGUI(KC_L)
  329. ,KC_ACL1 ,KC_NO ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,KC_NO
  330. ,KC_ACL2 ,KC_NO ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_NO
  331. ,KC_MPLY ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_NO
  332. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  333. ,KC_MUTE ,KC_VOLU
  334. ,KC_VOLD
  335. ,KC_SPC,KC_ENTER,M(A_ESC)
  336. // right hand
  337. ,LGUI(KC_L),KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  338. ,KC_WH_U ,KC_NO ,M(A_MUL),KC_MS_U ,M(A_MUR),KC_NO ,KC_PSCR
  339. ,KC_NO ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_NO ,KC_NO
  340. ,KC_WH_D ,KC_NO ,M(A_MDL),KC_MS_D ,M(A_MDR),KC_NO ,KC_MSTP
  341. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  342. ,KC_TRNS ,KC_MS_BTN3
  343. ,KC_MPRV
  344. ,KC_MNXT ,KC_BTN1 ,KC_BTN2
  345. ),
  346. /* Keymap 6: One-handed, left side
  347. *
  348. * ,-----------------------------------------------------.
  349. * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 |A BSE|
  350. * |-----------+------+------+------+------+-------------|
  351. * | Tab | ' | , | . | P | Y | [ |
  352. * |-----------+------+------+------+------+------| |
  353. * | - | A | O | E | U | I |------|
  354. * |-----------+------+------+------+------+------| ( |
  355. * | Play/Pause| ; | Q | J | K | X | |
  356. * `-----------+------+------+------+------+-------------'
  357. * | Home | End | Down | Up | ESC |
  358. * `-----------------------------------'
  359. * ,-------------.
  360. * | LAlt | GUI |
  361. * ,------|------|------|
  362. * |BackSp|LShift| Ctrl |
  363. * | | |------|
  364. * |Space |Enter |OTHER |
  365. * `--------------------'
  366. */
  367. [OHLFT] = KEYMAP(
  368. // left hand
  369. KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3) ,M(KF_4) ,M(KF_5) ,M(OH_BASE)
  370. ,KC_TAB ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC
  371. ,KC_MINS ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I
  372. ,KC_MPLY ,KC_SCLN ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN
  373. ,KC_HOME ,KC_END ,KC_DOWN ,KC_UP ,M(A_ESC)
  374. ,KC_TRNS ,KC_TRNS
  375. ,KC_TRNS
  376. ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_RIGHT)
  377. // right hand
  378. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  379. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  380. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  381. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  382. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  383. ,KC_NO ,KC_NO
  384. ,KC_NO
  385. ,KC_NO ,KC_NO ,KC_NO
  386. ),
  387. /* Keymap 7: One-handed, right side
  388. *
  389. * ,-----------------------------------------------------.
  390. * | = F11 | 0 F10| 9 F9 | 8 F8 | 7 F7 | 6 F6 |A BSE|
  391. * |-----------+------+------+------+------+-------------|
  392. * | / | L | R | C | G | F | ] |
  393. * |-----------+------+------+------+------+------| |
  394. * | \ | S | N | T | H | D |------|
  395. * |-----------+------+------+------+------+------| ) |
  396. * | Stop | Z | V | W | M | B | |
  397. * `-----------+------+------+------+------+-------------'
  398. * | PgDn | PgUp | Right| Left | ESC |
  399. * `-----------------------------------'
  400. * ,-------------.
  401. * | LAlt | GUI |
  402. * ,------|------|------|
  403. * |BackSp|LShift| Ctrl |
  404. * | | |------|
  405. * |Space |Enter |OTHER |
  406. * `--------------------'
  407. */
  408. [OHRGT] = KEYMAP(
  409. // left hand
  410. M(KF_11) ,M(KF_10) ,M(KF_9) ,M(KF_8) ,M(KF_7) ,M(KF_6) ,M(OH_BASE)
  411. ,KC_SLSH ,KC_L ,KC_R ,KC_C ,KC_G ,KC_F ,KC_RBRC
  412. ,KC_BSLS ,KC_S ,KC_N ,KC_T ,KC_H ,KC_D
  413. ,KC_MSTP ,KC_Z ,KC_V ,KC_W ,KC_M ,KC_B ,KC_RPRN
  414. ,KC_PGDN ,KC_PGUP ,KC_RGHT ,KC_LEFT ,M(A_ESC)
  415. ,KC_TRNS ,KC_TRNS
  416. ,KC_TRNS
  417. ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_LEFT)
  418. // right hand
  419. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  420. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  421. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  422. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  423. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  424. ,KC_NO ,KC_NO
  425. ,KC_NO
  426. ,KC_NO ,KC_NO ,KC_NO
  427. ),
  428. /* Keymap 8: Steno for Plover
  429. *
  430. * ,--------------------------------------------------. ,--------------------------------------------------.
  431. * | | | | | | | BASE | | | | | | | | |
  432. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  433. * | | # | # | # | # | # | # | | # | # | # | # | # | # | # |
  434. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  435. * | | | T | P | H | |------| |------| | F | P | L | T | D |
  436. * |--------+ S +------+------+------+ * | * | | * | * +------+------+------+------+--------|
  437. * | | | K | W | R | | | | | | R | B | G | S | Z |
  438. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  439. * | | | | | | | | | | | |
  440. * `----------------------------------' `----------------------------------'
  441. * ,-------------. ,-------------.
  442. * | | | | | |
  443. * ,------|------|------| |------+------+------.
  444. * | | | | | | | |
  445. * | A | O |------| |------| E | U |
  446. * | | | | | | | |
  447. * `--------------------' `--------------------'
  448. */
  449. [PLVR] = KEYMAP(
  450. // left hand
  451. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(A_PLVR),
  452. KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM,
  453. KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR,
  454. KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR,
  455. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  456. KC_NO, KC_NO,
  457. KC_NO,
  458. PV_A, PV_O, KC_NO,
  459. // right hand
  460. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  461. PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM,
  462. PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD,
  463. PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ,
  464. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  465. KC_NO, KC_NO,
  466. KC_NO,
  467. KC_NO,PV_E, PV_U
  468. ),
  469. };
  470. const uint16_t PROGMEM fn_actions[] = {
  471. [F_BSE] = ACTION_LAYER_CLEAR(ON_PRESS)
  472. ,[F_HUN] = ACTION_LAYER_INVERT(HUN, ON_PRESS)
  473. ,[F_GUI] = ACTION_MACRO_TAP(A_GUI)
  474. ,[F_SFT] = ACTION_MODS_ONESHOT (MOD_LSFT)
  475. ,[F_ALT] = ACTION_MODS_ONESHOT (MOD_LALT)
  476. ,[F_CTRL] = ACTION_MODS_ONESHOT (MOD_LCTL)
  477. };
  478. void toggle_steno(int pressed)
  479. {
  480. uint8_t layer = biton32(layer_state);
  481. if (pressed) {
  482. if (layer != PLVR) layer_on(PLVR); else layer_off(PLVR);
  483. register_code(PV_LP);
  484. register_code(PV_LH);
  485. register_code(PV_LR);
  486. register_code(PV_O);
  487. register_code(PV_RL);
  488. register_code(PV_RG);
  489. } else {
  490. unregister_code(PV_LP);
  491. unregister_code(PV_LH);
  492. unregister_code(PV_LR);
  493. unregister_code(PV_O);
  494. unregister_code(PV_RL);
  495. unregister_code(PV_RG);
  496. }
  497. }
  498. macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char)
  499. {
  500. uint8_t need_shift = 0;
  501. uint8_t hold_shift = 0;
  502. if (!record->event.pressed)
  503. return MACRO_NONE;
  504. layer_off (HUN);
  505. if (keyboard_report->mods & MOD_BIT (KC_LSFT)) {
  506. hold_shift = 1;
  507. need_shift = 1;
  508. unregister_code (KC_LSFT);
  509. }
  510. if ((get_oneshot_mods () & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out ()) {
  511. need_shift = 1;
  512. hold_shift = 0;
  513. unregister_code (KC_LSFT);
  514. }
  515. clear_oneshot_mods ();
  516. register_code (KC_RALT);
  517. unregister_code (KC_RALT);
  518. if (accent == (KC_DQT)) {
  519. register_code (KC_RSFT);
  520. }
  521. register_code (accent);
  522. unregister_code (accent);
  523. if (need_shift && accent != (KC_DQT)) {
  524. register_code (KC_RSFT);
  525. } else if (accent == (KC_DQT) && !need_shift) {
  526. unregister_code (KC_RSFT);
  527. }
  528. register_code (hun_char);
  529. unregister_code (hun_char);
  530. if (need_shift || accent == (KC_DQT))
  531. unregister_code (KC_RSFT);
  532. if (hold_shift)
  533. register_code (KC_LSFT);
  534. return MACRO_NONE;
  535. }
  536. void ang_handle_kf (keyrecord_t *record, uint8_t id)
  537. {
  538. uint8_t code = id - KF_1;
  539. if (record->event.pressed) {
  540. kf_timers[code] = timer_read ();
  541. } else {
  542. uint8_t kc;
  543. if (timer_elapsed (kf_timers[code]) > TAPPING_TERM) {
  544. // Long press
  545. kc = KC_F1 + code;
  546. } else {
  547. if (id == KF_11)
  548. kc = KC_EQL;
  549. else
  550. kc = KC_1 + code;
  551. }
  552. register_code (kc);
  553. unregister_code (kc);
  554. }
  555. }
  556. const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
  557. {
  558. switch(id) {
  559. case A_ESC:
  560. if (record->event.pressed) {
  561. if ((get_oneshot_mods ()) && !has_oneshot_mods_timed_out ()) {
  562. clear_oneshot_mods ();
  563. } else {
  564. register_code (KC_ESC);
  565. }
  566. layer_off (HUN);
  567. } else {
  568. unregister_code (KC_ESC);
  569. }
  570. break;
  571. case A_MPN:
  572. if (record->event.pressed) {
  573. if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
  574. ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
  575. int oneshot = ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out());
  576. if (oneshot)
  577. clear_oneshot_mods ();
  578. unregister_code (KC_LSFT);
  579. register_code (KC_MPRV);
  580. unregister_code (KC_MPRV);
  581. if (!oneshot)
  582. register_code (KC_LSFT);
  583. } else {
  584. return MACRO (T(MNXT), END);
  585. }
  586. }
  587. break;
  588. /* Hungarian layer */
  589. case HU_AA:
  590. return ang_do_hun (record, KC_QUOT, KC_A);
  591. case HU_OO:
  592. return ang_do_hun (record, KC_QUOT, KC_O);
  593. case HU_EE:
  594. return ang_do_hun (record, KC_QUOT, KC_E);
  595. case HU_UU:
  596. return ang_do_hun (record, KC_QUOT, KC_U);
  597. case HU_II:
  598. return ang_do_hun (record, KC_QUOT, KC_I);
  599. case HU_OE:
  600. return ang_do_hun (record, KC_DQT, KC_O);
  601. case HU_UE:
  602. return ang_do_hun (record, KC_DQT, KC_U);
  603. case HU_OEE:
  604. return ang_do_hun (record, KC_EQL, KC_O);
  605. case HU_UEE:
  606. return ang_do_hun (record, KC_EQL, KC_U);
  607. /* Mouse movement */
  608. case A_MUL:
  609. if (record->event.pressed) {
  610. mousekey_on(KC_MS_UP);
  611. mousekey_on(KC_MS_LEFT);
  612. } else {
  613. mousekey_off(KC_MS_UP);
  614. mousekey_off(KC_MS_LEFT);
  615. }
  616. mousekey_send();
  617. break;
  618. case A_MUR:
  619. if (record->event.pressed) {
  620. mousekey_on(KC_MS_UP);
  621. mousekey_on(KC_MS_RIGHT);
  622. } else {
  623. mousekey_off(KC_MS_UP);
  624. mousekey_off(KC_MS_RIGHT);
  625. }
  626. mousekey_send();
  627. break;
  628. case A_MDL:
  629. if (record->event.pressed) {
  630. mousekey_on(KC_MS_DOWN);
  631. mousekey_on(KC_MS_LEFT);
  632. } else {
  633. mousekey_off(KC_MS_DOWN);
  634. mousekey_off(KC_MS_LEFT);
  635. }
  636. mousekey_send();
  637. break;
  638. case A_MDR:
  639. if (record->event.pressed) {
  640. mousekey_on(KC_MS_DOWN);
  641. mousekey_on(KC_MS_RIGHT);
  642. } else {
  643. mousekey_off(KC_MS_DOWN);
  644. mousekey_off(KC_MS_RIGHT);
  645. }
  646. mousekey_send();
  647. break;
  648. /* Plover base */
  649. case A_PLVR:
  650. toggle_steno(record->event.pressed);
  651. break;
  652. /* GUI & AppSel */
  653. case A_GUI:
  654. if (record->event.pressed) {
  655. register_code (KC_LGUI);
  656. if (record->tap.count && !record->tap.interrupted) {
  657. if (record->tap.count >= 2) {
  658. register_code (KC_W);
  659. layer_on (APPSEL);
  660. set_oneshot_layer (APPSEL, ONESHOT_START);
  661. }
  662. } else {
  663. record->tap.count = 0;
  664. }
  665. gui_timer = 0;
  666. } else {
  667. if (record->tap.count >= 2)
  668. {
  669. unregister_code (KC_W);
  670. clear_oneshot_layer_state (ONESHOT_PRESSED);
  671. }
  672. gui_timer = timer_read ();
  673. }
  674. break;
  675. case APP_SLK:
  676. return MACRODOWN(T(S), T(L), T(A), T(C), T(K), T(ENT), END);
  677. case APP_EMCS:
  678. return MACRODOWN(T(E), T(M), T(A), T(C), T(S), T(ENT), END);
  679. case APP_TERM:
  680. return MACRODOWN(T(T), T(E), T(R), T(M), T(ENT), END);
  681. case APP_CHRM:
  682. return MACRODOWN(T(C), T(H), T(R), T(O), T(M), T(ENT), END);
  683. case APP_MSIC:
  684. return MACRODOWN(T(R), T(H), T(Y), T(T), T(H), T(M), T(B), T(O), T(X), T(ENT), END);
  685. /* Function keys */
  686. case KF_1 ... KF_11:
  687. ang_handle_kf (record, id);
  688. break;
  689. /* 1HAND layout */
  690. case OH_BASE:
  691. if (record->event.pressed) {
  692. oh_base_timer = timer_read ();
  693. } else {
  694. if (timer_elapsed (oh_base_timer) > TAPPING_TERM) {
  695. layer_clear ();
  696. } else {
  697. return MACRO (T(APP), END);
  698. }
  699. }
  700. break;
  701. case OH_BSSPC:
  702. if (record->event.pressed) {
  703. oh_bsspc_timer = timer_read ();
  704. } else {
  705. if (timer_elapsed (oh_bsspc_timer) > TAPPING_TERM) {
  706. return MACRO (T(BSPC), END);
  707. } else {
  708. return MACRO (T(SPC), END);
  709. }
  710. }
  711. break;
  712. case OH_ENTSFT:
  713. if (record->event.pressed) {
  714. oh_entsft_timer = timer_read ();
  715. } else {
  716. if (timer_elapsed (oh_entsft_timer) > TAPPING_TERM) {
  717. if (keyboard_report->mods & MOD_BIT(KC_LSFT))
  718. unregister_code (KC_LSFT);
  719. else
  720. register_code (KC_LSFT);
  721. } else {
  722. return MACRO (T(ENT), END);
  723. }
  724. }
  725. break;
  726. case OH_LEFT:
  727. if (record->event.pressed) {
  728. layer_move (OHLFT);
  729. oh_left_blink = 1;
  730. oh_left_blink_timer = timer_read ();
  731. ergodox_right_led_1_on ();
  732. }
  733. break;
  734. case OH_RIGHT:
  735. if (record->event.pressed) {
  736. layer_move (OHRGT);
  737. oh_right_blink = 1;
  738. oh_right_blink_timer = timer_read ();
  739. ergodox_right_led_3_on ();
  740. }
  741. break;
  742. }
  743. return MACRO_NONE;
  744. };
  745. uint8_t is_adore = 0;
  746. // Runs just one time when the keyboard initializes.
  747. void matrix_init_user(void) {
  748. uint8_t dl;
  749. ergodox_led_all_on();
  750. for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) {
  751. ergodox_led_all_set (i);
  752. _delay_ms (5);
  753. }
  754. _delay_ms(1000);
  755. for (int i = LED_BRIGHTNESS_LO; i > 0; i--) {
  756. ergodox_led_all_set (i);
  757. _delay_ms (10);
  758. }
  759. ergodox_led_all_off();
  760. if (!eeconfig_is_enabled())
  761. eeconfig_init();
  762. dl = eeconfig_read_default_layer ();
  763. if (dl == (1UL << ADORE))
  764. is_adore = 1;
  765. };
  766. LEADER_EXTERNS();
  767. void ang_do_unicode (void) {
  768. register_code (KC_RCTL);
  769. register_code (KC_RSFT);
  770. register_code (KC_U);
  771. unregister_code (KC_U);
  772. unregister_code (KC_RSFT);
  773. unregister_code (KC_RCTL);
  774. _delay_ms (100);
  775. }
  776. void ang_tap (uint16_t codes[]) {
  777. for (int i = 0; codes[i] != 0; i++) {
  778. register_code (codes[i]);
  779. unregister_code (codes[i]);
  780. _delay_ms (50);
  781. }
  782. }
  783. #define TAP_ONCE(code) \
  784. register_code (code); \
  785. unregister_code (code)
  786. void ang_tap_dance (qk_tap_dance_state_t *state) {
  787. switch (state->keycode) {
  788. case TD(CT_CLN):
  789. if (state->count == 1) {
  790. register_code (KC_RSFT);
  791. register_code (KC_SCLN);
  792. unregister_code (KC_SCLN);
  793. unregister_code (KC_RSFT);
  794. } else if (state->count == 2) {
  795. register_code (KC_SCLN);
  796. unregister_code (KC_SCLN);
  797. reset_tap_dance (state);
  798. }
  799. }
  800. }
  801. const qk_tap_dance_action_t tap_dance_actions[] = {
  802. [CT_CLN] = ACTION_TAP_DANCE_FN (ang_tap_dance)
  803. };
  804. // Runs constantly in the background, in a loop.
  805. void matrix_scan_user(void) {
  806. uint8_t layer = biton32(layer_state);
  807. if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM)
  808. unregister_code (KC_LGUI);
  809. if (layer != OHLFT)
  810. oh_left_blink = 0;
  811. if (layer != OHRGT)
  812. oh_right_blink = 0;
  813. if (layer == HUN) {
  814. ergodox_right_led_2_on();
  815. ergodox_right_led_3_on();
  816. } else if (layer == NMDIA) {
  817. ergodox_right_led_1_on();
  818. ergodox_right_led_2_on();
  819. } else if (layer == PLVR) {
  820. ergodox_right_led_1_on ();
  821. ergodox_right_led_2_on ();
  822. ergodox_right_led_3_on ();
  823. } else if (layer == ADORE) {
  824. ergodox_right_led_1_on ();
  825. ergodox_right_led_2_on ();
  826. ergodox_right_led_3_on ();
  827. ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
  828. }
  829. if (layer == OHLFT || layer == OHRGT) {
  830. ergodox_right_led_2_on();
  831. if (oh_left_blink) {
  832. if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL) {
  833. if ((keyboard_report->mods & MOD_BIT(KC_LSFT)) == 0)
  834. ergodox_right_led_1_off ();
  835. }
  836. if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL * 2) {
  837. ergodox_right_led_1_on ();
  838. oh_left_blink_timer = timer_read ();
  839. }
  840. }
  841. if (oh_right_blink) {
  842. if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL) {
  843. if ((keyboard_report->mods & MOD_BIT(KC_LCTRL)) == 0)
  844. ergodox_right_led_3_off ();
  845. }
  846. if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL * 2) {
  847. ergodox_right_led_3_on ();
  848. oh_right_blink_timer = timer_read ();
  849. }
  850. }
  851. }
  852. if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
  853. ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
  854. ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
  855. ergodox_right_led_1_on ();
  856. } else {
  857. ergodox_right_led_1_set (LED_BRIGHTNESS_LO);
  858. if (layer != OHLFT && layer != NMDIA && layer != PLVR && layer != ADORE)
  859. ergodox_right_led_1_off ();
  860. }
  861. if (keyboard_report->mods & MOD_BIT(KC_LALT) ||
  862. ((get_oneshot_mods() & MOD_BIT(KC_LALT)) && !has_oneshot_mods_timed_out())) {
  863. ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
  864. ergodox_right_led_2_on ();
  865. } else {
  866. ergodox_right_led_2_set (LED_BRIGHTNESS_LO);
  867. if (layer != OHRGT && layer != HUN && layer != OHLFT && layer != NMDIA && layer != PLVR && layer != ADORE)
  868. ergodox_right_led_2_off ();
  869. }
  870. if (keyboard_report->mods & MOD_BIT(KC_LCTRL) ||
  871. ((get_oneshot_mods() & MOD_BIT(KC_LCTRL)) && !has_oneshot_mods_timed_out())) {
  872. ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
  873. ergodox_right_led_3_on ();
  874. } else {
  875. ergodox_right_led_3_set (LED_BRIGHTNESS_LO);
  876. if (layer != OHRGT && layer != HUN && layer != PLVR && layer != ADORE)
  877. ergodox_right_led_3_off ();
  878. }
  879. LEADER_DICTIONARY() {
  880. leading = false;
  881. leader_end ();
  882. SEQ_ONE_KEY (KC_D) {
  883. log_enable = !log_enable;
  884. }
  885. SEQ_ONE_KEY (KC_U) {
  886. ang_do_unicode ();
  887. }
  888. SEQ_ONE_KEY (KC_V) {
  889. SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ (" QMK_VERSION "/" KEYMAP_VERSION ")");
  890. }
  891. SEQ_ONE_KEY (KC_L) {
  892. /* λ */
  893. ang_do_unicode ();
  894. uint16_t codes[] = {KC_0, KC_3, KC_B, KC_B, KC_ENT, 0};
  895. ang_tap (codes);
  896. }
  897. SEQ_ONE_KEY (KC_Y) {
  898. uint16_t codes[] = {KC_BSLS, KC_O, KC_SLSH, 0};
  899. ang_tap (codes);
  900. }
  901. SEQ_ONE_KEY (KC_S) {
  902. ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC);
  903. TAP_ONCE (KC_BSLS);
  904. register_code (KC_RSFT); TAP_ONCE (KC_MINS); TAP_ONCE (KC_9); unregister_code (KC_RSFT);
  905. ang_do_unicode (); TAP_ONCE (KC_3); TAP_ONCE (KC_0); TAP_ONCE (KC_C); TAP_ONCE (KC_4); TAP_ONCE (KC_SPC);
  906. register_code (KC_RSFT); TAP_ONCE (KC_0); TAP_ONCE (KC_MINS); unregister_code (KC_RSFT);
  907. TAP_ONCE (KC_SLSH);
  908. ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC);
  909. }
  910. SEQ_TWO_KEYS (KC_W, KC_M) {
  911. register_code (KC_LALT);
  912. register_code (KC_F2);
  913. unregister_code (KC_F2);
  914. unregister_code (KC_LALT);
  915. _delay_ms (1000);
  916. uint16_t codes[] = {KC_M, KC_A, KC_X, KC_MINS, KC_F, KC_O, KC_C, KC_U, KC_S, KC_E, KC_D, KC_ENT, 0};
  917. ang_tap (codes);
  918. register_code (KC_LGUI);
  919. register_code (KC_UP);
  920. unregister_code (KC_UP);
  921. unregister_code (KC_LGUI);
  922. }
  923. SEQ_ONE_KEY (KC_A) {
  924. if (is_adore == 0) {
  925. default_layer_and (0);
  926. default_layer_or ((1UL << ADORE));
  927. eeconfig_update_default_layer ((1UL << ADORE));
  928. is_adore = 1;
  929. ergodox_led_all_off ();
  930. ergodox_right_led_3_on ();
  931. _delay_ms (100);
  932. ergodox_right_led_2_on ();
  933. _delay_ms (100);
  934. ergodox_right_led_3_off ();
  935. ergodox_right_led_1_on ();
  936. _delay_ms (100);
  937. ergodox_right_led_2_off ();
  938. _delay_ms (100);
  939. ergodox_right_led_1_off ();
  940. } else {
  941. is_adore = 0;
  942. default_layer_and (0);
  943. default_layer_or (1UL << BASE);
  944. eeconfig_update_default_layer ((1UL << BASE));
  945. ergodox_led_all_off ();
  946. ergodox_right_led_1_on ();
  947. _delay_ms (100);
  948. ergodox_right_led_2_on ();
  949. _delay_ms (100);
  950. ergodox_right_led_1_off ();
  951. ergodox_right_led_3_on ();
  952. _delay_ms (100);
  953. ergodox_right_led_2_off ();
  954. _delay_ms (100);
  955. ergodox_right_led_3_off ();
  956. }
  957. }
  958. }
  959. }
  960. bool process_record_user (uint16_t keycode, keyrecord_t *record) {
  961. uint8_t layer = biton32(layer_state);
  962. if (log_enable && layer == BASE) {
  963. xprintf ("KL: col=%d, row=%d\n", record->event.key.col,
  964. record->event.key.row);
  965. }
  966. return true;
  967. }