keymap.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. #include "ergodox_ez.h"
  2. #include "debug.h"
  3. #include "action_layer.h"
  4. #include "keymap_extras/keymap_german_osx.h"
  5. #define BASE 0 // default layer
  6. #define SYMB 1 // symbols
  7. #define MDIA 2 // media keys
  8. #define SMLY 3 // media keys
  9. #define NUMB 4 // number keys
  10. #define EGOS 5 // Egoshooter layer
  11. #define M_CTRL_CMDV 1
  12. #define M_CTRL_CMDC 2
  13. #define M_MEH_SH_ACUT 3
  14. #define M_DE_PLUS_CTRLALT 12
  15. #define M_DE_CIRC_CTRLCMD 13
  16. #define M_TOGGLE_5 14
  17. #define SM_SMILE 4
  18. #define SM_SMIRK 5
  19. #define SM_FROWN 6
  20. #define SM_CRY 7
  21. #define SM_KISS 8
  22. #define SM_HEART 9
  23. #define SM_LAUGH 10
  24. #define SM_SAD 11
  25. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  26. /* Keymap 0: Basic layer
  27. *
  28. * ,--------------------------------------------------. ,--------------------------------------------------.
  29. * | ESC | 1 | 2 | 3 | 4 | 5 |CMD-V | |CMD-C | 6 | 7 | 8 | 9 | 0 | ß |
  30. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  31. * | TAB | Q | W | E | R | T | CMD | | CMD | Z | U | I | O | P | ü |
  32. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  33. * | LALT | A | S | D | F | G |------| |------| H | J | K | L | ö | ä/RALT|
  34. * |--------+------+------+------+------+------| LALT | | RALT |------+------+------+------+------+--------|
  35. * | LShift |Y/Ctrl| X | C | V | B | | | | N | M | , | . |-/Ctrl| RShift |
  36. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  37. * |</L1| ^° |AltShf| Left | Right| | Up | Down | CMD-SHIFT | + | #/L1 |
  38. * `----------------------------------' `----------------------------------'
  39. * ,-------------. ,---------------.
  40. * | MDIA | Meh | | Hyper| NUM |
  41. * ,------|------|------| |------+--------+------.
  42. * | | | Home | | PgUp | | |
  43. * | Back-| Del |------| |------| Enter | Space|
  44. * | Space| | End | | PgDn | | |
  45. * `--------------------' `----------------------'
  46. */
  47. // If it accepts an argument (i.e, is a function), it doesn't need KC_.
  48. // Otherwise, it needs KC_*
  49. [BASE] = KEYMAP( // layer 0 : default
  50. // left hand
  51. KC_ESC, DE_1, DE_2, DE_3, DE_4, DE_5, M(M_CTRL_CMDV),
  52. KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, KC_LGUI,
  53. KC_LALT, DE_A, DE_S, DE_D, DE_F, DE_G,
  54. KC_LSFT, CTL_T(DE_Y), DE_X, DE_C, DE_V, DE_B, KC_LALT,
  55. LT(SYMB,DE_LESS), M(M_DE_CIRC_CTRLCMD), M(M_DE_PLUS_CTRLALT), LALT(KC_LSFT), LGUI(KC_LSFT),
  56. M(M_MEH_SH_ACUT), TG(2),
  57. KC_HOME,
  58. KC_BSPC,KC_DEL, LT(SMLY,KC_END),
  59. // right hand
  60. M(M_CTRL_CMDC), DE_6, DE_7, DE_8, DE_9, DE_0, DE_SS,
  61. KC_RGUI, DE_Z, DE_U, DE_I, DE_O, DE_P, DE_UE,
  62. DE_H, DE_J, DE_K, DE_L, DE_OE, ALT_T(DE_AE),
  63. KC_RALT, DE_N, DE_M, DE_COMM,DE_DOT, CTL_T(DE_MINS), KC_RSFT,
  64. KC_LEFT, KC_UP,KC_DOWN,KC_RIGHT, LT(SYMB,DE_HASH),
  65. TG(4), ALL_T(DE_ACUT),
  66. KC_PGUP,
  67. KC_PGDN,KC_ENT, KC_SPC
  68. ),
  69. /* Keymap 1: Symbol Layer
  70. *
  71. * ,--------------------------------------------------. ,--------------------------------------------------.
  72. * | | F1 | F2 | F3 | F4 | F5 | | | L5 | F6 | F7 | F8 | F9 | F10 | F11 |
  73. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  74. * | | < | > | ! | ? | | | | | \ | [ | ] | | | # | F12 |
  75. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  76. * | | # | $ | \ | / | . |------| |------| / | ( | ) | { | } | |
  77. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  78. * | | | ^ | % | | | ~ | | | | & | < | > | " | ' | ? |
  79. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  80. * | | | | | | | | | . | ! | |
  81. * `----------------------------------' `----------------------------------'
  82. * ,-------------. ,-------------.
  83. * | | | | | |
  84. * ,------|------|------| |------+------+------.
  85. * | | | | | | | |
  86. * | | |------| |------| | |
  87. * | | | | | | | |
  88. * `--------------------' `--------------------'
  89. */
  90. // SYMBOLS
  91. [SYMB] = KEYMAP(
  92. // left hand
  93. KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
  94. KC_TRNS,DE_LESS,DE_MORE,DE_EXLM,DE_QST, KC_TRNS,KC_TRNS,
  95. KC_TRNS,DE_HASH,DE_DLR, DE_BSLS,DE_SLSH,KC_DOT,
  96. KC_TRNS,KC_TRNS,DE_LESS,DE_PERC,DE_PIPE,DE_TILD,KC_TRNS,
  97. KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
  98. KC_TRNS,KC_TRNS,
  99. KC_TRNS,
  100. KC_TRNS,KC_DEL,KC_TRNS,
  101. // right hand
  102. M(M_TOGGLE_5), KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
  103. KC_TRNS, LALT(LSFT(KC_7)), LALT(KC_5), LALT(KC_6), LALT(KC_7), DE_HASH, KC_F12,
  104. DE_SLSH, DE_LPRN, DE_RPRN, LALT(KC_8), LALT(KC_9), KC_TRNS,
  105. KC_TRNS, DE_AMPR, KC_GRV, LSFT(KC_GRV), DE_DQOT, DE_QUOT, DE_QST,
  106. KC_TRNS,KC_DOT, KC_EXLM, KC_TRNS, KC_TRNS,
  107. KC_TRNS, KC_TRNS,
  108. KC_TRNS,
  109. KC_TRNS, KC_TRNS, KC_TRNS
  110. ),
  111. /* Keymap 2: Media and mouse keys
  112. *
  113. * ,--------------------------------------------------. ,--------------------------------------------------.
  114. * | | | | | | | | | Mute | | | | | | EGOS |
  115. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  116. * | | | Lclk | MsUp | Rclk | WlUp | | | | | | | | | |
  117. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  118. * | | |MsLeft|MsDown|MsRght| WlDw |------| |------|VolUp | | | | | |
  119. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  120. * | | | | | | MClk | | | |VolDn | | Prev | Next | Up | |
  121. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  122. * | | | | | | | | | Left | Down | Right |
  123. * `----------------------------------' `----------------------------------'
  124. * ,-------------. ,-------------.
  125. * | | | | | |
  126. * ,------|------|------| |------+------+------.
  127. * | | | | | | |Brwser|
  128. * | | |------| |------| |Back |
  129. * | | | | | | | |
  130. * `--------------------' `--------------------'
  131. */
  132. // MEDIA AND MOUSE
  133. KEYMAP(
  134. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  135. KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, KC_TRNS,
  136. KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D,
  137. KC_TRNS, KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_R, KC_BTN3, KC_TRNS,
  138. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  139. KC_TRNS, KC_TRNS,
  140. KC_TRNS,
  141. KC_TRNS, KC_TRNS, KC_TRNS,
  142. // right hand
  143. KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
  144. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  145. KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  146. KC_TRNS, KC_VOLD, KC_TRNS, KC_MPRV, KC_MNXT, KC_UP, KC_TRNS,
  147. KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT,
  148. KC_TRNS, KC_TRNS,
  149. KC_TRNS,
  150. KC_TRNS, KC_TRNS, KC_WBAK
  151. ),
  152. /* Keymap 3: Smiley layer
  153. * making it easier to type smileys... tipp: on osx you can easily replace those smileys with the UTF-8 character using
  154. * keyboard short commands...
  155. *
  156. * ,--------------------------------------------------. ,--------------------------------------------------.
  157. * | | | | | | | | | :-) | ;-) | :-D | | | | |
  158. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  159. * | | | | | | | | | | :-{ | :-( | | | | |
  160. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  161. * | | | | | | |------| |------| <3 | :-* | | | | |
  162. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  163. * | | | | | | | | | | | | | | | |
  164. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  165. * | | | | | | | | | | | r|
  166. * `----------------------------------' `----------------------------------'
  167. * ,-------------. ,-------------.
  168. * | | | | | |
  169. * ,------|------|------| |------+--------+------.
  170. * | | | | | | | |
  171. * | | |------| |------| | |
  172. * | | | | | | | |
  173. * `--------------------' `----------------------'
  174. */
  175. KEYMAP(
  176. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  177. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  178. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  179. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  180. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  181. KC_TRNS, KC_TRNS,
  182. KC_TRNS,
  183. KC_TRNS, KC_TRNS, KC_TRNS,
  184. // right hand
  185. M(SM_SMILE), M(SM_SMIRK), M(SM_LAUGH), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  186. KC_TRNS, M(SM_FROWN), M(SM_SAD), M(SM_CRY), KC_TRNS, KC_TRNS, KC_TRNS,
  187. M(SM_HEART), M(SM_KISS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  188. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  189. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  190. KC_TRNS, KC_TRNS,
  191. KC_TRNS,
  192. KC_TRNS, KC_TRNS, KC_TRNS
  193. ),
  194. //number pad
  195. KEYMAP(
  196. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  197. KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS,
  198. KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS,
  199. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  200. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  201. KC_TRNS, KC_TRNS,
  202. KC_TRNS,
  203. KC_TRNS, KC_TRNS, KC_TRNS,
  204. // right hand
  205. KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
  206. KC_TRNS, KC_UP, KC_7, KC_8, KC_9, LSFT(KC_RBRC), KC_F12,
  207. KC_DOWN, KC_4, KC_5, KC_6, KC_RBRC, DE_MINS,
  208. KC_TRNS, LSFT(KC_6), KC_1, KC_2, KC_3, LSFT(KC_7), KC_TRNS,
  209. KC_0,KC_DOT, KC_0, DE_EQL, KC_TRNS,
  210. KC_TRNS, KC_TRNS,
  211. KC_TRNS,
  212. KC_TRNS, KC_TRNS, KC_TRNS
  213. ),
  214. /* Keymap 3: Egoshooter layer
  215. *
  216. * ,--------------------------------------------------. ,--------------------------------------------------.
  217. * | | | | | | | | | L5 | | | | | | |
  218. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  219. * | | | | | | | | | | | | | | | |
  220. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  221. * | SHIFT | | | | | |------| |------| | | | | | |
  222. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  223. * | | | | | | | | | | | | | | | |
  224. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  225. * | CTRL | | | | | | | | | | |
  226. * `----------------------------------' `----------------------------------'
  227. * ,-------------. ,-------------.
  228. * | F1 | F2 | | | |
  229. * ,------|------|------| |------+--------+------.
  230. * | | | F3 | | | | |
  231. * | SPACE| CTRL|------| |------| | |
  232. * | | | F4 | | | | |
  233. * `--------------------' `----------------------'
  234. */
  235. KEYMAP(
  236. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  237. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  238. KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  239. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  240. KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  241. KC_F1, KC_F2,
  242. KC_F3,
  243. KC_SPC, KC_LCTL, KC_F4,
  244. // right hand
  245. M(M_TOGGLE_5), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  246. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  247. 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, KC_TRNS,
  249. KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  250. KC_TRNS, KC_TRNS,
  251. KC_TRNS,
  252. KC_TRNS, KC_TRNS, KC_TRNS
  253. ),
  254. };
  255. const uint16_t PROGMEM fn_actions[] = {
  256. [1] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Layer 1 (Symbols)
  257. [2] = ACTION_LAYER_TAP_TOGGLE(SMLY) // FN2 - Momentary Layer 2 (Smiley)
  258. };
  259. const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
  260. {
  261. static uint16_t start;
  262. // MACRODOWN only works in this function
  263. switch(id) {
  264. case 0:
  265. if (record->event.pressed) {
  266. register_code(KC_RSFT);
  267. } else {
  268. unregister_code(KC_RSFT);
  269. }
  270. break;
  271. case 1:
  272. if (record->event.pressed) {
  273. start = timer_read();
  274. return MACRO(D(LCTRL), END);
  275. } else {
  276. if (timer_elapsed(start) > 150) {
  277. return MACRO(U(LCTRL), END);
  278. } else {
  279. return MACRO(U(LCTRL), D(LGUI), T(V), U(LGUI), END);
  280. }
  281. }
  282. break;
  283. case 2:
  284. if (record->event.pressed) {
  285. start = timer_read();
  286. return MACRO(D(LCTRL),END);
  287. } else {
  288. if (timer_elapsed(start) > 150){
  289. return MACRO(U(LCTRL),END);
  290. } else {
  291. return MACRO(U(LCTRL),D(LGUI),T(C),U(LGUI),END);
  292. }
  293. }
  294. break;
  295. case 3:
  296. if (record->event.pressed) {
  297. start = timer_read();
  298. return MACRO(D(LCTRL),D(LSFT),D(LALT),END);
  299. } else {
  300. if (timer_elapsed(start) > 150){
  301. return MACRO(U(LCTRL),U(LSFT),U(LALT),END);
  302. } else {
  303. return MACRO(U(LCTRL),U(LALT),T(EQL),U(LSFT),END); //cannot use DE_ACUT here, as macro needs KC_ prefix
  304. }
  305. }
  306. break;
  307. case M_DE_CIRC_CTRLCMD:
  308. if (record->event.pressed) {
  309. start = timer_read();
  310. return MACRO(D(LCTRL),D(LGUI),END);
  311. } else {
  312. if (timer_elapsed(start) > 150){
  313. return MACRO(U(LCTRL),U(LGUI),END);
  314. } else {
  315. return MACRO(U(LCTRL),U(LGUI),T(NUBS),END);
  316. }
  317. }
  318. break;
  319. case M_DE_PLUS_CTRLALT:
  320. if (record->event.pressed) {
  321. start = timer_read();
  322. return MACRO(D(LCTRL),D(LALT),END);
  323. } else {
  324. if (timer_elapsed(start) > 150){
  325. return MACRO(U(LCTRL),U(LALT),END);
  326. } else {
  327. return MACRO(U(LCTRL),U(LALT),T(RBRC),END);
  328. }
  329. }
  330. break;
  331. case SM_SMILE:
  332. if (record->event.pressed) {
  333. return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(9),U(LSFT),END);
  334. }
  335. break;
  336. case SM_SMIRK:
  337. if (record->event.pressed) {
  338. return MACRO(D(LSFT),T(COMM),U(LSFT),T(SLSH),D(LSFT),T(9),U(LSFT),END);
  339. }
  340. break;
  341. case SM_CRY:
  342. if (record->event.pressed) {
  343. return MACRO(D(LSFT),T(COMM),U(LSFT),T(SLSH),D(LSFT),T(8),U(LSFT),END);
  344. }
  345. break;
  346. case SM_SAD:
  347. if (record->event.pressed) {
  348. return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(8),U(LSFT),END);
  349. }
  350. break;
  351. case SM_HEART:
  352. if (record->event.pressed) {
  353. return MACRO(T(GRV),T(3),END);
  354. }
  355. break;
  356. case SM_LAUGH:
  357. if (record->event.pressed) {
  358. return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(D),U(LSFT),END);
  359. }
  360. break;
  361. case SM_KISS:
  362. if (record->event.pressed) {
  363. return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(RBRC),U(LSFT),END);
  364. }
  365. break;
  366. case SM_FROWN:
  367. if (record->event.pressed) {
  368. return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LALT),T(8),U(LALT),END);
  369. }
  370. break;
  371. case M_TOGGLE_5:
  372. if (record->event.pressed){
  373. layer_state ^= (1<<5);
  374. layer_state &= (1<<5);
  375. }
  376. break;
  377. }
  378. return MACRO_NONE;
  379. };
  380. // Runs just one time when the keyboard initializes.
  381. void * matrix_init_user(void) {
  382. };
  383. // Runs constantly in the background, in a loop.
  384. void * matrix_scan_user(void) {
  385. uint8_t layer = biton32(layer_state);
  386. ergodox_board_led_off();
  387. ergodox_right_led_1_off();
  388. ergodox_right_led_2_off();
  389. ergodox_right_led_3_off();
  390. switch (layer) {
  391. // TODO: Make this relevant to the ErgoDox EZ.
  392. case 1:
  393. ergodox_right_led_1_on();
  394. break;
  395. case 2:
  396. ergodox_right_led_2_on();
  397. break;
  398. case 3:
  399. ergodox_right_led_3_on();
  400. break;
  401. case 4:
  402. ergodox_right_led_1_on();
  403. ergodox_right_led_3_on();
  404. //ergodox_board_led_on();
  405. break;
  406. case 5:
  407. ergodox_right_led_1_on();
  408. ergodox_right_led_2_on();
  409. ergodox_right_led_3_on();
  410. break;
  411. default:
  412. // none
  413. break;
  414. }
  415. };