keymap.c 25 KB

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