aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornstickney <nstickney@gmail.com>2017-03-07 22:30:43 -0600
committernstickney <nstickney@gmail.com>2017-03-07 22:30:43 -0600
commit4880e72b77cd934dfc2e9ae4397bd7466ca002e5 (patch)
tree397c55a300d621913eb60bad8d722b12bc8e7778
parenteab0166f832f3cca88059d87374426e6b017beff (diff)
downloadqmk_firmware-4880e72b77cd934dfc2e9ae4397bd7466ca002e5.tar.gz
qmk_firmware-4880e72b77cd934dfc2e9ae4397bd7466ca002e5.zip
SLASH and WHACK functions added (based on algernon's CT_TA)
-rw-r--r--keyboards/ergodox/config.h2
-rw-r--r--keyboards/ergodox/keymaps/familiar/Makefile5
-rw-r--r--keyboards/ergodox/keymaps/familiar/config.h37
-rw-r--r--keyboards/ergodox/keymaps/familiar/keymap.c146
4 files changed, 157 insertions, 33 deletions
diff --git a/keyboards/ergodox/config.h b/keyboards/ergodox/config.h
index 361859832..994a8c643 100644
--- a/keyboards/ergodox/config.h
+++ b/keyboards/ergodox/config.h
@@ -34,4 +34,4 @@
34#endif 34#endif
35 35
36 36
37#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */ \ No newline at end of file 37#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */
diff --git a/keyboards/ergodox/keymaps/familiar/Makefile b/keyboards/ergodox/keymaps/familiar/Makefile
new file mode 100644
index 000000000..f795271f0
--- /dev/null
+++ b/keyboards/ergodox/keymaps/familiar/Makefile
@@ -0,0 +1,5 @@
1TAP_DANCE_ENABLE = yes
2
3ifndef QUANTUM_DIR
4 include ../../../../Makefile
5endif
diff --git a/keyboards/ergodox/keymaps/familiar/config.h b/keyboards/ergodox/keymaps/familiar/config.h
new file mode 100644
index 000000000..994a8c643
--- /dev/null
+++ b/keyboards/ergodox/keymaps/familiar/config.h
@@ -0,0 +1,37 @@
1#ifndef KEYBOARDS_ERGODOX_CONFIG_H_
2#define KEYBOARDS_ERGODOX_CONFIG_H_
3
4#define MOUSEKEY_INTERVAL 20
5#define MOUSEKEY_DELAY 0
6#define MOUSEKEY_TIME_TO_MAX 5
7#define MOUSEKEY_MAX_SPEED 2
8#define MOUSEKEY_WHEEL_DELAY 0
9
10#define TAPPING_TOGGLE 1
11
12/* define if matrix has ghost */
13//#define MATRIX_HAS_GHOST
14
15#define TAPPING_TERM 200
16#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.)
17
18/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
19#define LOCKING_SUPPORT_ENABLE
20/* Locking resynchronize hack */
21#define LOCKING_RESYNC_ENABLE
22
23/* key combination for command */
24#define IS_COMMAND() ( \
25 keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \
26 keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \
27)
28
29#ifdef SUBPROJECT_ez
30 #include "ez/config.h"
31#endif
32#ifdef SUBPROJECT_infinity
33 #include "infinity/config.h"
34#endif
35
36
37#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */
diff --git a/keyboards/ergodox/keymaps/familiar/keymap.c b/keyboards/ergodox/keymaps/familiar/keymap.c
index e79e96109..c4ecdee51 100644
--- a/keyboards/ergodox/keymaps/familiar/keymap.c
+++ b/keyboards/ergodox/keymaps/familiar/keymap.c
@@ -8,13 +8,14 @@
8#define NUMP 2 // numpad 8#define NUMP 2 // numpad
9#define INTL 3 // international symbols 9#define INTL 3 // international symbols
10 10
11#define _______ KC_TRNS // Make the layouts easier to read 11// Fillers to make layering more clear
12#define _______ KC_TRNS
13#define XXXXXXX KC_NO
12 14
13enum custom_keycodes { 15// Tap Dance Codes
14 PLACEHOLDER = SAFE_RANGE, // can always be here 16enum {
15 EPRM, 17 SLASH,
16 VRSN, 18 WHACK,
17 RGB_SLD
18}; 19};
19 20
20const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 21const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -23,51 +24,51 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
23/* layer 0 : default 24/* layer 0 : default
24 * 25 *
25 * ,--------------------------------------------------. ,--------------------------------------------------. 26 * ,--------------------------------------------------. ,--------------------------------------------------.
26 * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | - | = | BCKSPC | 27 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | - | = | BCKSPC |
27 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| 28 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
28 * | TAB | Q | W | E | R | T | HOME | | PGUP | Y | U | I | O | P | DELETE | 29 * | TAB | Q | W | E | R | T | HOME | | PGUP | Y | U | I | O | P | DELETE |
29 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 30 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
30 * | INSERT | A | S | D | F | G |------| |------| H | J | K | L | ; | ENTER | 31 * | NOOP | A | S | D | F | G |------| |------| H | J | K | L | ; | ENTER |
31 * |--------+------+------+------+------+------| END | | PGDN |------+------+------+------+------+--------| 32 * |--------+------+------+------+------+------| END | | PGDN |------+------+------+------+------+--------|
32 * | (/LSFT | Z | X | C | V | B | | | | N | M | , | . | / | )/RSFT | 33 * | (/LSFT | Z | X | C | V | B | | | | N | M | , | . | UP | )/RSFT |
33 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' 34 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
34 * | LCTRL | LGUI | | ' |PRTSCR| | [ | ] | \ | RGUI | RCTRL | 35 * | LCTRL | LGUI | MENU | ' | NOOP | | [ | ] | LEFT | DOWN | RIGHT |
35 * `------------------------------------' `------------------------------------' 36 * `------------------------------------' `------------------------------------'
36 * ,-------------. ,-------------. 37 * ,-------------. ,-------------.
37 * | VOL- | VOL+ | | BRT- | BRT+ | 38 * |PRTSCR| ESC | | VOL- | VOL+ |
38 * ,------|------|------| |------+------+------. 39 * ,------|------|------| |------+------+------.
39 * | ALT/ | | MUTE | | NUMLK| | ALT/ | 40 * | ALT/ | | NUMLK| | MUTE | | ALT/ |
40 * | SPC | LAY1 |------| |------| LAY1 | SPC | 41 * | SPC | SLASH|------| |------|WHACK | SPC |
41 * | | | LAY3 | | LAY2 | | | 42 * | | | LAY3 | | LAY2 | | |
42 * `--------------------' `--------------------' 43 * `--------------------' `--------------------'
43 */ 44 */
44[BASE] = KEYMAP( 45[BASE] = KEYMAP(
45 // left hand 46 // left hand
46 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, 47 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
47 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_HOME, 48 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_HOME,
48 KC_INS, KC_A, KC_S, KC_D, KC_F, KC_G, 49 XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G,
49 KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END, 50 KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END,
50 KC_LCTL, KC_LGUI, _______, KC_QUOT, KC_PSCR, 51 KC_LCTL, KC_LGUI, KC_MENU, KC_QUOT, XXXXXXX,
51 KC_VOLD, KC_VOLU, 52 KC_INS, KC_ESC,
52 KC_MUTE, 53 KC_NLCK,
53 ALT_T(KC_SPC), MO(ARRW), TG(INTL), 54 ALT_T(KC_SPC), TD(SLASH), TG(INTL),
54 // right hand 55 // right hand
55 KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, 56 KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
56 KC_PGUP, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, 57 KC_PGUP, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
57 KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENTER, 58 KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENTER,
58 KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, 59 KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RSPC,
59 KC_LBRC, KC_RBRC, KC_BSLS, KC_RGUI, KC_RCTL, 60 KC_LBRC, KC_RBRC, KC_LEFT, KC_DOWN, KC_RGHT,
60 KC_VOLD, KC_VOLU, 61 KC_VOLD, KC_VOLU,
61 KC_NLCK, 62 KC_MUTE,
62 TG(NUMP), MO(ARRW), ALT_T(KC_SPC) 63 TG(NUMP), TD(WHACK), ALT_T(KC_SPC)
63 ), 64 ),
64 65
65/* layer 1 : functions and arrows 66/* layer 1 : functions and arrows
66 * 67 *
67 * ,--------------------------------------------------. ,--------------------------------------------------. 68 * ,--------------------------------------------------. ,--------------------------------------------------.
68 * | SYSREQ | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | PAUSE | 69 * | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | |
69 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| 70 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
70 * | | | | UP | | | | | | | | | | | | 71 * | | | | UP | | | | | | | | | | | INSERT |
71 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 72 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
72 * | | | LEFT | DOWN |RIGHT | |------| |------| LEFT | DOWN | UP | RIGHT| | | 73 * | | | LEFT | DOWN |RIGHT | |------| |------| LEFT | DOWN | UP | RIGHT| | |
73 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 74 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
@@ -76,26 +77,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
76 * | | | | | | | | | LEFT | DOWN | RIGHT | 77 * | | | | | | | | | LEFT | DOWN | RIGHT |
77 * `------------------------------------' `------------------------------------' 78 * `------------------------------------' `------------------------------------'
78 * ,-------------. ,-------------. 79 * ,-------------. ,-------------.
79 * | | | | | | 80 * |SYSREQ| PAUSE| | | |
80 * ,------|------|------| |------+------+------. 81 * ,------|------|------| |------+------+------.
81 * | | | | | | | | 82 * | | | SCRLK| | | | |
82 * | | |------| |------| | | 83 * | | |------| |------| | |
83 * | | | | | | | | 84 * | | | | | | | |
84 * `--------------------' `--------------------' 85 * `--------------------' `--------------------'
85 */ 86 */
86[ARRW] = KEYMAP( 87[ARRW] = KEYMAP(
87 // left hand 88 // left hand
88 KC_SYSREQ, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, 89 _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
89 _______, _______, _______, KC_UP, _______, _______, _______, 90 _______, _______, _______, KC_UP, _______, _______, _______,
90 _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, 91 _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______,
91 _______, _______, _______, _______, _______, _______, _______, 92 _______, _______, _______, _______, _______, _______, _______,
92 _______, _______, _______, _______, _______, 93 _______, _______, _______, _______, _______,
93 _______, _______, 94 KC_SYSREQ, KC_PAUSE,
94 _______, 95 KC_SLCK,
95 _______, _______, _______, 96 _______, _______, _______,
96 // right hand 97 // right hand
97 KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PAUSE, 98 KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
98 _______, _______, _______, _______, _______, _______, _______, 99 _______, _______, _______, _______, _______, _______, KC_INS,
99 KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, 100 KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______,
100 _______, _______, _______, _______, _______, KC_UP, _______, 101 _______, _______, _______, _______, _______, KC_UP, _______,
101 _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, 102 _______, _______, KC_LEFT, KC_DOWN, KC_RGHT,
@@ -189,6 +190,87 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
189 ), 190 ),
190}; 191};
191 192
193// See https://github.com/algernon/ergodox-layout/blob/master/keymap.c
194// When holding the SLASH or WHACK key, the ARRW layer activates while the key is held.
195// Tapping the key produces the / or \ key. Double-tapping it toggles the ARRW layer
196// on until a third tap.
197
198typedef struct {
199 bool layer_toggle;
200 bool sticky;
201} td_ta_state_t;
202
203static void ang_tap_dance_s_finished (qk_tap_dance_state_t *state, void *user_data) {
204 td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
205
206 if (td_ta->sticky) {
207 td_ta->sticky = false;
208 td_ta->layer_toggle = false;
209 layer_off (ARRW);
210 return;
211 }
212
213 if (state->count == 1 && !state->pressed) {
214 register_code (KC_SLSH);
215 td_ta->sticky = false;
216 td_ta->layer_toggle = false;
217 } else {
218 td_ta->layer_toggle = true;
219 layer_on (ARRW);
220 td_ta->sticky = (state->count == 2);
221 }
222}
223
224static void ang_tap_dance_s_reset (qk_tap_dance_state_t *state, void *user_data) {
225 td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
226
227 if (!td_ta->layer_toggle)
228 unregister_code (KC_SLSH);
229 if (!td_ta->sticky)
230 layer_off (ARRW);
231}
232
233static void ang_tap_dance_w_finished (qk_tap_dance_state_t *state, void *user_data) {
234 td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
235
236 if (td_ta->sticky) {
237 td_ta->sticky = false;
238 td_ta->layer_toggle = false;
239 layer_off (ARRW);
240 return;
241 }
242
243 if (state->count == 1 && !state->pressed) {
244 register_code (KC_BSLS);
245 td_ta->sticky = false;
246 td_ta->layer_toggle = false;
247 } else {
248 td_ta->layer_toggle = true;
249 layer_on (ARRW);
250 td_ta->sticky = (state->count == 2);
251 }
252}
253
254static void ang_tap_dance_w_reset (qk_tap_dance_state_t *state, void *user_data) {
255 td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
256
257 if (!td_ta->layer_toggle)
258 unregister_code (KC_BSLS);
259 if (!td_ta->sticky)
260 layer_off (ARRW);
261}
262
263qk_tap_dance_action_t tap_dance_actions[] = {
264 [SLASH] = {
265 .fn = { NULL, ang_tap_dance_s_finished, ang_tap_dance_s_reset },
266 .user_data = (void *)&((td_ta_state_t) { false, false })
267 },
268 [WHACK] = {
269 .fn = { NULL, ang_tap_dance_w_finished, ang_tap_dance_w_reset },
270 .user_data = (void *)&((td_ta_state_t) { false, false })
271 }
272};
273
192// Runs just one time when the keyboard initializes. 274// Runs just one time when the keyboard initializes.
193void matrix_init_user(void) { 275void matrix_init_user(void) {
194 276