]> git.gir.st - tmk_keyboard.git/blob - keyboard/infinity_chibios/keymap_hasu.c
Fix: Use action_t in keymap files
[tmk_keyboard.git] / keyboard / infinity_chibios / keymap_hasu.c
1 #include "keymap_common.h"
2
3 const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4 /* Layer 0: Default Layer
5 * ,-----------------------------------------------------------.
6 * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| `|BSp|
7 * |-----------------------------------------------------------|
8 * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
9 * |-----------------------------------------------------------|
10 * |Contro| A| S| D| F| G| H| J| K| L| ;| '|Enter |
11 * |-----------------------------------------------------------|
12 * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn0|
13 * |-----------------------------------------------------------'
14 * | |Gui|Alt | Space |Alt |Gui| | |
15 * `-----------------------------------------------------------'
16 */
17 [0] =
18 KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS,GRV, \
19 TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \
20 LCTL,A, S, D, F, G, H, J, K, L, FN3, QUOT,FN6, \
21 FN7, Z, X, C, V, B, N, M, COMM,DOT, FN2, RSFT,FN1, \
22 NO, LGUI,LALT, FN4, FN5, RGUI,NO, NO),
23
24 /* Layer 1: HHKB mode (HHKB Fn)
25 * ,-----------------------------------------------------------.
26 * |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
27 * |-----------------------------------------------------------|
28 * |Caps | | | | | | | |Psc|Slk|Pus|Up | |Backs|
29 * |-----------------------------------------------------------|
30 * | |VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig|Enter |
31 * |-----------------------------------------------------------|
32 * | | | | | | | +| -|End|PgD|Dow| | |
33 * `-----------------------------------------------------------'
34 * | |Gui|Alt | Space |Alt |Gui| | |
35 * `-----------------------------------------------------------'
36 */
37 [1] =
38 KEYMAP(PWR, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
39 CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS, UP, TRNS,BSPC, \
40 LCTL,VOLD,VOLU,MUTE,TRNS,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RGHT,ENT, \
41 LSFT,TRNS,TRNS,TRNS,TRNS,TRNS,PPLS,PMNS,END, PGDN,DOWN,RSFT,TRNS, \
42 TRNS,LGUI,LALT, TRNS, RALT,RGUI,TRNS,TRNS),
43
44 /* Layer 2: Vi mode[Slash]
45 * ,-----------------------------------------------------------.
46 * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
47 * |-----------------------------------------------------------|
48 * |Tab |Hom|PgD|Up |PgU|End|Hom|PgD|PgUlEnd| | | |Backs|
49 * |-----------------------------------------------------------|
50 * |Contro| |Lef|Dow|Rig| |Lef|Dow|Up |Rig| | |Return |
51 * |-----------------------------------------------------------|
52 * |Shift | | | | | |Hom|PgD|PgUlEnd|Fn0|Shift | |
53 * `-----------------------------------------------------------'
54 * |Gui|Alt | Space |Alt |Gui|
55 * `-------------------------------------------'
56 */
57 [2] = \
58 KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
59 TAB, HOME,PGDN,UP, PGUP,END, HOME,PGDN,PGUP,END, NO, NO, NO, BSPC, \
60 LCTL,NO, LEFT,DOWN,RGHT,NO, LEFT,DOWN,UP, RGHT,NO, NO, ENT, \
61 LSFT,NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, FN2, RSFT,TRNS, \
62 TRNS,LGUI,LALT, SPC, RALT,RGUI,TRNS,TRNS),
63
64 /* Layer 3: Mouse mode(IJKL)[Semicolon]
65 * ,-----------------------------------------------------------.
66 * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
67 * |-----------------------------------------------------------|
68 * |Tab | | | | | |MwL|MwD|McU|MwU|MwR|Wbk|Wfr|Alt-T|
69 * |-----------------------------------------------------------|
70 * |Contro| | | | | |Mb2|McL|McD|McR|Fn | |Return |
71 * |-----------------------------------------------------------|
72 * |Shift | | | | |Mb3|Mb2|Mb1|Mb4|Mb5| |Shift | |
73 * `-----------------------------------------------------------'
74 * |Gui |Alt | Mb1 |Fn |Fn |
75 * `--------------------------------------------'
76 * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
77 */
78 [3] = \
79 KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
80 FN8, NO, NO, NO, NO, NO, WH_L,WH_D,MS_U,WH_U,WH_R,FN9, FN10,FN8, \
81 LCTL,ACL0,ACL1,ACL2,ACL2,NO, NO, MS_L,MS_D,MS_R,FN3, NO, ENT, \
82 LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,FN9, FN10,NO, RSFT,TRNS, \
83 TRNS,LGUI,LALT, BTN1, TRNS,TRNS,TRNS,TRNS),
84
85 /* Layer 4: Mouse mode(IJKL)[Space]
86 * ,-----------------------------------------------------------.
87 * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
88 * |-----------------------------------------------------------|
89 * |Tab | | | | | |MwL|MwD|McU|MwU|MwR|Wbk|Wfr|Alt-T|
90 * |-----------------------------------------------------------|
91 * |Contro| | | | | |Mb2|McL|McD|McR|Mb1| |Return |
92 * |-----------------------------------------------------------|
93 * |Shift | | | | |Mb3|Mb2|Mb1|Mb4|Mb5| |Shift | |
94 * `-----------------------------------------------------------'
95 * |Gui |Alt | Mb1 |Fn |Fn |
96 * `--------------------------------------------'
97 * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
98 */
99 [4] = \
100 KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
101 FN8, NO, NO, NO, NO, NO, WH_L,WH_D,MS_U,WH_U,WH_R,BTN4,BTN5,FN8, \
102 LCTL,VOLD,VOLU,MUTE,NO, NO, NO, MS_L,MS_D,MS_R,BTN1,NO, ENT, \
103 LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,FN9, FN10,NO, RSFT,TRNS, \
104 TRNS,LGUI,LALT, TRNS, TRNS,TRNS,TRNS,TRNS),
105
106 };
107
108 /* id for user defined functions */
109 enum function_id {
110 LSHIFT_LPAREN,
111 };
112
113 enum macro_id {
114 HELLO,
115 VOLUP,
116 ALT_TAB,
117 };
118
119 /*
120 * Fn action definition
121 */
122 const action_t fn_actions[] = {
123 [0] = ACTION_DEFAULT_LAYER_SET(0), // Default layer(not used)
124 [1] = ACTION_LAYER_TAP_TOGGLE(1), // HHKB layer(toggle with 5 taps)
125 [2] = ACTION_LAYER_TAP_KEY(2, KC_SLASH), // Cursor layer with Slash*
126 [3] = ACTION_LAYER_TAP_KEY(3, KC_SCLN), // Mousekey layer with Semicolon*
127 [4] = ACTION_LAYER_TAP_KEY(4, KC_SPC), // Mousekey layer with Space
128 [5] = ACTION_LAYER_MOMENTARY(4), // Mousekey layer(IJKL)
129 [6] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_ENT), // RControl with tap Enter
130 [7] = ACTION_MODS_ONESHOT(MOD_LSFT), // Oneshot Shift
131 [8] = ACTION_MACRO(ALT_TAB), // Application switching
132 [9] = ACTION_MODS_KEY(MOD_LALT, KC_LEFT),
133 [10] = ACTION_MODS_KEY(MOD_LALT, KC_RIGHT),
134 };
135
136 /*
137 * Macro definition
138 */
139 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
140 {
141 switch (id) {
142 case HELLO:
143 return (record->event.pressed ?
144 MACRO( I(0), T(H), T(E), T(L), T(L), W(255), T(O), END ) :
145 MACRO_NONE );
146 case VOLUP:
147 return (record->event.pressed ?
148 MACRO( D(VOLU), U(VOLU), END ) :
149 MACRO_NONE );
150 case ALT_TAB:
151 return (record->event.pressed ?
152 MACRO( D(LALT), D(TAB), END ) :
153 MACRO( U(TAB), END ));
154 }
155 return MACRO_NONE;
156 }
157
158
159
160 /*
161 * user defined action function
162 */
163 void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
164 {
165 if (record->event.pressed) dprint("P"); else dprint("R");
166 dprintf("%d", record->tap.count);
167 if (record->tap.interrupted) dprint("i");
168 dprint("\n");
169
170 switch (id) {
171 case LSHIFT_LPAREN:
172 // Shift parentheses example: LShft + tap '('
173 // http://stevelosh.com/blog/2012/10/a-modern-space-cadet/#shift-parentheses
174 // http://geekhack.org/index.php?topic=41989.msg1304899#msg1304899
175 if (record->event.pressed) {
176 if (record->tap.count > 0 && !record->tap.interrupted) {
177 if (record->tap.interrupted) {
178 dprint("tap interrupted\n");
179 register_mods(MOD_BIT(KC_LSHIFT));
180 }
181 } else {
182 register_mods(MOD_BIT(KC_LSHIFT));
183 }
184 } else {
185 if (record->tap.count > 0 && !(record->tap.interrupted)) {
186 add_weak_mods(MOD_BIT(KC_LSHIFT));
187 send_keyboard_report();
188 register_code(KC_9);
189 unregister_code(KC_9);
190 del_weak_mods(MOD_BIT(KC_LSHIFT));
191 send_keyboard_report();
192 record->tap.count = 0; // ad hoc: cancel tap
193 } else {
194 unregister_mods(MOD_BIT(KC_LSHIFT));
195 }
196 }
197 break;
198 }
199 }
Imprint / Impressum