keymap.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625
  1. #include QMK_KEYBOARD_H
  2. #include "debug.h"
  3. #include "action_layer.h"
  4. #include "version.h"
  5. // to build this keymap
  6. // make ergodox_ez:dvorak_42_key:teensy
  7. // flashing from rpi:
  8. // sudo teensy_loader_cli -v -w .build/ergodox_ez_dvorak_42_key.hex --mcu atmega32u4
  9. // keeping fork up to date:
  10. // https://help.github.com/articles/configuring-a-remote-for-a-fork/
  11. // https://help.github.com/articles/syncing-a-fork/
  12. // pushing dev branch
  13. // git push origin dev:dev
  14. enum custom_keycodes {
  15. PLACEHOLDER = SAFE_RANGE, // can always be here
  16. EPRM,
  17. VRSN,
  18. RGB_SLD,
  19. // shell nav macros
  20. SHELL_LS,
  21. SHELL_LSLTR,
  22. SHELL_LSLA,
  23. SHELL_CDPRE,
  24. SHELL_LESS,
  25. SHELL_PLESS,
  26. SHELL_PGREP,
  27. SHELL_TAILF,
  28. SHELL_PWD,
  29. SHELL_H3,
  30. SHELL_AMMCOLO,
  31. SHELL_SCREENRD,
  32. SHELL_SCREEN_NEW,
  33. SHELL_SCREEN_LIST,
  34. SHELL_MKE,
  35. SHELL_HTCSTATUS,
  36. SHELL_HTCBOUNCE,
  37. SHELL_DUMPTLOG,
  38. SHELL_EXPAND_OE_LOGPATTERN,
  39. SHELL_EXPAND_OE_TRANPATTERN,
  40. // Cloud9 macros
  41. CLOUD9_TAB_LEFT,
  42. CLOUD9_TAB_RIGHT,
  43. CLOUD9_TAB_CLOSE,
  44. CLOUD9_GOTO_SYMBOL,
  45. CLOUD9_GOTO_LINE,
  46. CLOUD9_NAVIGATE,
  47. };
  48. #define BASE 0 // base dvorak layer
  49. #define KEYNAV 1 // arrow navigation (right hand)
  50. #define KEYSEL 2 // arrow navigation + shift (allow text selection)
  51. #define SHELL_NAV 3 // bash shortcuts
  52. #define SHELL_SCREEN 4 // linux screen shortcuts
  53. #define SCREEN_NAV 5 // navigate between linux screen tabs
  54. #define BROWSER_CONTROL 6 // control browser and mouse
  55. #define COMBINED 7 // combined numbers and symbols layer
  56. // macros
  57. #define SCREEN_TAB_LEFT 4
  58. #define SCREEN_TAB_RIGHT 5
  59. #define SCREEN_NEW_TAB 6
  60. #define SCREEN_COPY_MODE 8
  61. #define SCREEN_PASTE 9
  62. #define SCREEN_RENAME 10
  63. #define SCREEN_NUMBER 11
  64. #define SCREEN_0 12
  65. #define SCREEN_1 13
  66. #define SCREEN_2 14
  67. #define SCREEN_3 15
  68. #define SCREEN_4 16
  69. #define SCREEN_5 17
  70. #define SCREEN_6 18
  71. #define SCREEN_7 19
  72. #define SCREEN_8 20
  73. #define SCREEN_9 21
  74. #define SCREEN_DETACH 22
  75. #define SCREEN_UP_JUMP 23
  76. #define SCREEN_DOWN_JUMP 24
  77. #define SCREEN_READREG_1 25
  78. #define SCREEN_READREG_2 26
  79. #define SCREEN_READREG_3 27
  80. #define SCREEN_PASTEREG_1 28
  81. #define SCREEN_PASTEREG_2 29
  82. #define SCREEN_PASTEREG_3 30
  83. #define DEL_TO_HOME 36
  84. #define MACRO_SCREEN_NUM(MACRO_NAME,NUM) \
  85. case MACRO_NAME:\
  86. if (record->event.pressed) {\
  87. return MACRO( D(LCTL), T(A), U(LCTL), T(NUM), END);\
  88. }\
  89. break;\
  90. #define MACRO_SCREEN_REG(MACRO_NAME,NUM) \
  91. case MACRO_NAME:\
  92. if (record->event.pressed) {\
  93. return MACRO( D(LCTL), T(A), U(LCTL), D(LSFT), T(SCOLON), U(LSFT),\
  94. T(R),\
  95. T(E),\
  96. T(A),\
  97. T(D),\
  98. T(R),\
  99. T(E),\
  100. T(G),\
  101. T(SPC),\
  102. T(NUM),\
  103. T(ENTER),\
  104. END);\
  105. }\
  106. break;\
  107. #define MACRO_SCREEN_PASTE(MACRO_NAME,NUM)\
  108. case MACRO_NAME:\
  109. if (record->event.pressed) {\
  110. return MACRO( D(LCTL), T(A), U(LCTL), D(LSFT), T(SCOLON), U(LSFT),\
  111. T(P),\
  112. T(A),\
  113. T(S),\
  114. T(T),\
  115. T(E),\
  116. T(SPC),\
  117. T(NUM),\
  118. T(ENTER),\
  119. END);\
  120. }\
  121. break;\
  122. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  123. [BASE] = LAYOUT_ergodox(
  124. // left hand
  125. KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
  126. OSL(SCREEN_NAV), KC_QUOTE, KC_COMMA, KC_DOT, KC_P, KC_Y, MEH(KC_2),
  127. OSL(SHELL_NAV), KC_A, KC_O, KC_E, KC_U, KC_I,
  128. OSL(SHELL_SCREEN), KC_SCOLON, KC_Q, KC_J, KC_K, KC_X, MEH(KC_3),
  129. MEH(KC_1), OSM(MOD_LSFT), OSM(MOD_LCTL), MO(KEYSEL), MO(BROWSER_CONTROL),
  130. // left thumb cluster
  131. MEH(KC_4), MEH(KC_5),
  132. MEH(KC_6),
  133. MO(COMBINED),MO(KEYNAV), OSM(MOD_LALT),
  134. // right hand
  135. KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, MEH(KC_9),
  136. MEH(KC_7), KC_F, KC_G, KC_C, KC_R, KC_L, KC_TAB,
  137. KC_D, KC_H, KC_T, KC_N, KC_S, RCTL(KC_BSPC),
  138. MEH(KC_8), KC_B, KC_M, KC_W, KC_V, KC_Z, MEH(KC_F3),
  139. KC_BSPC, RCTL(KC_BSPC), KC_CAPSLOCK, OSM(MOD_LSFT),MEH(KC_F4),
  140. // right thumb cluster
  141. MEH(KC_F5),MEH(KC_F6),MEH(KC_F7),MEH(KC_F8),KC_ENTER,KC_SPACE
  142. ),
  143. [KEYNAV] = LAYOUT_ergodox(
  144. // left hand
  145. KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  146. KC_TRNS,KC_ESC, CLOUD9_GOTO_LINE, RCTL(KC_Z), RCTL(KC_S), MEH(KC_F10), KC_TRNS,
  147. KC_TRNS,KC_LSFT, CLOUD9_GOTO_SYMBOL, RSFT(KC_TAB), KC_TAB, MEH(KC_A),
  148. KC_TRNS,MEH(KC_B), CLOUD9_NAVIGATE, CLOUD9_TAB_LEFT, CLOUD9_TAB_RIGHT, CLOUD9_TAB_CLOSE, KC_TRNS,
  149. KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  150. // left thumb cluster
  151. KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
  152. // right hand
  153. KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MEH(KC_G),
  154. KC_TRNS,KC_NO, KC_HOME, KC_UP, KC_END, KC_PGUP, MEH(KC_H),
  155. LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT), MEH(KC_I),
  156. KC_TRNS,M(DEL_TO_HOME),RCTL(KC_C), RCTL(KC_X), RCTL(KC_V), KC_PGDOWN, MEH(KC_J),
  157. KC_BSPC, RCTL(KC_BSPC), KC_DELETE, LCTL(KC_DELETE), MEH(KC_K),
  158. // right thumb cluster
  159. KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS
  160. ),
  161. // key selection layer
  162. [KEYSEL] = LAYOUT_ergodox(
  163. // left hand
  164. KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  165. KC_TRNS,MEH(KC_G), MEH(KC_H),MEH(KC_I), MEH(KC_J), MEH(KC_K), KC_TRNS,
  166. KC_TRNS,MEH(KC_L), MEH(KC_M),MEH(KC_N), MEH(KC_O), MEH(KC_P),
  167. KC_TRNS,MEH(KC_Q), MEH(KC_R),MEH(KC_S), MEH(KC_T), MEH(KC_U), KC_TRNS,
  168. // bottom row
  169. RESET,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
  170. // thumb cluster
  171. KC_TRNS,KC_TRNS,
  172. KC_TRNS,
  173. KC_TRNS,KC_TRNS,KC_TRNS,
  174. // right hand
  175. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MEH(KC_Q),
  176. RSFT(KC_PGUP), KC_TRNS, RSFT(KC_HOME), RSFT(KC_UP), RSFT(KC_END), RSFT(KC_PGUP), MEH(KC_R),
  177. RSFT(RCTL(KC_LEFT)), RSFT(KC_LEFT), RSFT(KC_DOWN), RSFT(KC_RIGHT), RSFT(RCTL(KC_RIGHT)), MEH(KC_S),
  178. RSFT(KC_PGDN), KC_TRNS, RCTL(KC_C), RCTL(KC_X), RCTL(KC_V), RSFT(KC_PGDN), MEH(KC_T),
  179. // bottom row
  180. KC_BSPC, RCTL(KC_BSPC), KC_DELETE, LCTL(KC_DELETE), MEH(KC_U),
  181. // thumb cluster
  182. KC_TRNS, KC_TRNS,
  183. KC_TRNS,
  184. KC_TRNS, KC_TRNS, KC_TRNS
  185. ),
  186. // shell navigation layer
  187. [SHELL_NAV] = LAYOUT_ergodox(
  188. // left hand
  189. KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  190. KC_TRNS,KC_TRNS, SHELL_PGREP, SHELL_PLESS, SHELL_LESS, SHELL_HTCBOUNCE, SHELL_H3,
  191. KC_TRNS,SHELL_MKE, SHELL_CDPRE, SHELL_LSLTR, SHELL_LS, SHELL_LSLA,
  192. KC_TRNS,SHELL_SCREEN_LIST, SHELL_SCREENRD, SHELL_SCREEN_NEW, SHELL_TAILF, SHELL_HTCSTATUS, SHELL_AMMCOLO,
  193. // bottom row
  194. KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
  195. // thumb cluster
  196. KC_TRNS,KC_TRNS,
  197. KC_TRNS,
  198. KC_TRNS,KC_TRNS,KC_TRNS,
  199. // right hand
  200. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, SHELL_EXPAND_OE_TRANPATTERN,
  201. RCTL(KC_L), RCTL(KC_W), KC_HOME, KC_UP, KC_END, KC_TRNS, SHELL_EXPAND_OE_LOGPATTERN,
  202. LALT(KC_B), KC_LEFT, KC_DOWN, KC_RIGHT, LALT(KC_F), RCTL(KC_W),
  203. RCTL(KC_C), RCTL(KC_U), LALT(KC_DOT), RCTL(KC_R), MEH(KC_V), RCTL(KC_K), SHELL_DUMPTLOG,
  204. // bottom row (match functionality of base layer)
  205. KC_BSPC, RCTL(KC_W), KC_DELETE, LALT(KC_D), RCTL(KC_U),
  206. // thumb cluster
  207. KC_TRNS, KC_TRNS,
  208. KC_TRNS,
  209. KC_TRNS, KC_TRNS, KC_TRNS
  210. ),
  211. // linux screen layer
  212. [SHELL_SCREEN] = LAYOUT_ergodox(
  213. // left hand
  214. KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  215. KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  216. KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  217. KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  218. // bottom row
  219. KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
  220. // thumb cluster
  221. KC_TRNS,KC_TRNS,
  222. KC_TRNS,
  223. KC_TRNS,KC_TRNS,KC_TRNS,
  224. // right hand
  225. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  226. KC_TRNS, M(SCREEN_NEW_TAB), M(SCREEN_7), M(SCREEN_8), M(SCREEN_9), M(SCREEN_RENAME), KC_TRNS,
  227. M(SCREEN_TAB_LEFT), M(SCREEN_4), M(SCREEN_5), M(SCREEN_6), M(SCREEN_TAB_RIGHT), KC_TRNS,
  228. KC_TRNS, KC_TRNS, M(SCREEN_1), M(SCREEN_2), M(SCREEN_3), M(SCREEN_NUMBER), KC_TRNS,
  229. // bottom row
  230. M(SCREEN_0), KC_TRNS, KC_TRNS, KC_TRNS, M(SCREEN_DETACH),
  231. // thumb cluster
  232. KC_TRNS, KC_TRNS,
  233. KC_TRNS,
  234. KC_TRNS, KC_TRNS, KC_TRNS
  235. ),
  236. // navigation within screen (for copy/paste)
  237. [SCREEN_NAV] = LAYOUT_ergodox(
  238. // left hand
  239. // left hand
  240. KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  241. KC_TRNS,KC_TRNS, M(SCREEN_READREG_3), M(SCREEN_READREG_2), M(SCREEN_READREG_1), KC_TRNS, KC_TRNS,
  242. KC_TRNS,KC_TRNS, M(SCREEN_PASTEREG_3), M(SCREEN_PASTEREG_2), M(SCREEN_PASTEREG_1), KC_TRNS,
  243. KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  244. // bottom row
  245. KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
  246. // thumb cluster
  247. KC_TRNS,KC_TRNS,
  248. KC_TRNS,
  249. KC_TRNS,KC_TRNS,KC_TRNS,
  250. // right hand
  251. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  252. KC_TRNS, KC_TRNS, KC_0, KC_UP, KC_DLR, M(SCREEN_UP_JUMP), KC_TRNS,
  253. KC_B, KC_LEFT, KC_DOWN, KC_RIGHT, KC_W, M(SCREEN_COPY_MODE),
  254. KC_TRNS, KC_TRNS, S(KC_W), S(KC_Y), M(SCREEN_PASTE), M(SCREEN_DOWN_JUMP), MEH(KC_V),
  255. // bottom row (match functionality of base layer)
  256. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  257. // thumb cluster
  258. KC_TRNS, KC_TRNS,
  259. KC_TRNS,
  260. KC_TRNS, KC_TRNS, KC_TRNS
  261. ),
  262. [COMBINED] = LAYOUT_ergodox(
  263. // left hand
  264. KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  265. KC_TRNS,KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_TRNS,
  266. KC_TRNS,KC_LPRN, KC_RPRN, KC_LBRACKET, KC_RBRACKET, KC_UNDS,
  267. KC_TRNS,KC_COLN, KC_DQUO, KC_LCBR, KC_RCBR, KC_AMPR, KC_TRNS,
  268. // bottom row
  269. KC_TRNS,KC_TRNS, KC_TILD, KC_GRAVE, KC_CIRC,
  270. // thumb cluster
  271. KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
  272. // right hand
  273. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MEH(KC_L),
  274. KC_TRNS, KC_PLUS, KC_7, KC_8, KC_9, KC_ASTR, MEH(KC_M),
  275. KC_MINS, KC_4, KC_5, KC_6, KC_SLSH, MEH(KC_N),
  276. KC_TRNS, KC_EQUAL, KC_1, KC_2, KC_3, KC_QUES, MEH(KC_O),
  277. // bottom row
  278. KC_0, KC_DOT, KC_PIPE, KC_BSLS, MEH(KC_P),
  279. // thumb cluster
  280. KC_TRNS,KC_TRNS,
  281. KC_TRNS,
  282. KC_TRNS,KC_TRNS,KC_TRNS),
  283. [BROWSER_CONTROL] = LAYOUT_ergodox(
  284. // left hand
  285. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  286. KC_TRNS, KC_TRNS, KC_BTN3, KC_MS_U, KC_BTN1, KC_BTN2, KC_TRNS,
  287. KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
  288. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  289. // bottom row
  290. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  291. KC_TRNS, KC_TRNS,
  292. KC_TRNS,
  293. KC_TRNS, KC_TRNS, KC_TRNS,
  294. // right hand
  295. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  296. KC_TRNS, KC_UP, KC_PGUP, KC_PGDN, KC_MS_WH_UP, KC_TRNS, KC_TRNS,
  297. KC_DOWN, RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), KC_MS_WH_DOWN, LALT(KC_LEFT), KC_TRNS,
  298. KC_TRNS, KC_TRNS, RCTL(KC_1), RCTL(KC_9), KC_F6, KC_F5, KC_TRNS,
  299. // bottom row
  300. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  301. KC_TRNS, KC_TRNS,
  302. KC_TRNS,
  303. KC_TRNS, RCTL(KC_W), RCTL(KC_T)
  304. ),
  305. };
  306. const uint16_t PROGMEM fn_actions[] = {
  307. [1] = ACTION_LAYER_TAP_TOGGLE(1)
  308. };
  309. // leaving this in place for compatibilty with old keymaps cloned and re-compiled.
  310. const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
  311. {
  312. switch(id) {
  313. case SCREEN_TAB_LEFT:
  314. if (record->event.pressed) {
  315. return MACRO( D(LCTL), T(A), U(LCTL), T(P), END);
  316. }
  317. break;
  318. case SCREEN_TAB_RIGHT:
  319. if (record->event.pressed) {
  320. return MACRO( D(LCTL), T(A), U(LCTL), T(N), END);
  321. }
  322. break;
  323. case SCREEN_NEW_TAB:
  324. if (record->event.pressed) {
  325. return MACRO( D(LCTL), T(A), U(LCTL), T(C), END);
  326. }
  327. break;
  328. case SCREEN_DETACH:
  329. if (record->event.pressed) {
  330. return MACRO( D(LCTL), T(A), U(LCTL), T(D), END);
  331. }
  332. break;
  333. case SCREEN_RENAME:
  334. if (record->event.pressed) {
  335. return MACRO( D(LCTL), T(A), U(LCTL), D(LSFT), T(A), U(LSFT), END);
  336. }
  337. break;
  338. case SCREEN_NUMBER:
  339. if (record->event.pressed) {
  340. return MACRO( D(LCTL), T(A), U(LCTL), D(LSFT), T(SCOLON), U(LSFT),
  341. T(N),
  342. T(U),
  343. T(M),
  344. T(B),
  345. T(E),
  346. T(R),
  347. T(SPC),
  348. END);
  349. }
  350. break;
  351. MACRO_SCREEN_REG(SCREEN_READREG_1,1);
  352. MACRO_SCREEN_REG(SCREEN_READREG_2,2);
  353. MACRO_SCREEN_REG(SCREEN_READREG_3,3);
  354. MACRO_SCREEN_PASTE(SCREEN_PASTEREG_1,1);
  355. MACRO_SCREEN_PASTE(SCREEN_PASTEREG_2,2);
  356. MACRO_SCREEN_PASTE(SCREEN_PASTEREG_3,3);
  357. MACRO_SCREEN_NUM(SCREEN_0,0);
  358. MACRO_SCREEN_NUM(SCREEN_1,1);
  359. MACRO_SCREEN_NUM(SCREEN_2,2);
  360. MACRO_SCREEN_NUM(SCREEN_3,3);
  361. MACRO_SCREEN_NUM(SCREEN_4,4);
  362. MACRO_SCREEN_NUM(SCREEN_5,5);
  363. MACRO_SCREEN_NUM(SCREEN_6,6);
  364. MACRO_SCREEN_NUM(SCREEN_7,7);
  365. MACRO_SCREEN_NUM(SCREEN_8,8);
  366. MACRO_SCREEN_NUM(SCREEN_9,9);
  367. case SCREEN_UP_JUMP:
  368. if (record->event.pressed) {
  369. return MACRO( T(5), T(UP), END);
  370. }
  371. break;
  372. case SCREEN_DOWN_JUMP:
  373. if (record->event.pressed) {
  374. return MACRO( T(5), T(DOWN), END);
  375. }
  376. break;
  377. case SCREEN_COPY_MODE:
  378. if (record->event.pressed) {
  379. return MACRO( D(LCTL), T(A), U(LCTL), T(ESC), END);
  380. }
  381. break;
  382. case SCREEN_PASTE:
  383. if (record->event.pressed) {
  384. return MACRO( D(LCTL), T(A), U(LCTL), T(RBRC), END);
  385. }
  386. break;
  387. case DEL_TO_HOME:
  388. if (record->event.pressed) {
  389. return MACRO(
  390. // delete to the beginning of the line
  391. D(LSFT), T(HOME), U(LSFT),
  392. T(DELETE),
  393. END);
  394. }
  395. break;
  396. }
  397. return MACRO_NONE;
  398. };
  399. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  400. switch (keycode) {
  401. // dynamically generate these.
  402. case EPRM:
  403. if (record->event.pressed) {
  404. eeconfig_init();
  405. }
  406. return false;
  407. break;
  408. case VRSN:
  409. if (record->event.pressed) {
  410. SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
  411. }
  412. return false;
  413. break;
  414. case RGB_SLD:
  415. if (record->event.pressed) {
  416. rgblight_mode(1);
  417. }
  418. return false;
  419. break;
  420. }
  421. // shell macros
  422. if(record->event.pressed) {
  423. switch (keycode) {
  424. case SHELL_LS:
  425. SEND_STRING("ls\n");
  426. return true;
  427. break;
  428. case SHELL_LSLTR:
  429. SEND_STRING("ls -ltr\n");
  430. return true;
  431. break;
  432. case SHELL_LSLA:
  433. SEND_STRING("ls -la\n");
  434. return true;
  435. break;
  436. case SHELL_CDPRE:
  437. SEND_STRING("cd ..\n");
  438. return true;
  439. break;
  440. case SHELL_LESS:
  441. SEND_STRING("less ");
  442. return true;
  443. break;
  444. case SHELL_PLESS:
  445. SEND_STRING(" | less");
  446. return true;
  447. break;
  448. case SHELL_PGREP:
  449. SEND_STRING(" | grep ");
  450. return true;
  451. break;
  452. case SHELL_TAILF:
  453. SEND_STRING("tail -f ");
  454. return true;
  455. break;
  456. case SHELL_PWD:
  457. SEND_STRING("echo `pwd`/");
  458. return true;
  459. break;
  460. case SHELL_H3:
  461. SEND_STRING("h3\n");
  462. return true;
  463. break;
  464. case SHELL_AMMCOLO:
  465. SEND_STRING("ammcolo\n");
  466. return true;
  467. break;
  468. case SHELL_SCREENRD:
  469. SEND_STRING("screen -r -d ");
  470. return true;
  471. break;
  472. case SHELL_SCREEN_NEW:
  473. SEND_STRING("screen -S ");
  474. return true;
  475. break;
  476. case SHELL_SCREEN_LIST:
  477. SEND_STRING("screen -list\n");
  478. return true;
  479. break;
  480. case SHELL_MKE:
  481. SEND_STRING("mki -j8\n");
  482. return true;
  483. break;
  484. case SHELL_HTCSTATUS:
  485. SEND_STRING("htcStatus -j ");
  486. return true;
  487. break;
  488. case SHELL_HTCBOUNCE:
  489. SEND_STRING("htcBounce -j ");
  490. return true;
  491. break;
  492. case SHELL_EXPAND_OE_LOGPATTERN:
  493. SEND_STRING(SS_TAP(X_LEFT)"*CQW_HKEX"SS_TAP(X_END)"*.log"SS_LCTRL("x")SS_LSFT("8"));
  494. break;
  495. case SHELL_EXPAND_OE_TRANPATTERN:
  496. SEND_STRING(SS_TAP(X_LEFT)"*CQW_HKEX"SS_TAP(X_END)"*.tran"SS_LCTRL("x")SS_LSFT("8"));
  497. break;
  498. case SHELL_DUMPTLOG:
  499. SEND_STRING(" | dumptlog - ");
  500. return true;
  501. break;
  502. // Cloud9 macros
  503. case CLOUD9_TAB_LEFT:
  504. SEND_STRING(SS_LCTRL("["));
  505. return true;
  506. break;
  507. case CLOUD9_TAB_RIGHT:
  508. SEND_STRING(SS_LCTRL("]"));
  509. return true;
  510. break;
  511. case CLOUD9_TAB_CLOSE:
  512. SEND_STRING(SS_LALT("w"));
  513. return true;
  514. break;
  515. case CLOUD9_GOTO_SYMBOL:
  516. SEND_STRING(SS_LSFT(SS_LCTRL("e")));
  517. return true;
  518. break;
  519. case CLOUD9_GOTO_LINE:
  520. SEND_STRING(SS_LCTRL("g"));
  521. return true;
  522. break;
  523. case CLOUD9_NAVIGATE:
  524. SEND_STRING(SS_LCTRL("e"));
  525. return true;
  526. break;
  527. }
  528. }
  529. return true;
  530. }
  531. void led_set_user(uint8_t usb_led) {
  532. if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
  533. ergodox_right_led_1_on();
  534. } else {
  535. ergodox_right_led_1_off();
  536. }
  537. }
  538. void matrix_scan_user(void) {
  539. uint8_t layer = biton32(layer_state);
  540. ergodox_board_led_off();
  541. ergodox_right_led_2_off();
  542. ergodox_right_led_3_off();
  543. switch (layer) {
  544. case COMBINED:
  545. ergodox_right_led_2_on();
  546. break;
  547. case SHELL_NAV:
  548. case SHELL_SCREEN:
  549. case KEYNAV:
  550. case KEYSEL:
  551. case SCREEN_NAV:
  552. ergodox_right_led_3_on();
  553. break;
  554. case BROWSER_CONTROL:
  555. ergodox_right_led_2_on();
  556. ergodox_right_led_3_on();
  557. break;
  558. default:
  559. break;
  560. }
  561. };