Keyboard firmwares for Atmel AVR and Cortex-M
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

keymap_hasu.c 12KB

13 vuotta sitten
13 vuotta sitten
13 vuotta sitten
11 vuotta sitten
11 vuotta sitten
11 vuotta sitten
13 vuotta sitten
13 vuotta sitten
11 vuotta sitten
11 vuotta sitten
11 vuotta sitten
11 vuotta sitten
11 vuotta sitten
11 vuotta sitten
11 vuotta sitten
11 vuotta sitten
11 vuotta sitten
11 vuotta sitten
11 vuotta sitten
13 vuotta sitten
11 vuotta sitten
11 vuotta sitten
11 vuotta sitten
11 vuotta sitten
11 vuotta sitten
11 vuotta sitten
11 vuotta sitten
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. /*
  2. * Hasu: my personal keymap
  3. */
  4. #include "keymap_common.h"
  5. #ifdef KEYMAP_SECTION_ENABLE
  6. const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] __attribute__ ((section (".keymap.keymaps"))) = {
  7. #else
  8. const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
  9. #endif
  10. /* Layer 0: Default Layer
  11. * ,-----------------------------------------------------------.
  12. * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|
  13. * |-----------------------------------------------------------|
  14. * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Backs|
  15. * |-----------------------------------------------------------|
  16. * |Contro| A| S| D| F| G| H| J| K| L|Fn3| '|Fn4 |
  17. * |-----------------------------------------------------------|
  18. * |Fn5 | Z| X| C| V| B| N| M| ,| .|Fn2|Shift |Fn1|
  19. * `-----------------------------------------------------------'
  20. * |Gui|Alt | Fn6 |Alt |Fn7|
  21. * `-------------------------------------------'
  22. */
  23. KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS,GRV, \
  24. TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \
  25. LCTL,A, S, D, F, G, H, J, K, L, FN3, QUOT,FN4, \
  26. FN5, Z, X, C, V, B, N, M, COMM,DOT, FN2, RSFT,FN1, \
  27. LGUI,LALT, FN6, RALT,RGUI),
  28. /* Layer 1: HHKB mode (HHKB Fn)
  29. * ,-----------------------------------------------------------.
  30. * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
  31. * |-----------------------------------------------------------|
  32. * |Caps | | | | | | | |Psc|Slk|Pus|Up | |Backs|
  33. * |-----------------------------------------------------------|
  34. * |Contro|VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig|Enter |
  35. * |-----------------------------------------------------------|
  36. * |Shift | | | | | | +| -|End|PgD|Dow|Shift | |
  37. * `-----------------------------------------------------------'
  38. * |Gui|Alt | Space |Alt |Gui|
  39. * `-------------------------------------------'
  40. */
  41. KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
  42. CAPS,NO, NO, NO, NO, NO, NO, NO, PSCR,SLCK,PAUS, UP, NO, BSPC, \
  43. LCTL,VOLD,VOLU,MUTE,NO, FN9, PAST,PSLS,HOME,PGUP,LEFT,RGHT,ENT, \
  44. LSFT,NO, NO, NO, NO, NO, PPLS,PMNS,END, PGDN,DOWN,RSFT,TRNS, \
  45. LGUI,LALT, SPC, RALT,RGUI),
  46. /* Layer 2: Vi mode (Slash)
  47. * ,-----------------------------------------------------------.
  48. * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
  49. * |-----------------------------------------------------------|
  50. * |Tab |Hom|PgD|Up |PgU|End|Hom|PgD|PgUlEnd| | | |Backs|
  51. * |-----------------------------------------------------------|
  52. * |Contro| |Lef|Dow|Rig| |Lef|Dow|Up |Rig| | |Return |
  53. * |-----------------------------------------------------------|
  54. * |Shift | | | | | |Hom|PgD|PgUlEnd|Fn0|Shift | |
  55. * `-----------------------------------------------------------'
  56. * |Gui|Alt | Space |Alt |Gui|
  57. * `-------------------------------------------'
  58. */
  59. KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
  60. TAB, HOME,PGDN,UP, PGUP,END, HOME,PGDN,PGUP,END, NO, NO, NO, BSPC, \
  61. LCTL,NO, LEFT,DOWN,RGHT,NO, LEFT,DOWN,UP, RGHT,NO, NO, ENT, \
  62. LSFT,NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, TRNS,RSFT,NO, \
  63. LGUI,LALT, SPC, RALT,RGUI),
  64. /* Layer 3: Mouse mode (Semicolon)
  65. * ,-----------------------------------------------------------.
  66. * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
  67. * |-----------------------------------------------------------|
  68. * |Tab | | | | | |MwL|MwD|MwU|MwR| | | |Backs|
  69. * |-----------------------------------------------------------|
  70. * |Contro| | | | | |McL|McD|McU|McR|Fn0| |Return |
  71. * |-----------------------------------------------------------|
  72. * |Shift | | | | |Mb3|Mb2|Mb1|Mb4|Mb5| |Shift | |
  73. * `-----------------------------------------------------------'
  74. * |Gui |Alt | Mb1 |Alt |Fn0|
  75. * `--------------------------------------------'
  76. * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
  77. */
  78. KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
  79. TAB, NO, NO, NO, NO, NO, WH_L,WH_D,WH_U,WH_R,NO, NO, NO, BSPC, \
  80. LCTL,NO, ACL0,ACL1,ACL2,NO, MS_L,MS_D,MS_U,MS_R,TRNS,QUOT,ENT, \
  81. LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,BTN4,BTN5,SLSH,RSFT,NO, \
  82. LGUI,LALT, BTN1, RALT,TRNS),
  83. /* Layer 4: Matias half-qwerty keyboard style (Space)
  84. * ,-----------------------------------------------------------.
  85. * | -| 0| 9| 8| 7| 6| 5| 4| 3| 2| 1| | | |Esc|
  86. * |-----------------------------------------------------------|
  87. * |Backs| P| O| I| U| Y| T| R| E| W| Q| | |Tab |
  88. * |-----------------------------------------------------------|
  89. * |Contro| ;| L| K| J| H| G| F| D| S| A|Con|Control |
  90. * |-----------------------------------------------------------|
  91. * |Shift | /| .| ,| M| N| B| V| C| X| Z|Shift | |
  92. * `-----------------------------------------------------------'
  93. * |Gui |Alt | Fn0 |Alt |Gui|
  94. * `--------------------------------------------'
  95. */
  96. KEYMAP(MINS,0, 9, 8, 7, 6, 5, 4, 3, 2, 1, NO, NO, NO, ESC, \
  97. BSPC,P, O, I, U, Y, T, R, E, W, Q, NO, NO, TAB, \
  98. LCTL,SCLN,L, K, J, H, G, F, D, S, A, RCTL,RCTL, \
  99. LSFT,SLSH,DOT, COMM,M, N, B, V, C, X, Z, RSFT,NO, \
  100. LGUI,LALT, TRNS, RALT,RGUI),
  101. /* Layer5: another Mouse mode (Space)
  102. * ,-----------------------------------------------------------.
  103. * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
  104. * |-----------------------------------------------------------|
  105. * |Tab | | | | | |MwL|MwD|MwU|MwR| |Wbk|Wfr|Close|
  106. * |-----------------------------------------------------------|
  107. * |Contro| | | | | |McL|McD|McU|McR|Fn0| |Return |
  108. * |-----------------------------------------------------------|
  109. * |Shift | | | | |Mb3|Mb2|Mb1|Mb4|Mb5| |Shift | |
  110. * `-----------------------------------------------------------'
  111. * |Gui |Alt | Fn0 |Alt |Fn0|
  112. * `--------------------------------------------'
  113. * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
  114. */
  115. KEYMAP(ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
  116. TAB, NO, NO, NO, NO, NO, WH_L,WH_D,WH_U,WH_R,WSTP,WBAK,WFWD,FN8, \
  117. LCTL,NO, ACL0,ACL1,ACL2,NO, MS_L,MS_D,MS_U,MS_R,NO, NO, ENT, \
  118. LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,BTN4,BTN5,NO, RSFT,NO, \
  119. LGUI,LALT, TRNS, RALT,RGUI),
  120. };
  121. /* id for user defined functions */
  122. enum function_id {
  123. LSHIFT_LPAREN,
  124. RSHIFT_RPAREN,
  125. };
  126. enum macro_id {
  127. LSHIFT_PAREN,
  128. RSHIFT_PAREN,
  129. HELLO,
  130. VOLUP,
  131. };
  132. /*
  133. * Fn action definition
  134. */
  135. #ifdef KEYMAP_SECTION_ENABLE
  136. const uint16_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
  137. #else
  138. const uint16_t fn_actions[] PROGMEM = {
  139. #endif
  140. [0] = ACTION_DEFAULT_LAYER_SET(0), // Default layer(not used)
  141. [1] = ACTION_LAYER_TAP_TOGGLE(1), // HHKB layer(toggle with 5 taps)
  142. [2] = ACTION_LAYER_TAP_KEY(2, KC_SLASH), // Cursor layer with Slash*
  143. [3] = ACTION_LAYER_TAP_KEY(3, KC_SCLN), // Mousekey layer with Semicolon*
  144. [4] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_ENT), // RControl with tap Enter*
  145. [5] = ACTION_MODS_ONESHOT(MOD_LSFT), // Oneshot Shift*
  146. [6] = ACTION_LAYER_TAP_KEY(5, KC_SPC), // Mousekey layer with Space
  147. [7] = ACTION_LAYER_TOGGLE(3), // Mousekey layer(toggle)
  148. [8] = ACTION_MODS_KEY(MOD_LCTL, KC_W), // Close Tab
  149. [9] = ACTION_MODS_KEY(MOD_LSFT, KC_4), // Shift stuck test
  150. // [8] = ACTION_LMOD_TAP_KEY(KC_LCTL, KC_BSPC), // LControl with tap Backspace
  151. // [9] = ACTION_LMOD_TAP_KEY(KC_LCTL, KC_ESC), // LControl with tap Esc
  152. [11] = ACTION_FUNCTION_TAP(LSHIFT_LPAREN), // Function: LShift with tap '('
  153. [12] = ACTION_FUNCTION_TAP(RSHIFT_RPAREN), // Function: RShift with tap ')'
  154. // [13] = ACTION_MACRO_TAP(LSHIFT_PAREN), // Macro: LShift with tap '('
  155. // [14] = ACTION_MACRO_TAP(RSHIFT_PAREN), // Macro: RShift with tap ')'
  156. // [15] = ACTION_MACRO(HELLO), // Macro: say hello
  157. // [9] = ACTION_MACRO(VOLUP), // Macro: media key
  158. };
  159. /*
  160. * Macro definition
  161. */
  162. const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
  163. {
  164. keyevent_t event = record->event;
  165. tap_t tap = record->tap;
  166. switch (id) {
  167. case LSHIFT_PAREN:
  168. if (tap.count > 0 && !tap.interrupted) {
  169. return (event.pressed ?
  170. MACRO( D(LSHIFT), D(9), U(9), U(LSHIFT), END ) : MACRO_NONE);
  171. } else {
  172. return (event.pressed ?
  173. MACRO( D(LSHIFT), END ) : MACRO( U(LSHIFT), END ) );
  174. }
  175. case RSHIFT_PAREN:
  176. if (tap.count > 0 && !tap.interrupted) {
  177. return (event.pressed ?
  178. MACRO( D(RSHIFT), D(0), U(0), U(RSHIFT), END ) : MACRO_NONE);
  179. } else {
  180. return (event.pressed ?
  181. MACRO( D(RSHIFT), END ) : MACRO( U(RSHIFT), END ) );
  182. }
  183. case HELLO:
  184. return (event.pressed ?
  185. MACRO( I(0), T(H), T(E), T(L), T(L), W(255), T(O), END ) :
  186. MACRO_NONE );
  187. case VOLUP:
  188. return (event.pressed ?
  189. MACRO( D(VOLU), U(VOLU), END ) :
  190. MACRO_NONE );
  191. }
  192. return MACRO_NONE;
  193. }
  194. /*
  195. * user defined action function
  196. */
  197. void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
  198. {
  199. keyevent_t event = record->event;
  200. tap_t tap = record->tap;
  201. switch (id) {
  202. case LSHIFT_LPAREN:
  203. // LShft + tap '('
  204. // NOTE: cant use register_code to avoid conflicting with magic key bind
  205. if (event.pressed) {
  206. if (tap.count == 0 || tap.interrupted) {
  207. //add_mods(MOD_BIT(KC_LSHIFT));
  208. layer_on(1);
  209. } else {
  210. add_mods(MOD_BIT(KC_LSHIFT));
  211. add_key(KC_9);
  212. send_keyboard_report();
  213. del_mods(MOD_BIT(KC_LSHIFT));
  214. del_key(KC_9);
  215. send_keyboard_report();
  216. }
  217. } else {
  218. if (tap.count == 0 || tap.interrupted) {
  219. //del_mods(MOD_BIT(KC_LSHIFT));
  220. layer_off(1);
  221. }
  222. }
  223. break;
  224. case RSHIFT_RPAREN:
  225. // RShift + tap ')'
  226. if (event.pressed) {
  227. if (tap.count == 0 || tap.interrupted) {
  228. add_mods(MOD_BIT(KC_RSHIFT));
  229. } else {
  230. add_mods(MOD_BIT(KC_RSHIFT));
  231. add_key(KC_0);
  232. send_keyboard_report();
  233. del_mods(MOD_BIT(KC_RSHIFT));
  234. del_key(KC_0);
  235. send_keyboard_report();
  236. }
  237. } else {
  238. if (tap.count == 0 || tap.interrupted) {
  239. del_mods(MOD_BIT(KC_RSHIFT));
  240. }
  241. }
  242. break;
  243. }
  244. }