mirror of
https://github.com/openstenoproject/qmk
synced 2024-11-11 11:09:10 +00:00
SLASH and WHACK functions added (based on algernon's CT_TA)
This commit is contained in:
parent
eab0166f83
commit
4880e72b77
4 changed files with 157 additions and 33 deletions
|
@ -34,4 +34,4 @@
|
|||
#endif
|
||||
|
||||
|
||||
#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */
|
||||
#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */
|
||||
|
|
5
keyboards/ergodox/keymaps/familiar/Makefile
Normal file
5
keyboards/ergodox/keymaps/familiar/Makefile
Normal file
|
@ -0,0 +1,5 @@
|
|||
TAP_DANCE_ENABLE = yes
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
37
keyboards/ergodox/keymaps/familiar/config.h
Normal file
37
keyboards/ergodox/keymaps/familiar/config.h
Normal file
|
@ -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_ */
|
|
@ -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) {
|
||||
|
||||
|
|
Loading…
Reference in a new issue