summaryrefslogtreecommitdiff
path: root/keyboards/ergodox/keymaps/familiar
diff options
context:
space:
mode:
authornstickney2017-03-07 22:30:43 -0600
committernstickney2017-03-07 22:30:43 -0600
commit4880e72b77cd934dfc2e9ae4397bd7466ca002e5 (patch)
tree397c55a300d621913eb60bad8d722b12bc8e7778 /keyboards/ergodox/keymaps/familiar
parenteab0166f832f3cca88059d87374426e6b017beff (diff)
SLASH and WHACK functions added (based on algernon's CT_TA)
Diffstat (limited to 'keyboards/ergodox/keymaps/familiar')
-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
3 files changed, 156 insertions, 32 deletions
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 @@
+TAP_DANCE_ENABLE = yes
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
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 @@
+#ifndef KEYBOARDS_ERGODOX_CONFIG_H_
+#define KEYBOARDS_ERGODOX_CONFIG_H_
+
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_DELAY 0
+#define MOUSEKEY_TIME_TO_MAX 5
+#define MOUSEKEY_MAX_SPEED 2
+#define MOUSEKEY_WHEEL_DELAY 0
+
+#define TAPPING_TOGGLE 1
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+#define TAPPING_TERM 200
+#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.)
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \
+ keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \
+)
+
+#ifdef SUBPROJECT_ez
+ #include "ez/config.h"
+#endif
+#ifdef SUBPROJECT_infinity
+ #include "infinity/config.h"
+#endif
+
+
+#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 @@
#define NUMP 2 // numpad
#define INTL 3 // international symbols
-#define _______ KC_TRNS // Make the layouts easier to read
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
-enum custom_keycodes {
- PLACEHOLDER = SAFE_RANGE, // can always be here
- EPRM,
- VRSN,
- RGB_SLD
+// Tap Dance Codes
+enum {
+ SLASH,
+ WHACK,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -23,51 +24,51 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* layer 0 : default
*
* ,--------------------------------------------------. ,--------------------------------------------------.
- * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | - | = | BCKSPC |
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | - | = | BCKSPC |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | TAB | Q | W | E | R | T | HOME | | PGUP | Y | U | I | O | P | DELETE |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
- * | INSERT | A | S | D | F | G |------| |------| H | J | K | L | ; | ENTER |
+ * | NOOP | A | S | D | F | G |------| |------| H | J | K | L | ; | ENTER |
* |--------+------+------+------+------+------| END | | PGDN |------+------+------+------+------+--------|
- * | (/LSFT | Z | X | C | V | B | | | | N | M | , | . | / | )/RSFT |
+ * | (/LSFT | Z | X | C | V | B | | | | N | M | , | . | UP | )/RSFT |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
- * | LCTRL | LGUI | | ' |PRTSCR| | [ | ] | \ | RGUI | RCTRL |
+ * | LCTRL | LGUI | MENU | ' | NOOP | | [ | ] | LEFT | DOWN | RIGHT |
* `------------------------------------' `------------------------------------'
* ,-------------. ,-------------.
- * | VOL- | VOL+ | | BRT- | BRT+ |
+ * |PRTSCR| ESC | | VOL- | VOL+ |
* ,------|------|------| |------+------+------.
- * | ALT/ | | MUTE | | NUMLK| | ALT/ |
- * | SPC | LAY1 |------| |------| LAY1 | SPC |
+ * | ALT/ | | NUMLK| | MUTE | | ALT/ |
+ * | SPC | SLASH|------| |------|WHACK | SPC |
* | | | LAY3 | | LAY2 | | |
* `--------------------' `--------------------'
*/
[BASE] = KEYMAP(
// left hand
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_HOME,
- KC_INS, KC_A, KC_S, KC_D, KC_F, KC_G,
+ XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END,
- KC_LCTL, KC_LGUI, _______, KC_QUOT, KC_PSCR,
- KC_VOLD, KC_VOLU,
- KC_MUTE,
- ALT_T(KC_SPC), MO(ARRW), TG(INTL),
+ KC_LCTL, KC_LGUI, KC_MENU, KC_QUOT, XXXXXXX,
+ KC_INS, KC_ESC,
+ KC_NLCK,
+ ALT_T(KC_SPC), TD(SLASH), TG(INTL),
// right hand
KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_PGUP, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENTER,
- KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
- KC_LBRC, KC_RBRC, KC_BSLS, KC_RGUI, KC_RCTL,
+ KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RSPC,
+ KC_LBRC, KC_RBRC, KC_LEFT, KC_DOWN, KC_RGHT,
KC_VOLD, KC_VOLU,
- KC_NLCK,
- TG(NUMP), MO(ARRW), ALT_T(KC_SPC)
+ KC_MUTE,
+ TG(NUMP), TD(WHACK), ALT_T(KC_SPC)
),
/* layer 1 : functions and arrows
*
* ,--------------------------------------------------. ,--------------------------------------------------.
- * | SYSREQ | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | PAUSE |
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
- * | | | | UP | | | | | | | | | | | |
+ * | | | | UP | | | | | | | | | | | INSERT |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | LEFT | DOWN |RIGHT | |------| |------| LEFT | DOWN | UP | RIGHT| | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
@@ -76,26 +77,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | LEFT | DOWN | RIGHT |
* `------------------------------------' `------------------------------------'
* ,-------------. ,-------------.
- * | | | | | |
+ * |SYSREQ| PAUSE| | | |
* ,------|------|------| |------+------+------.
- * | | | | | | | |
+ * | | | SCRLK| | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
[ARRW] = KEYMAP(
// left hand
- KC_SYSREQ, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
_______, _______, _______, KC_UP, _______, _______, _______,
_______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______,
_______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______,
- _______, _______,
- _______,
+ KC_SYSREQ, KC_PAUSE,
+ KC_SLCK,
_______, _______, _______,
// right hand
- KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PAUSE,
- _______, _______, _______, _______, _______, _______, _______,
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
+ _______, _______, _______, _______, _______, _______, KC_INS,
KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______,
_______, _______, _______, _______, _______, KC_UP, _______,
_______, _______, KC_LEFT, KC_DOWN, KC_RGHT,
@@ -189,6 +190,87 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
+// See https://github.com/algernon/ergodox-layout/blob/master/keymap.c
+// When holding the SLASH or WHACK key, the ARRW layer activates while the key is held.
+// Tapping the key produces the / or \ key. Double-tapping it toggles the ARRW layer
+// on until a third tap.
+
+typedef struct {
+ bool layer_toggle;
+ bool sticky;
+} td_ta_state_t;
+
+static void ang_tap_dance_s_finished (qk_tap_dance_state_t *state, void *user_data) {
+ td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
+
+ if (td_ta->sticky) {
+ td_ta->sticky = false;
+ td_ta->layer_toggle = false;
+ layer_off (ARRW);
+ return;
+ }
+
+ if (state->count == 1 && !state->pressed) {
+ register_code (KC_SLSH);
+ td_ta->sticky = false;
+ td_ta->layer_toggle = false;
+ } else {
+ td_ta->layer_toggle = true;
+ layer_on (ARRW);
+ td_ta->sticky = (state->count == 2);
+ }
+}
+
+static void ang_tap_dance_s_reset (qk_tap_dance_state_t *state, void *user_data) {
+ td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
+
+ if (!td_ta->layer_toggle)
+ unregister_code (KC_SLSH);
+ if (!td_ta->sticky)
+ layer_off (ARRW);
+}
+
+static void ang_tap_dance_w_finished (qk_tap_dance_state_t *state, void *user_data) {
+ td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
+
+ if (td_ta->sticky) {
+ td_ta->sticky = false;
+ td_ta->layer_toggle = false;
+ layer_off (ARRW);
+ return;
+ }
+
+ if (state->count == 1 && !state->pressed) {
+ register_code (KC_BSLS);
+ td_ta->sticky = false;
+ td_ta->layer_toggle = false;
+ } else {
+ td_ta->layer_toggle = true;
+ layer_on (ARRW);
+ td_ta->sticky = (state->count == 2);
+ }
+}
+
+static void ang_tap_dance_w_reset (qk_tap_dance_state_t *state, void *user_data) {
+ td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
+
+ if (!td_ta->layer_toggle)
+ unregister_code (KC_BSLS);
+ if (!td_ta->sticky)
+ layer_off (ARRW);
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [SLASH] = {
+ .fn = { NULL, ang_tap_dance_s_finished, ang_tap_dance_s_reset },
+ .user_data = (void *)&((td_ta_state_t) { false, false })
+ },
+ [WHACK] = {
+ .fn = { NULL, ang_tap_dance_w_finished, ang_tap_dance_w_reset },
+ .user_data = (void *)&((td_ta_state_t) { false, false })
+ }
+};
+
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {