keymap.c 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. #include "kinesis.h"
  2. #include "action_layer.h"
  3. #include "mousekey.h"
  4. #define QWERTY 0 // Base qerty
  5. #define SYMB 1// Symbol layer
  6. #define MOUSE 2//
  7. /* Macros */
  8. enum {
  9. NONE = 0,
  10. // Diagonal mouse movement
  11. A_MUL,
  12. A_MUR,
  13. A_MDL,
  14. A_MDR,
  15. };
  16. // Borrowing very heavily from
  17. // https://github.com/alvicstep/tmk_keyboard
  18. /****************************************************************************************************
  19. *
  20. * Keymap: Default Layer in Qwerty
  21. *
  22. * ,-------------------------------------------------------------------------------------------------------------------.
  23. * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F8 | F9 | F10 | F12 | FN0 | FN1 | FN2 | | bOOT |
  24. * |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
  25. * | =+ | 1! | 2@ | 3# | 4$ | 5% | | 6^ | 7& | 8* | 9( | 0) | -_ |
  26. * |--------+------+------+------+------+------| +------+------+------+------+------+--------|
  27. * | Tab | Q | W | E | R | T | | Y | U | I | O | P | \| |
  28. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  29. * |MouseFN1| A | S | D | F | G | | H | J | K | L | ;: | '" |
  30. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  31. * | Shift | Z | X | C | V | B | | N | M | ,. | .> | /? | Shift |
  32. * `--------+------+------+------+------+------- `------+------+------+------+------+--------'
  33. * | `~ | ESC |MOUSE1|MOUSE2| | [{ | ]} | ESC | GUI |
  34. * `---------------------------' `---------------------------'
  35. * ,-------------. ,-------------.
  36. * | Ctrl | Alt | | Gui | Ctrl |
  37. * ,------|------|------| |------+------+------.
  38. * | | | Home | | PgUp | | |
  39. * | BkSp | Del |------| |------|Return| Space|
  40. * | | | End | | PgDn | | |
  41. * `--------------------' `--------------------'
  42. */
  43. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  44. [QWERTY] = KEYMAP(
  45. KC_ESC, KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8,
  46. KC_EQL, KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,
  47. KC_TAB, KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,
  48. KC_FN1 ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,
  49. KC_LSFT,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,
  50. KC_GRV ,KC_ESC, KC_BTN1,KC_BTN2,
  51. KC_LCTL,KC_LALT,
  52. KC_HOME,
  53. KC_BSPC,KC_DEL ,KC_FN0 ,
  54. KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_FN0 ,KC_FN1 ,KC_FN2, KC_NO, RESET,
  55. KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MINS,
  56. KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_BSLS,
  57. KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN,KC_QUOT,
  58. KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_RSFT,
  59. KC_LBRC,KC_RBRC, KC_ESC, KC_RGUI,
  60. KC_RGUI,KC_RCTL,
  61. KC_PGUP,
  62. KC_PGDN,KC_ENTER ,KC_SPC
  63. ),
  64. [SYMB] = KEYMAP(
  65. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  66. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  67. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  68. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  69. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  70. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  71. KC_TRNS, KC_TRNS,
  72. KC_TRNS,
  73. KC_TRNS, KC_TRNS, KC_TRNS,
  74. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_FN0, KC_2,
  75. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  76. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  77. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  78. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  79. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  80. KC_TRNS, KC_TRNS,
  81. KC_TRNS,
  82. KC_TRNS, KC_TRNS, KC_TRNS
  83. ),
  84. /* Keymap: Movement and function layer
  85. *
  86. * ,-------------------------------------------------------------------------------------------------------------------.
  87. * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | F8 | F9 | F10 | F12 | FN0 | FN1 | FN2 | Tada | bOOT |
  88. * |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
  89. * | =+ | ! | @ | # | $ | % | | ^ | & | * | ( | ) |MS Fast |
  90. * |--------+------+------+------+------+------| +------+------+------+------+------+--------|
  91. * | Tab | | | Up | |PgUp | | MwU |MS_UL | MS_U |MS_UR | | Ms Norm|
  92. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  93. * |MouseFN1| C^A | Left | Down |Right | C^E | | | MS_L |Mouse1| MS_R | |MS Slow |
  94. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  95. * | | GuiZ | GUI X| GUI C| GUI_V|PgDown| | MWD | MDown|MS Dwn|MS_DR | ? | |
  96. * `--------+------+------+------+------+------- `------+------+------+------+------+--------'
  97. * | `~ | ESC | < | > | | { | } | ESC | |
  98. * `---------------------------' `---------------------------'
  99. * ,-------------. ,-------------.
  100. * | Ctrl | Alt | | Gui | Ctrl |
  101. * ,------|------|------| |------+------+------.
  102. * | | | Home | | PgUp | | |
  103. * | BkSp | Del |------| |------|Mouse1|Mouse2|
  104. * | | | End | | PgDn |LClick|Rclick|
  105. * `--------------------' `--------------------'
  106. */
  107. [MOUSE] = KEYMAP(
  108. KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  109. KC_TRNS, KC_EXLM ,KC_AT, KC_HASH, KC_DLR ,KC_PERC ,
  110. KC_TRNS, KC_NO, KC_NO, KC_UP, KC_NO, KC_PGUP,
  111. KC_FN1, LCTL(KC_A),KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_E),
  112. KC_TRNS, LGUI(KC_Z),LGUI(KC_X),LGUI(KC_C),LGUI(KC_V),KC_PGDN,
  113. KC_TRNS, KC_TRNS, KC_LABK, KC_RABK,
  114. KC_TRNS, KC_TRNS,
  115. KC_TRNS,
  116. KC_TRNS, KC_TRNS, KC_TRNS,
  117. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_FN0,RESET,
  118. KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_ACL2,
  119. KC_WH_U, M(A_MUL), KC_MS_U, M(A_MUR), KC_NO, KC_ACL1,
  120. KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_ACL0,
  121. KC_WH_D, M(A_MDL), KC_MS_D, M(A_MDR), KC_TRNS, KC_TRNS,
  122. KC_LCBR, KC_RCBR, KC_ESC, KC_TRNS,
  123. KC_TRNS, KC_TRNS,
  124. KC_TRNS,
  125. KC_TRNS, KC_BTN1, KC_BTN2
  126. ),
  127. };
  128. const uint16_t PROGMEM fn_actions[] = {
  129. [0] = ACTION_LAYER_TAP_TOGGLE(MOUSE) , // FN1 - Momentary Layer 1 (Symbols)
  130. [1] = ACTION_LAYER_TOGGLE(MOUSE) , // FN1 - Momentary Layer 1 (Symbols)
  131. [2] = ACTION_LAYER_TAP_TOGGLE(SYMB) , // FN1 - Momentary Layer 1 (Symbols)
  132. };
  133. const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
  134. {
  135. // MACRODOWN only works in this function
  136. switch(id) {
  137. case 0:
  138. if (record->event.pressed) {
  139. register_code(KC_RSFT);
  140. } else {
  141. unregister_code(KC_RSFT);
  142. }
  143. break;
  144. // from algernon's ErgoDox EZ layout,
  145. case A_MUL:
  146. if (record->event.pressed) {
  147. mousekey_on(KC_MS_UP);
  148. mousekey_on(KC_MS_LEFT);
  149. } else {
  150. mousekey_off(KC_MS_UP);
  151. mousekey_off(KC_MS_LEFT);
  152. }
  153. mousekey_send();
  154. break;
  155. case A_MUR:
  156. if (record->event.pressed) {
  157. mousekey_on(KC_MS_UP);
  158. mousekey_on(KC_MS_RIGHT);
  159. } else {
  160. mousekey_off(KC_MS_UP);
  161. mousekey_off(KC_MS_RIGHT);
  162. }
  163. mousekey_send();
  164. break;
  165. case A_MDL:
  166. if (record->event.pressed) {
  167. mousekey_on(KC_MS_DOWN);
  168. mousekey_on(KC_MS_LEFT);
  169. } else {
  170. mousekey_off(KC_MS_DOWN);
  171. mousekey_off(KC_MS_LEFT);
  172. }
  173. mousekey_send();
  174. break;
  175. case A_MDR:
  176. if (record->event.pressed) {
  177. mousekey_on(KC_MS_DOWN);
  178. mousekey_on(KC_MS_RIGHT);
  179. } else {
  180. mousekey_off(KC_MS_DOWN);
  181. mousekey_off(KC_MS_RIGHT);
  182. }
  183. mousekey_send();
  184. break;
  185. }
  186. return MACRO_NONE;
  187. };
  188. void matrix_init_user(void) {
  189. }
  190. void matrix_scan_user(void) {
  191. int8_t layer = biton32(layer_state);
  192. switch (layer) {
  193. case 1:
  194. all_led_off();
  195. break;
  196. case 2:
  197. if (!(host_keyboard_leds() & (1 << USB_LED_CAPS_LOCK))) {
  198. all_led_off();
  199. caps_lock_led_on();
  200. }
  201. break;
  202. case 0:
  203. all_led_off();
  204. num_lock_led_on();
  205. break;
  206. default:
  207. break;
  208. }
  209. }
  210. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  211. return true;
  212. }
  213. void led_set_user(uint8_t usb_led) {
  214. }