keymap.c 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574
  1. /*
  2. This is the keymap for the keyboard
  3. Copyright 2012 Jun Wako <wakojun@gmail.com>
  4. Copyright 2015 Jack Humbert
  5. Copyright 2017 Art Ortenburger
  6. This program is free software: you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation, either version 2 of the License, or
  9. (at your option) any later version.
  10. This program is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. GNU General Public License for more details.
  14. You should have received a copy of the GNU General Public License
  15. along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. */
  17. #include QMK_KEYBOARD_H
  18. #include "debug.h"
  19. #include "action_layer.h"
  20. #include "version.h"
  21. #include "drashna.h"
  22. #include "keymap_german.h"
  23. #include "keymap_nordic.h"
  24. //define layer change stuff for underglow indicator
  25. bool skip_leds = false;
  26. #ifdef TAP_DANCE_ENABLE
  27. //define diablo macro timer variables
  28. static uint16_t diablo_timer[4];
  29. static uint8_t diablo_times[] = { 0, 1, 3, 5, 10, 30 };
  30. static uint8_t diablo_key_time[4];
  31. bool check_dtimer(uint8_t dtimer) {
  32. // has the correct number of seconds elapsed (as defined by diablo_times)
  33. return (timer_elapsed(diablo_timer[dtimer]) < (diablo_key_time[dtimer] * 1000)) ? false : true;
  34. };
  35. enum {
  36. TD_FLSH = 0,
  37. TD_DIABLO_1,
  38. TD_DIABLO_2,
  39. TD_DIABLO_3,
  40. TD_DIABLO_4
  41. };
  42. // on each tap, light up one led, from right to left
  43. // on the forth tap, turn them off from right to left
  44. void dance_flsh_each(qk_tap_dance_state_t *state, void *user_data) {
  45. if (!skip_leds) {
  46. ergodox_board_led_off();
  47. ergodox_right_led_1_off();
  48. ergodox_right_led_2_off();
  49. ergodox_right_led_3_off();
  50. skip_leds = true;
  51. }
  52. switch (state->count) {
  53. case 1:
  54. ergodox_right_led_1_on();
  55. break;
  56. case 2:
  57. ergodox_right_led_2_on();
  58. break;
  59. case 3:
  60. ergodox_right_led_3_on();
  61. break;
  62. case 4:
  63. ergodox_right_led_1_off();
  64. _delay_ms(50);
  65. ergodox_right_led_2_off();
  66. _delay_ms(50);
  67. ergodox_right_led_3_off();
  68. }
  69. }
  70. // on the fourth tap, set the keyboard on flash state
  71. // and set the underglow to red, because red == bad
  72. void dance_flsh_finished(qk_tap_dance_state_t *state, void *user_data) {
  73. if (state->count >= 4) {
  74. #ifdef RGBLIGHT_ENABLE
  75. rgblight_enable();
  76. rgblight_mode(1);
  77. rgblight_setrgb(0xff, 0x00, 0x00);
  78. #endif
  79. reset_tap_dance(state);
  80. reset_keyboard();
  81. }
  82. }
  83. // Cycle through the times for the macro, starting at 0, for disabled.
  84. // Max of six values, so don't exceed
  85. void diablo_tapdance_master(qk_tap_dance_state_t *state, void *user_data, uint8_t diablo_key) {
  86. if (state->count >= 7) {
  87. diablo_key_time[diablo_key] = diablo_times[0];
  88. reset_tap_dance(state);
  89. }
  90. else {
  91. diablo_key_time[diablo_key] = diablo_times[state->count - 1];
  92. }
  93. }
  94. // Would rather have one function for all of this, but no idea how to do that...
  95. void diablo_tapdance1(qk_tap_dance_state_t *state, void *user_data) {
  96. diablo_tapdance_master(state, user_data, 0);
  97. }
  98. void diablo_tapdance2(qk_tap_dance_state_t *state, void *user_data) {
  99. diablo_tapdance_master(state, user_data, 1);
  100. }
  101. void diablo_tapdance3(qk_tap_dance_state_t *state, void *user_data) {
  102. diablo_tapdance_master(state, user_data, 2);
  103. }
  104. void diablo_tapdance4(qk_tap_dance_state_t *state, void *user_data) {
  105. diablo_tapdance_master(state, user_data, 3);
  106. }
  107. // if the flash state didnt happen, then turn off leds, left to right
  108. void dance_flsh_reset(qk_tap_dance_state_t *state, void *user_data) {
  109. _delay_ms(200);
  110. ergodox_right_led_3_off();
  111. _delay_ms(200);
  112. ergodox_right_led_2_off();
  113. _delay_ms(200);
  114. ergodox_right_led_1_off();
  115. _delay_ms(500);
  116. skip_leds = false;
  117. }
  118. //Tap Dance Definitions
  119. qk_tap_dance_action_t tap_dance_actions[] = {
  120. //Once for Blue, Twice for Green, Thrice for Red, and four to flash
  121. [TD_FLSH] = ACTION_TAP_DANCE_FN_ADVANCED(dance_flsh_each, dance_flsh_finished, dance_flsh_reset),
  122. // tap once to disable, and more to enable timed micros
  123. [TD_DIABLO_1] = ACTION_TAP_DANCE_FN(diablo_tapdance1),
  124. [TD_DIABLO_2] = ACTION_TAP_DANCE_FN(diablo_tapdance2),
  125. [TD_DIABLO_3] = ACTION_TAP_DANCE_FN(diablo_tapdance3),
  126. [TD_DIABLO_4] = ACTION_TAP_DANCE_FN(diablo_tapdance4),
  127. };
  128. #endif
  129. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  130. /* Keymap 0: Basic layer
  131. *
  132. *
  133. * ,--------------------------------------------------. ,--------------------------------------------------.
  134. * | = + | 1 ! | 2 @ | 3 # | 4 $ | 5 % | TG(4)| | TG(4)| 6 ^ | 7 & | 8 * | 9 ( | 0 ) | - _ |
  135. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  136. * | TAB | Q | W | E | R | T | TG(3)| |TG(3) | Y | U | I | O | P | \ | |
  137. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  138. * | Bksp | A | S | D | F | G |------| |------| H | J | K | L | ; | ' " |
  139. * |--------+------+------+------+------+------| TG(2)| | TG(2)|------+------+------+------+------+--------|
  140. * | Shift | Z | X | C | V | B | | | | N | M | , < | . > | ? / | Shift |
  141. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  142. * | `/SYM| ' " | LGUI | [ { | ] } | | LEFT | DOWN | UP |RIGHT | SYMB |
  143. * `----------------------------------' `----------------------------------'
  144. * ,--------------. ,--------------.
  145. * |Alt/Ap| Win | | Alt |Ctl/Esc|
  146. * ,------|------|-------| |------+-------+------.
  147. * | | | Home | | PgUp | | |
  148. * | Space| Bksp |-------| |------| DEL |Enter |
  149. * | | | End | | PgDn | | |
  150. * `---------------------' `---------------------'
  151. */
  152. [_QWERTY] = LAYOUT_ergodox(
  153. KC_EQUAL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(_MOUS),
  154. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(_DIABLO),
  155. KC_BSPACE, KC_A, KC_S, KC_D, KC_F, KC_G,
  156. KC_LSHIFT, LCTL_T(KC_Z),KC_X, KC_C, KC_V, KC_B, TG(_OVERWATCH),
  157. LT(_SYMB,KC_GRAVE),KC_QUOTE, KC_LGUI, KC_LBRACKET,KC_RBRACKET,
  158. ALT_T(KC_APPLICATION), KC_LGUI,
  159. KC_HOME,
  160. KC_SPACE, KC_BSPACE, KC_END,
  161. TG(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
  162. TG(_DIABLO), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH,
  163. KC_H, KC_J, KC_K, KC_L, KC_SCOLON, GUI_T(KC_QUOTE),
  164. TG(_OVERWATCH), KC_N, KC_M, KC_COMMA, KC_DOT, RCTL_T(KC_SLASH),KC_RSHIFT,
  165. KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TT(_SYMB),
  166. KC_RGUI, CTL_T(KC_ESCAPE),
  167. KC_PGUP,
  168. KC_PGDOWN, KC_DELETE, KC_ENTER
  169. ),
  170. /* Keymap 0: Basic layer
  171. *
  172. * ,--------------------------------------------------. ,--------------------------------------------------.
  173. * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
  174. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  175. * | Del | Q | W | F | P | G | L1 | | L1 | J | L | U | Y | ; | \ |
  176. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  177. * | BkSp | A | R | S | T | D |------| |------| H | N | E | I |O / L2| ' |
  178. * |--------+------+------+------+------+------| OVER | | Meh |------+------+------+------+------+--------|
  179. * | LShift |Z/Ctrl| X | C | V | B | | | | K | M | , | . |//Ctrl| RShift |
  180. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  181. * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
  182. * `----------------------------------' `----------------------------------'
  183. * ,-------------. ,-------------.
  184. * | App | LGui | | Alt |Ctrl/Esc|
  185. * ,------|------|------| |------+--------+------.
  186. * | | | Home | | PgUp | | |
  187. * | Space|Backsp|------| |------| Tab |Enter |
  188. * | |ace | End | | PgDn | | |
  189. * `--------------------' `----------------------'
  190. */
  191. // If it accepts an argument (i.e, is a function), it doesn't need KC_.
  192. // Otherwise, it needs KC_*
  193. [_COLEMAK] = LAYOUT_ergodox(
  194. // left hand
  195. KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(_MOUS),
  196. KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, TG(_DIABLO),
  197. KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D,
  198. KC_LSFT, LCTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, TG(_OVERWATCH),
  199. LT(_SYMB,KC_GRV),KC_QUOT, KC_LGUI, KC_LBRACKET,KC_RBRACKET,
  200. ALT_T(KC_APP), KC_LGUI,
  201. KC_HOME,
  202. KC_SPC,KC_BSPC,KC_END,
  203. // right hand
  204. TG(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
  205. TG(_DIABLO), KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
  206. KC_H, KC_N, KC_E, KC_I, KC_O, GUI_T(KC_QUOTE),
  207. TG(_OVERWATCH),KC_K, KC_M, KC_COMM,KC_DOT, RCTL_T(KC_SLASH), KC_RSHIFT,
  208. KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TT(_SYMB),
  209. KC_RGUI, CTL_T(KC_ESC),
  210. KC_PGUP,
  211. KC_PGDN,KC_DELETE, KC_ENT
  212. ),
  213. /* Keymap 0: Basic layer
  214. *
  215. * ,--------------------------------------------------. ,--------------------------------------------------.
  216. * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | \ |
  217. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  218. * | Del | ' | , | . | P | Y | L1 | | L1 | F | G | C | R | L | / |
  219. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  220. * | BkSp | A | O | E | U | I |------| |------| D | H | T | N |S / L2| - |
  221. * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
  222. * | LShift |:/Ctrl| Q | J | K | X | | | | B | M | W | V |Z/Ctrl| RShift |
  223. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  224. * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
  225. * `----------------------------------' `----------------------------------'
  226. * ,-------------. ,-------------.
  227. * | App | LGui | | Alt |Ctrl/Esc|
  228. * ,------|------|------| |------+--------+------.
  229. * | | | Home | | PgUp | | |
  230. * | Space|Backsp|------| |------| Tab |Enter |
  231. * | |ace | End | | PgDn | | |
  232. * `--------------------' `----------------------'
  233. */
  234. // If it accepts an argument (i.e, is a function), it doesn't need KC_.
  235. // Otherwise, it needs KC_*
  236. [_DVORAK] = LAYOUT_ergodox(
  237. // left hand
  238. KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(_MOUS),
  239. KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, TG(_DIABLO),
  240. KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I,
  241. KC_LSFT, LCTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, TG(_OVERWATCH),
  242. LT(_SYMB,KC_GRV),KC_QUOT, KC_LGUI, KC_LBRACKET, KC_RBRACKET,
  243. ALT_T(KC_APP), KC_LEAD,
  244. KC_HOME,
  245. KC_SPC,KC_BSPC,KC_END,
  246. // right hand
  247. TG(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
  248. TG(_DIABLO), KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
  249. KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
  250. TG(_OVERWATCH),KC_B, KC_M, KC_W, KC_V, RCTL_T(KC_Z), KC_RSHIFT,
  251. KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT, TT(_SYMB),
  252. KC_LALT, CTL_T(KC_ESC),
  253. KC_PGUP,
  254. KC_PGDN,KC_DELETE, KC_ENT
  255. ),
  256. /* Keymap 0: Basic layer
  257. *
  258. * ,--------------------------------------------------. ,--------------------------------------------------.
  259. * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
  260. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  261. * | Del | Q | W | F | P | G | L1 | | L1 | J | L | U | Y | ; | \ |
  262. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  263. * | BkSp | A | R | S | T | D |------| |------| H | N | E | I |O / L2| ' |
  264. * |--------+------+------+------+------+------| OVER | | Meh |------+------+------+------+------+--------|
  265. * | LShift |Z/Ctrl| X | C | V | B | | | | K | M | , | . |//Ctrl| RShift |
  266. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  267. * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
  268. * `----------------------------------' `----------------------------------'
  269. * ,-------------. ,-------------.
  270. * | App | LGui | | Alt |Ctrl/Esc|
  271. * ,------|------|------| |------+--------+------.
  272. * | | | Home | | PgUp | | |
  273. * | Space|Backsp|------| |------| Tab |Enter |
  274. * | |ace | End | | PgDn | | |
  275. * `--------------------' `----------------------'
  276. */
  277. // If it accepts an argument (i.e, is a function), it doesn't need KC_.
  278. // Otherwise, it needs KC_*
  279. [_WORKMAN] = LAYOUT_ergodox(
  280. // left hand
  281. KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(_MOUS),
  282. KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, TG(_DIABLO),
  283. KC_BSPC, KC_A, KC_S, KC_H, KC_T, KC_G,
  284. KC_LSFT, LCTL_T(KC_Z), KC_X, KC_M, KC_C, KC_V, TG(_OVERWATCH),
  285. LT(_SYMB,KC_GRV),KC_QUOT, KC_LGUI, KC_LBRACKET,KC_RBRACKET,
  286. ALT_T(KC_APP), KC_LEAD,
  287. KC_HOME,
  288. KC_SPC,KC_BSPC,KC_END,
  289. // right hand
  290. TG(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
  291. TG(_DIABLO), KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSLS,
  292. KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOTE,
  293. TG(_OVERWATCH),KC_K, KC_L, KC_COMM,KC_DOT, RCTL_T(KC_SLASH), KC_RSHIFT,
  294. KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TT(_SYMB),
  295. KC_LALT, CTL_T(KC_ESC),
  296. KC_PGUP,
  297. KC_PGDN,KC_DELETE, KC_ENT
  298. ),
  299. /* Keymap 3: Symbol Layer
  300. *
  301. * ,--------------------------------------------------. ,--------------------------------------------------.
  302. * | ESC | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
  303. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  304. * | VERSION| ! | @ | { | } | | | | | | + | 7 | 8 | 9 | * | F12 |
  305. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  306. * | MAKE | # | $ | ( | ) | ` |------| |------| - | 4 | 5 | 6 | / | PrtSc |
  307. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  308. * | RESET | % | ^ | [ | ] | ~ | | | | NUM | 1 | 2 | 3 | = | PAUSE |
  309. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  310. * | LT0 | & | * | : | ; | | | 0 | NUM. | ENT | ENT |
  311. * `----------------------------------' `----------------------------------'
  312. * ,-------------. ,-------------.
  313. * | RGBM | RED | | OFF | SOLID|
  314. * ,------|------|------| |------+------+------.
  315. * | | | GREEN| | | | |
  316. * | RGB | RGB |------| |------| NUM0 | NUME |
  317. * | DARK |BRITE | BLUE | | | | |
  318. * `--------------------' `--------------------'
  319. */
  320. [_SYMB] = LAYOUT_ergodox(
  321. KC_ESCAPE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_WORKMAN,
  322. VRSN, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_DVORAK,
  323. KC_MAKE, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRAVE,
  324. KC_RESET, KC_PERC, KC_CIRC, KC_LBRACKET,KC_RBRACKET,KC_TILD, KC_COLEMAK,
  325. KC_TRNS, KC_AMPR, KC_ASTR, KC_COLN, KC_SCOLON,
  326. KC_TRNS, KC_TRNS,
  327. KC_TRNS,
  328. KC_TRNS, KC_TRNS, KC_TRNS,
  329. KC_QWERTY, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
  330. KC_DVORAK, KC_KP_PLUS, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_ASTERISK, KC_F12,
  331. KC_KP_MINUS,KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_SLASH, KC_PSCREEN,
  332. KC_COLEMAK, KC_NUMLOCK, KC_KP_1, KC_KP_2, KC_KP_3, KC_EQUAL, KC_PAUSE,
  333. KC_KP_0, KC_KP_0, KC_KP_DOT, KC_KP_ENTER, KC_TRNS,
  334. KC_TRNS, KC_TRNS,
  335. KC_TRNS,
  336. KC_KP_DOT, KC_KP_0, KC_KP_ENTER
  337. ),
  338. /* Keymap 4: Customized Overwatch Layout
  339. *
  340. * ,--------------------------------------------------. ,--------------------------------------------------.
  341. * | ESC | | | | | | | | | F9 | F10 | F11 | F12 | | |
  342. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  343. * | F1 | K | Q | W | E | R | T | | | | | | | | |
  344. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  345. * | TAB | G | A | S | D | F |------| |------| | | | | | |
  346. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  347. * | LCTR | LSHFT| Z | X | C | V | | | | N | M | | | | |
  348. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  349. * | J | U | I | Y | T | | | | | | |
  350. * `----------------------------------' `----------------------------------'
  351. * ,-------------. ,-------------.
  352. * | O | P | | | |
  353. * ,------|------|------| |------+------+------.
  354. * | | | LGUI | | | | |
  355. * | V | SPACE|------ |------| | Enter|
  356. * | | | H | | | | |
  357. * `--------------------' `--------------------'
  358. */
  359. [_OVERWATCH] = LAYOUT_ergodox(
  360. KC_ESCAPE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  361. KC_F1, KC_K, KC_Q, KC_W, KC_E, KC_R, KC_T,
  362. KC_TAB, KC_G, KC_A, KC_S, KC_D, KC_F,
  363. KC_LCTL, KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_TRNS,
  364. KC_G, KC_U, KC_I, KC_Y, KC_T,
  365. KC_O, KC_P,
  366. KC_LGUI,
  367. KC_V, KC_SPACE, KC_H,
  368. KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO,
  369. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  370. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  371. TG(_OVERWATCH), KC_N, KC_M, KC_NO, KC_NO, KC_NO, KC_NO,
  372. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  373. KC_NO, KC_NO,
  374. KC_NO,
  375. KC_PGDOWN, KC_DELETE, KC_ENTER
  376. ),
  377. /* Keymap 3:
  378. *
  379. * ,--------------------------------------------------. ,--------------------------------------------------.
  380. * | ESC | V | D | ALT | | | | | | | | | | | |
  381. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  382. * | TAB | S | I | F | M | T | | | | | | | | | |
  383. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  384. * | Q | 1 | 2 | 3 | 4 | G |------| |------| | | | | | |
  385. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  386. * | NUMLOCK| NUM1 | NUM2 | NUM3 | NUM4 | Z | | | | | | | | | |
  387. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  388. * | LCTL | MAC1 | MAC2 | MAC3 | MAC4 | | | | | | |
  389. * `----------------------------------' `----------------------------------'
  390. * ,-------------. ,-------------.
  391. * | L | J | | | |
  392. * ,------|------|------| |------+------+------.
  393. * | | | G | | | | |
  394. * | SPACE| Q |------ |------| | |
  395. * | SHIFT| ALT | 0MAC | | | | |
  396. * `--------------------' `--------------------'
  397. */
  398. [_DIABLO] = LAYOUT_ergodox(
  399. KC_ESCAPE, KC_V, KC_D, KC_LALT, KC_NO, KC_NO, KC_NO,
  400. KC_TAB, KC_S, KC_F, KC_I, KC_M, KC_T, KC_TRNS,
  401. KC_Q, KC_1, KC_2, KC_3, KC_4, KC_G,
  402. KC_LCTL, TD(TD_DIABLO_1), TD(TD_DIABLO_2), TD(TD_DIABLO_3), TD(TD_DIABLO_4), KC_Z, KC_NO,
  403. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  404. KC_L, KC_J,
  405. KC_F,
  406. SFT_T(KC_SPACE), ALT_T(KC_Q), KC_DIABLO_CLEAR,
  407. KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO,
  408. KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  409. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  410. KC_NO, KC_N, KC_M, KC_NO, KC_NO, KC_NO, KC_NO,
  411. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  412. KC_NO, KC_NO,
  413. KC_NO,
  414. KC_PGDOWN, KC_DELETE, KC_ENTER
  415. ),
  416. /* Keymap 4: Media and mouse keys
  417. *
  418. * ,--------------------------------------------------. ,--------------------------------------------------.
  419. * | | | | | | | | | | | | | | | |
  420. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  421. * | | | MsUp | | | | | | | | | | | | |
  422. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  423. * | |MsLeft|MsDown|MsRght| | |------| |------| | | Acc0 | Acc1 | Acc2 | |
  424. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  425. * | | Acc0 | Acc1 | Acc2 | | | | | | | Mute |VolDn |VolUp | | |
  426. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  427. * | | | | | | | Play | Stop | | | |
  428. * `----------------------------------' `----------------------------------'
  429. * ,-------------. ,-------------.
  430. * | | | | | |
  431. * ,------|------|------| |------+------+------.
  432. * | | | MWUp | | | | |
  433. * | Lclk | Rclk |------| |------| MBn4 | MBn5 |
  434. * | | | MWDn | | Mclk | | |
  435. * `--------------------' `--------------------'
  436. */
  437. [_MOUS] = LAYOUT_ergodox(
  438. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
  439. KC_NO, KC_NO, KC_MS_U, KC_NO, KC_NO, KC_NO, KC_TRNS,
  440. KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_NO,
  441. KC_NO, KC_ACL0, KC_ACL1, KC_ACL2, KC_NO, KC_NO, KC_TRNS,
  442. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  443. KC_NO, KC_NO,
  444. KC_WH_U,
  445. KC_BTN1, KC_BTN2, KC_WH_D,
  446. KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  447. KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  448. KC_NO, KC_ACL0, KC_ACL1, KC_ACL2, KC_NO, KC_NO,
  449. KC_TRNS, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO,
  450. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  451. KC_NO,KC_NO,
  452. KC_NO,
  453. KC_MS_BTN3,KC_MS_BTN4,KC_MS_BTN5
  454. ),
  455. };
  456. bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
  457. return true;
  458. }
  459. #ifdef TAP_DANCE_ENABLE
  460. // Sends the key press to system, but only if on the Diablo layer
  461. void send_diablo_keystroke(uint8_t diablo_key) {
  462. if (biton32(layer_state) == _DIABLO) {
  463. switch (diablo_key) {
  464. case 0:
  465. SEND_STRING("1");
  466. break;
  467. case 1:
  468. SEND_STRING("2");
  469. break;
  470. case 2:
  471. SEND_STRING("3");
  472. break;
  473. case 3:
  474. SEND_STRING("4");
  475. break;
  476. }
  477. }
  478. }
  479. // Checks each of the 4 timers/keys to see if enough time has elapsed
  480. // Runs the "send string" command if enough time has passed, and resets the timer.
  481. void run_diablo_macro_check(void) {
  482. uint8_t dtime;
  483. for (dtime = 0; dtime < 4; dtime++) {
  484. if (check_dtimer(dtime) && diablo_key_time[dtime]) {
  485. diablo_timer[dtime] = timer_read();
  486. send_diablo_keystroke(dtime);
  487. }
  488. }
  489. }
  490. #endif
  491. void matrix_init_keymap(void) { // Runs boot tasks for keyboard
  492. };
  493. void matrix_scan_keymap(void) { // runs frequently to update info
  494. uint8_t modifiders = get_mods();
  495. if (!skip_leds) {
  496. ergodox_board_led_off();
  497. ergodox_right_led_1_off();
  498. ergodox_right_led_2_off();
  499. ergodox_right_led_3_off();
  500. // Since we're not using the LEDs here for layer indication anymore,
  501. // then lets use them for modifier indicators. Shame we don't have 4...
  502. // Also, no "else", since we want to know each, independantly.
  503. if (modifiders & MODS_SHIFT_MASK) {
  504. ergodox_right_led_2_on();
  505. }
  506. if (modifiders & MODS_CTRL_MASK) {
  507. ergodox_right_led_1_on();
  508. }
  509. if (modifiders & MODS_ALT_MASK) {
  510. ergodox_right_led_3_on();
  511. }
  512. }
  513. // Run Diablo 3 macro checking code.
  514. #ifdef TAP_DANCE_ENABLE
  515. run_diablo_macro_check();
  516. #endif
  517. };