keymap.c 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661
  1. #include "ergodox.h"
  2. #include "debug.h"
  3. #include "action_layer.h"
  4. #include "version.h"
  5. #include <stdarg.h>
  6. /* use UK keymap */
  7. #define UK_HASH KC_NONUS_HASH
  8. #define UK_BSLS KC_NONUS_BSLASH
  9. #define UK_PIPE LSFT(UK_BSLS)
  10. #define BASE 0 // default layer
  11. #define SYMB 1 // symbols
  12. #define NUMB 2 // numbers and hex
  13. #define CRSR 3 // cursor keys
  14. #define MOUS 4 // mouse keys
  15. #define KEYW 5 // keyword macros
  16. #define EMAC 6 // emacs
  17. // my macros
  18. #define UM_ECET M(0) // { }
  19. #define UM_0x M(1)
  20. #define UM_PUB M(2)
  21. #define UM_PRO M(3)
  22. #define UM_PRV M(4)
  23. #define UM_CLS M(5)
  24. #define UM_STR M(6)
  25. #define UM_RET M(7)
  26. #define UM_INC M(8)
  27. #define UM_OBJ M(9)
  28. #define UM_GITLOG M(10)
  29. #define UM_GOODM M(11)
  30. #define UM_NAMESP M(12)
  31. #define UM_EMTR M(14) // emacs toggle read-only
  32. #define UM_EMWR M(15) // emacs write buffer (save)
  33. #define UM_EMUN M(16) // emacs undo
  34. #define UM_EMRE M(17) // emacs redo
  35. #define UM_EMPB M(18) // emacs previous buffer
  36. #define UM_EMNB M(19) // emacs next buffer
  37. #define UM_GOODN M(20)
  38. #define UM_ECETS M(22) // { };
  39. #define UM_TMPL M(23)
  40. #define UM_TYPN M(24)
  41. #define UM_CONT M(25)
  42. #define UM_BREAK M(26)
  43. #define UM_CONST M(27)
  44. #define UM_SMILY M(28)
  45. #define UM_SADF M(29)
  46. #define UM_SCARF M(30)
  47. #define UM_DECAF M(31)
  48. #define UM_OPER M(32)
  49. #define UM_NULP M(33)
  50. #define UM_EXTR M(34)
  51. #define UM_VIRT M(35)
  52. #define UM_EMFB M(36) // emacs font bigger
  53. #define UM_EMFS M(37) // emacs font smaller
  54. #define UM_VOLAT M(38)
  55. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  56. /* Keymap 0: Base layer
  57. *
  58. * ,--------------------------------------------------. ,--------------------------------------------------.
  59. * | ESC | 1 | 2 | 3 | 4 | 5 | SfLt | | SfRt | 6 | 7 | 8 | 9 | 0 | BkSp |
  60. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  61. * | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | Del |
  62. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  63. * | Caps/L2| A | S | D | F | G |------| |------| H | J | K | L | ; |Enter/L2|
  64. * |--------+------+------+------+------+------| L6 | | L6 |------+------+------+------+------+--------|
  65. * | LSft/( | Z | X | C | V/L3 | B/L4 | | | | N/L4 | M/L3 | , | . | / | RSft/) |
  66. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  67. * |Ctrl/[| Alt/]| # | Left |Right | | Up | Down | - | Alt/[|Ctrl/]|
  68. * `----------------------------------' `----------------------------------'
  69. * ,-------------. ,-------------.
  70. * | L2 | lead | | lead | Ins |
  71. * ,------|------|------| |------+------+------.
  72. * | Space| BkSp | Home | | PgUp | Enter|Space |
  73. * | / | / |------| |------| / | / |
  74. * | Ctrl | Alt |End/L5| |PDn/L5| Alt | Ctrl |
  75. * `--------------------' `--------------------'
  76. */
  77. [BASE] = KEYMAP( // layer 0 : default
  78. // left hand
  79. KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, LSFT(KC_LEFT),
  80. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, MO(SYMB),
  81. LT(NUMB, KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G,
  82. KC_LSPO, KC_Z, KC_X, KC_C, LT(CRSR, KC_V), LT(MOUS, KC_B), MO(EMAC),
  83. CTL_T(KC_LBRC), ALT_T(KC_RBRC), UK_HASH, KC_LEFT, KC_RGHT,
  84. TG(NUMB), KC_LEAD,
  85. KC_HOME,
  86. CTL_T(KC_SPC), ALT_T(KC_BSPC), LT(KEYW, KC_END),
  87. // right hand
  88. LSFT(KC_RGHT), KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
  89. MO(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DELT,
  90. KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(NUMB, KC_ENT),
  91. MO(EMAC), LT(MOUS, KC_N), LT(CRSR, KC_M), KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
  92. KC_UP, KC_DOWN, KC_MINS, ALT_T(KC_LBRC), CTL_T(KC_RBRC),
  93. KC_LEAD, KC_INS,
  94. KC_PGUP,
  95. LT(KEYW, KC_PGDN), ALT_T(KC_ENT), CTL_T(KC_SPC)
  96. ),
  97. /* Keymap 1: Symbol Layer with F keys
  98. *
  99. * ,--------------------------------------------------. ,--------------------------------------------------.
  100. * | ## | F1 | F2 | F3 | F4 | F5 | ## | | ## | F6 | F7 | F8 | F9 | F10 | F11 |
  101. * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
  102. * | ## | ! | " | £ | $ | % | ## | | ## | - | + | = | @ | ~ | F12 |
  103. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  104. * | ## | ^ | & | * | _ | # |------| |------| { | } | ; | ' | # | ## |
  105. * |--------+------+------+------+------+------| ## | | ## |------+------+------+------+------+--------|
  106. * | ## | \ | | | ` | - | / | | | | [ | ] | < | > | ? | ## |
  107. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  108. * | ## | ## | ## | ## | ## | | ## | ## | ## | ## | ## |
  109. * `----------------------------------' `----------------------------------'
  110. * ,-------------. ,-------------.
  111. * | ## | ## | | ## | ## |
  112. * ,------|------|------| |------+------+------.
  113. * | | | ## | | ## | | |
  114. * | ## | ## |------| |------| ## | ## |
  115. * | | | ## | | ## | | |
  116. * `--------------------' `--------------------'
  117. */
  118. [SYMB] = KEYMAP(
  119. // left hand
  120. KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
  121. KC_TRNS, KC_EXLM, LSFT(KC_2), LSFT(KC_3), LSFT(KC_4), LSFT(KC_5), KC_TRNS,
  122. KC_TRNS, LSFT(KC_6), LSFT(KC_7), LSFT(KC_8), LSFT(KC_MINS), UK_HASH,
  123. KC_TRNS, UK_BSLS, UK_PIPE, KC_GRV, KC_MINS, KC_SLSH, KC_TRNS,
  124. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  125. KC_TRNS, KC_TRNS,
  126. KC_TRNS,
  127. KC_TRNS, KC_TRNS, KC_TRNS,
  128. // right hand
  129. KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
  130. KC_TRNS, KC_MINS, KC_PLUS, KC_EQL, LSFT(KC_QUOT), LSFT(UK_HASH), KC_F12,
  131. KC_LCBR, KC_RCBR, KC_SCLN, KC_QUOT, UK_HASH, KC_TRNS,
  132. KC_TRNS, KC_LBRC, KC_RBRC, LSFT(KC_COMM), LSFT(KC_DOT), LSFT(KC_SLSH), KC_TRNS,
  133. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  134. KC_TRNS, KC_TRNS,
  135. KC_TRNS,
  136. KC_TRNS, KC_TRNS, KC_TRNS
  137. ),
  138. /* Keymap 2: Numerics and hex
  139. *
  140. * ,---------------------------------------------------. ,--------------------------------------------------.
  141. * | ## | A | B | C | D | E | F | | A | B | C | D | E | F | ## |
  142. * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
  143. * | ## | * | 7 | 8 | 9 | * | 0x | | 0x | * | 7 | 8 | 9 | * | ## |
  144. * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  145. * | ## | / | 4 | 5 | 6 | / |------| |------| / | 4 | 5 | 6 | / | ## |
  146. * |---------+------+------+------+------+------| ## | | ## |------+------+------+------+------+--------|
  147. * | ## | - | 1 | 2 | 3 | - | | | | - | 1 | 2 | 3 | - | ## |
  148. * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  149. * | = | + | 0 | , | . | | 0 | , | . | + | = |
  150. * `-----------------------------------' `----------------------------------'
  151. * ,-------------. ,-------------.
  152. * | ## | ## | | ## | ## |
  153. * ,------|------|------| |------+------+------.
  154. * | | | ## | | ## | | |
  155. * | ## | ## |------| |------| ## | ## |
  156. * | | | ## | | ## | | |
  157. * `--------------------' `--------------------'
  158. */
  159. [NUMB] = KEYMAP(
  160. // left hand
  161. KC_TRNS, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F,
  162. KC_TRNS, KC_ASTR, KC_7, KC_8, KC_9, KC_ASTR, UM_0x,
  163. KC_TRNS, KC_SLSH, KC_4, KC_5, KC_6, KC_SLSH,
  164. KC_TRNS, KC_MINS, KC_1, KC_2, KC_3, KC_MINS, KC_TRNS,
  165. KC_EQL, KC_PLUS, KC_0, KC_COMM, KC_DOT,
  166. KC_TRNS, KC_TRNS,
  167. KC_TRNS,
  168. KC_TRNS, KC_TRNS, KC_TRNS,
  169. // right hand
  170. KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_TRNS,
  171. UM_0x, KC_ASTR, KC_7, KC_8, KC_9, KC_ASTR, KC_TRNS,
  172. KC_SLSH, KC_4, KC_5, KC_6, KC_SLSH, KC_TRNS,
  173. KC_TRNS, KC_MINS, KC_1, KC_2, KC_3, KC_MINS, KC_TRNS,
  174. KC_0, KC_COMM, KC_DOT, KC_PLUS, KC_EQL,
  175. KC_TRNS, KC_TRNS,
  176. KC_TRNS,
  177. KC_TRNS, KC_TRNS, KC_TRNS
  178. ),
  179. /* Keymap 3: Cursor movement
  180. *
  181. * ,---------------------------------------------------. ,--------------------------------------------------.
  182. * | | | | | | | | | | | | | | | |
  183. * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
  184. * | | Home | | Up | | PgUp | | | | PgUp | | Up | | Home | |
  185. * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  186. * | | End | Left | Down | Right| PgDn |------| |------| PgDn | Left | Down | Right| End | |
  187. * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  188. * | ## | Up | | Down | ## | | | | | | ## | Down | | Up | ## |
  189. * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  190. * | Left | Down | Right| | | | | | Left | Down | Right|
  191. * `-----------------------------------' `----------------------------------'
  192. * ,-------------. ,-------------.
  193. * | | | | | |
  194. * ,------|------|------| |------+------+------.
  195. * | | | | | | | |
  196. * | ## | ## |------| |------| ## | ## |
  197. * | | | | | | | |
  198. * `--------------------' `--------------------'
  199. */
  200. [CRSR] = KEYMAP(
  201. // left hand
  202. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  203. KC_NO, KC_HOME, KC_NO, KC_UP, KC_NO, KC_PGUP, KC_NO,
  204. KC_NO, KC_END, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN,
  205. KC_TRNS, KC_UP, KC_NO, KC_DOWN, KC_TRNS, KC_NO, KC_NO,
  206. KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO,
  207. KC_NO, KC_NO,
  208. KC_NO,
  209. KC_TRNS, KC_TRNS, KC_NO,
  210. // right hand
  211. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  212. KC_NO, KC_PGUP, KC_NO, KC_UP, KC_NO, KC_HOME, KC_NO,
  213. KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_NO,
  214. KC_NO, KC_NO, KC_TRNS, KC_DOWN, KC_NO, KC_UP, KC_TRNS,
  215. KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT,
  216. KC_NO, KC_NO,
  217. KC_NO,
  218. KC_NO, KC_TRNS, KC_TRNS
  219. ),
  220. /* Keymap 4: Media and mouse keys
  221. *
  222. * ,--------------------------------------------------. ,--------------------------------------------------.
  223. * | | | | | | | | | | | | | | | |
  224. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  225. * | | | Lclk | MsUp | Rclk | | | | | | Lclk | MsUp | Rclk | | |
  226. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  227. * | | |MsLeft|MsDown|MsRght| |------| |------| |MsLeft|MsDown|MsRght| | |
  228. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  229. * | Lclk | MsUp | Rclk |MsDown| | ## | | | | ## | |MsDown| Lclk | MsUp | Rclk |
  230. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  231. * |MsLeft|MsDown|MsRight | | | | |MsLeft|MsDown|MsRght|
  232. * `----------------------------------' `----------------------------------'
  233. * ,-------------. ,-------------.
  234. * | | | | | |
  235. * ,------|------|------| |------+------+------.
  236. * | | | | | | | |
  237. * | | |------| |------| | |
  238. * | | | | | | | |
  239. * `--------------------' `--------------------'
  240. */
  241. [MOUS] = KEYMAP(
  242. // left hand
  243. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  244. KC_NO, KC_NO, KC_BTN1, KC_MS_U, KC_BTN2, KC_NO, KC_NO,
  245. KC_NO, KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO,
  246. KC_BTN1, KC_MS_U, KC_BTN2, KC_MS_D, KC_NO, KC_TRNS, KC_NO,
  247. KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_NO,
  248. KC_NO, KC_NO,
  249. KC_NO,
  250. KC_NO, KC_NO, KC_NO,
  251. // right hand
  252. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  253. KC_NO, KC_NO, KC_BTN1, KC_MS_U, KC_BTN2, KC_NO, KC_NO,
  254. KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_NO,
  255. KC_NO, KC_TRNS, KC_NO, KC_MS_D, KC_BTN1, KC_MS_U, KC_BTN2,
  256. KC_NO, KC_NO, KC_MS_L, KC_MS_D, KC_MS_R,
  257. KC_NO, KC_NO,
  258. KC_NO,
  259. KC_NO, KC_NO, KC_NO
  260. ),
  261. /* Keymap 5: Keywords
  262. *
  263. * ,---------------------------------------------------. ,--------------------------------------------------.
  264. * | | | | scarf| sadf | smily| | | | decaf| | | | | |
  265. * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
  266. * | | const| volat| oper | ret | tmpl | | | | typen| cont | prv | pro | pub | |
  267. * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  268. * | | | str | obj | | gitl |------| |------| | | | nulp | | |
  269. * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  270. * | | | extr | cls | virt | break| | | |namesp| goodm| goodn| | | |
  271. * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  272. * | | | inc | | | | | | | | |
  273. * `-----------------------------------' `----------------------------------'
  274. * ,-------------. ,-------------.
  275. * | | | | ecet | ecets|
  276. * ,------|------|------| |------+------+------.
  277. * | | | | | | | |
  278. * | | |------| |------| | |
  279. * | | | ## | | ## | | |
  280. * `--------------------' `--------------------'
  281. */
  282. [KEYW] = KEYMAP(
  283. // left hand
  284. KC_NO, KC_NO, KC_NO, UM_SCARF, UM_SADF, UM_SMILY, KC_NO,
  285. KC_NO, UM_CONST, UM_VOLAT, UM_OPER, UM_RET, UM_TMPL, KC_NO,
  286. KC_NO, KC_NO, UM_STR, UM_OBJ, KC_NO, UM_GITLOG,
  287. KC_NO, KC_NO, UM_EXTR, UM_CLS, UM_VIRT, UM_BREAK, KC_NO,
  288. KC_NO, KC_NO, UM_INC, KC_NO, KC_NO,
  289. KC_NO, KC_NO,
  290. KC_NO,
  291. KC_NO, KC_NO, KC_TRNS,
  292. // right hand
  293. KC_NO, UM_DECAF, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  294. KC_NO, UM_TYPN, UM_CONT, UM_PRV, UM_PRO, UM_PUB, KC_NO,
  295. KC_NO, KC_NO, KC_NO, UM_NULP, KC_NO, KC_NO,
  296. KC_NO, UM_NAMESP, UM_GOODM, UM_GOODN, KC_NO, KC_NO, KC_NO,
  297. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  298. UM_ECET, UM_ECETS,
  299. KC_NO,
  300. KC_TRNS, KC_NO, KC_NO
  301. ),
  302. /* Keymap 6: emacs
  303. *
  304. * ,---------------------------------------------------. ,--------------------------------------------------.
  305. * | | | | | | | empb | | emnb | emfs | emfb | | | | |
  306. * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
  307. * | | emtr | | | | | | | | emun | emre | w-up | | | |
  308. * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  309. * | | | emwr | | | |------| |------| |w-left|w-down|w-rght| | |
  310. * |---------+------+------+------+------+------| ## | | ## |------+------+------+------+------+--------|
  311. * | | | | | | | | | | | |w-down| | | |
  312. * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  313. * | | | | | | | | | | | |
  314. * `-----------------------------------' `----------------------------------'
  315. * ,-------------. ,-------------.
  316. * | | | | | |
  317. * ,------|------|------| |------+------+------.
  318. * | | | | | | | |
  319. * | | |------| |------| | |
  320. * | | | | | | | |
  321. * `--------------------' `--------------------'
  322. */
  323. [EMAC] = KEYMAP(
  324. // left hand
  325. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, UM_EMPB,
  326. KC_NO, UM_EMTR, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  327. KC_NO, KC_NO, UM_EMWR, KC_NO, KC_NO, KC_NO,
  328. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
  329. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  330. KC_NO, KC_NO,
  331. KC_NO,
  332. KC_NO, KC_NO, KC_NO,
  333. // right hand
  334. UM_EMNB, UM_EMFS, UM_EMFB, KC_NO, KC_NO, KC_NO, KC_NO,
  335. KC_NO, UM_EMUN, UM_EMRE, LSFT(KC_UP), KC_NO, KC_NO, KC_NO,
  336. KC_NO, LSFT(KC_LEFT), LSFT(KC_DOWN), LSFT(KC_RGHT), KC_NO, KC_NO,
  337. KC_TRNS, KC_NO, KC_NO, LSFT(KC_DOWN), KC_NO, KC_NO, KC_NO,
  338. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  339. KC_NO, KC_NO,
  340. KC_NO,
  341. KC_NO, KC_NO, KC_NO
  342. ),
  343. };
  344. enum next_key_down_up {
  345. NK_DOWN_UP,
  346. NK_DOWN,
  347. NK_UP // a bit of a hack, this works as long as NK_UP < KC_A
  348. };
  349. void send_keystrokes(uint8_t key, ...)
  350. {
  351. va_list vl;
  352. va_start(vl, key);
  353. enum next_key_down_up nkdu = NK_DOWN_UP;
  354. while (key != KC_NO) {
  355. if (key < KC_A) {
  356. nkdu = key;
  357. } else {
  358. switch (nkdu) {
  359. case NK_DOWN_UP:
  360. register_code(key);
  361. case NK_UP:
  362. unregister_code(key);
  363. break;
  364. case NK_DOWN:
  365. register_code(key);
  366. }
  367. nkdu = NK_DOWN_UP;
  368. }
  369. key = va_arg(vl, int);
  370. }
  371. va_end(vl);
  372. }
  373. const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
  374. {
  375. // MACRODOWN only works in this function
  376. switch(id) {
  377. case 0: // { }
  378. if (record->event.pressed) {
  379. return MACRO(T(ENT), D(LSFT), T(LBRC), U(LSFT), T(ENT),
  380. D(LSFT), T(RBRC), U(LSFT), T(UP),
  381. T(TAB), END);
  382. }
  383. break;
  384. case 1:
  385. if (record->event.pressed) {
  386. return MACRO(T(0), T(X), END);
  387. }
  388. break;
  389. case 2:
  390. if (record->event.pressed) {
  391. SEND_STRING("public");
  392. }
  393. break;
  394. case 3:
  395. if (record->event.pressed) {
  396. SEND_STRING("protected");
  397. }
  398. break;
  399. case 4:
  400. if (record->event.pressed) {
  401. SEND_STRING("private");
  402. }
  403. break;
  404. case 5: // class
  405. if (record->event.pressed) {
  406. return MACRO(T(C), T(L), T(A), T(S), T(S), T(ENT),
  407. D(LSFT), T(LBRC), U(LSFT), T(ENT),
  408. T(P), T(U), T(B), T(L), T(I), T(C),
  409. D(LSFT), T(SCLN), U(LSFT), T(ENT), T(ENT),
  410. T(P), T(R), T(I), T(V), T(A), T(T), T(E),
  411. D(LSFT), T(SCLN), U(LSFT), T(ENT),
  412. D(LSFT), T(RBRC), U(LSFT), T(SCLN), T(ENT),
  413. T(UP), T(UP), T(UP), T(UP), T(UP), T(UP), T(UP),
  414. T(END), T(SPC), END);
  415. }
  416. break;
  417. case 6: // struct
  418. if (record->event.pressed) {
  419. return MACRO(T(S), T(T), T(R), T(U), T(C), T(T), T(ENT),
  420. D(LSFT), T(LBRC), U(LSFT), T(ENT),
  421. D(LSFT), T(RBRC), U(LSFT), T(SCLN), T(ENT),
  422. T(UP), T(UP), T(UP), T(UP),
  423. T(END), T(SPC), END);
  424. }
  425. break;
  426. case 7:
  427. if (record->event.pressed) {
  428. SEND_STRING("return");
  429. }
  430. break;
  431. case 8: // #include
  432. if (record->event.pressed) {
  433. return MACRO(T(NONUS_HASH), T(I), T(N), T(C), T(L), T(U), T(D), T(E), END);
  434. }
  435. break;
  436. case 9:
  437. if (record->event.pressed) {
  438. SEND_STRING("objdump -CT -x -d");
  439. }
  440. break;
  441. case 10:
  442. if (record->event.pressed) {
  443. SEND_STRING("git log --oneline --graph --decorate=short");
  444. }
  445. break;
  446. case 11:
  447. if (record->event.pressed) {
  448. SEND_STRING("good morning");
  449. }
  450. break;
  451. case 12:
  452. if (record->event.pressed) {
  453. SEND_STRING("namespace");
  454. }
  455. break;
  456. case 14: // emacs toggle read-only
  457. if (record->event.pressed) {
  458. return MACRO(D(LCTL), T(X), T(Q), U(LCTL), END);
  459. }
  460. break;
  461. case 15: // emacs write buffer
  462. if (record->event.pressed) {
  463. return MACRO(D(LCTL), T(X), T(S), U(LCTL), END);
  464. }
  465. break;
  466. case 16: // emacs undo
  467. if (record->event.pressed) {
  468. return MACRO(D(LCTL), D(LSFT), T(MINS), U(LSFT), U(LCTL), END);
  469. }
  470. break;
  471. case 17: // emacs redo
  472. if (record->event.pressed) {
  473. return MACRO(D(LALT), D(LSFT), T(MINS), U(LSFT), U(LALT), END);
  474. }
  475. break;
  476. case 18: // emacs previous buffer
  477. if (record->event.pressed) {
  478. return MACRO(D(LCTL), T(X), U(LCTL), T(LEFT), END);
  479. }
  480. break;
  481. case 19: // emacs next buffer
  482. if (record->event.pressed) {
  483. return MACRO(D(LCTL), T(X), U(LCTL), T(RGHT), END);
  484. }
  485. break;
  486. case 20:
  487. if (record->event.pressed) {
  488. SEND_STRING("good night");
  489. }
  490. break;
  491. case 22: // { };
  492. if (record->event.pressed) {
  493. return MACRO(T(ENT), D(LSFT), T(LBRC), U(LSFT), T(ENT),
  494. D(LSFT), T(RBRC), U(LSFT), T(SCLN), T(UP),
  495. T(TAB), END);
  496. }
  497. break;
  498. case 23:
  499. if (record->event.pressed) {
  500. SEND_STRING("template");
  501. }
  502. break;
  503. case 24:
  504. if (record->event.pressed) {
  505. SEND_STRING("typename");
  506. }
  507. break;
  508. case 25:
  509. if (record->event.pressed) {
  510. SEND_STRING("continue");
  511. return MACRO(T(SCLN), END);
  512. }
  513. break;
  514. case 26:
  515. if (record->event.pressed) {
  516. SEND_STRING("break");
  517. return MACRO(T(SCLN), END);
  518. }
  519. break;
  520. case 27:
  521. if (record->event.pressed) {
  522. SEND_STRING("const");
  523. }
  524. break;
  525. case 28:
  526. if (record->event.pressed) {
  527. SEND_STRING(":-)");
  528. }
  529. break;
  530. case 29:
  531. if (record->event.pressed) {
  532. SEND_STRING(":-(");
  533. }
  534. break;
  535. case 30: // dazed
  536. if (record->event.pressed) {
  537. send_keystrokes(NK_DOWN, KC_LSFT, KC_8, KC_MINS, KC_8, NK_UP, KC_LSFT, KC_NO);
  538. }
  539. break;
  540. case 31: // decaf
  541. if (record->event.pressed) {
  542. send_keystrokes(NK_DOWN, KC_LSFT, KC_C, KC_9, KC_MINS, KC_0, NK_UP, KC_LSFT, KC_NO);
  543. }
  544. break;
  545. case 32:
  546. if (record->event.pressed) {
  547. SEND_STRING("operator");
  548. }
  549. break;
  550. case 33:
  551. if (record->event.pressed) {
  552. SEND_STRING("nullptr");
  553. }
  554. break;
  555. case 34:
  556. if (record->event.pressed) {
  557. SEND_STRING("extern");
  558. }
  559. break;
  560. case 35:
  561. if (record->event.pressed) {
  562. SEND_STRING("virtual");
  563. }
  564. break;
  565. case 36: // emacs font smaller
  566. if (record->event.pressed) {
  567. return MACRO(D(LCTL), T(X), T(EQL), U(LCTL), END);
  568. }
  569. break;
  570. case 37: // emacs font bigger
  571. if (record->event.pressed) {
  572. return MACRO(D(LCTL), T(X), T(MINS), U(LCTL), END);
  573. }
  574. break;
  575. case 38:
  576. if (record->event.pressed) {
  577. SEND_STRING("volatile");
  578. }
  579. break;
  580. }
  581. return MACRO_NONE;
  582. }
  583. LEADER_EXTERNS();
  584. // Runs constantly in the background, in a loop.
  585. void matrix_scan_user(void) {
  586. LEADER_DICTIONARY() {
  587. leading = false;
  588. leader_end();
  589. SEQ_TWO_KEYS(KC_G, KC_A) {
  590. SEND_STRING("git add .");
  591. }
  592. SEQ_TWO_KEYS(KC_G, KC_D) {
  593. SEND_STRING("git diff");
  594. }
  595. SEQ_THREE_KEYS(KC_G, KC_D, KC_S) {
  596. SEND_STRING("git diff --staged");
  597. }
  598. SEQ_TWO_KEYS(KC_G, KC_L) {
  599. SEND_STRING("git log");
  600. }
  601. SEQ_THREE_KEYS(KC_G, KC_L, KC_O) {
  602. SEND_STRING("git log --oneline");
  603. }
  604. SEQ_TWO_KEYS(KC_G, KC_F) {
  605. SEND_STRING("git fetch");
  606. }
  607. SEQ_TWO_KEYS(KC_G, KC_O) {
  608. SEND_STRING("git checkout");
  609. }
  610. SEQ_TWO_KEYS(KC_G, KC_P) {
  611. SEND_STRING("git pull");
  612. }
  613. SEQ_TWO_KEYS(KC_G, KC_S) {
  614. SEND_STRING("git status");
  615. }
  616. SEQ_TWO_KEYS(KC_G, KC_C) {
  617. SEND_STRING("git commit -m ''");
  618. send_keystrokes(KC_LEFT, KC_NO);
  619. }
  620. SEQ_THREE_KEYS(KC_G, KC_C, KC_A) {
  621. SEND_STRING("git commit --amend");
  622. }
  623. SEQ_TWO_KEYS(KC_C, KC_C) {
  624. SEND_STRING("const_cast<>");
  625. send_keystrokes(KC_LEFT, KC_NO);
  626. }
  627. SEQ_TWO_KEYS(KC_C, KC_D) {
  628. SEND_STRING("dynamic_cast<>");
  629. send_keystrokes(KC_LEFT, KC_NO);
  630. }
  631. SEQ_TWO_KEYS(KC_C, KC_R) {
  632. SEND_STRING("reinterpret_cast<>");
  633. send_keystrokes(KC_LEFT, KC_NO);
  634. }
  635. SEQ_TWO_KEYS(KC_C, KC_S) {
  636. SEND_STRING("static_cast<>");
  637. send_keystrokes(KC_LEFT, KC_NO);
  638. }
  639. SEQ_ONE_KEY(KC_SLSH) {
  640. send_keystrokes(KC_SLSH, NK_DOWN, KC_LSFT, KC_8, KC_8, NK_UP, KC_LSFT, KC_ENT,
  641. NK_DOWN, KC_LSFT, KC_8, NK_UP, KC_LSFT, KC_ENT,
  642. NK_DOWN, KC_LSFT, KC_8, NK_UP, KC_LSFT, KC_SLSH, KC_UP, KC_END, KC_SPC,
  643. KC_NO);
  644. }
  645. }
  646. }