]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
SLASH and WHACK functions added (based on algernon's CT_TA)
authornstickney <nstickney@gmail.com>
Wed, 8 Mar 2017 04:30:43 +0000 (22:30 -0600)
committernstickney <nstickney@gmail.com>
Wed, 8 Mar 2017 04:30:43 +0000 (22:30 -0600)
keyboards/ergodox/config.h
keyboards/ergodox/keymaps/familiar/Makefile [new file with mode: 0644]
keyboards/ergodox/keymaps/familiar/config.h [new file with mode: 0644]
keyboards/ergodox/keymaps/familiar/keymap.c

index 36185983206b3802a4582bb3d7be682b414c0bfb..994a8c64333249d013dd97e5c06b0c5fdb932183 100644 (file)
@@ -34,4 +34,4 @@
 #endif
 
 
-#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */
\ No newline at end of file
+#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */
diff --git a/keyboards/ergodox/keymaps/familiar/Makefile b/keyboards/ergodox/keymaps/familiar/Makefile
new file mode 100644 (file)
index 0000000..f795271
--- /dev/null
@@ -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 (file)
index 0000000..994a8c6
--- /dev/null
@@ -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_ */
index e79e9610923453c58c909974b77063ebe9c87665..c4ecdee511b745b720e9150d4ea4b77c71828c2a 100644 (file)
@@ -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) {