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