diff --git a/keyboards/jones/v.0.2/config.h b/keyboards/jones/v.0.2/config.h index e5c5ddc648c..202d5e4344a 100644 --- a/keyboards/jones/v.0.2/config.h +++ b/keyboards/jones/v.0.2/config.h @@ -68,15 +68,15 @@ along with this program. If not, see . #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 #define RGBLIGHT_VAL_STEP 17 - #define RGBLIGHT_LIMIT_VAL 127 /* The maximum brightness level */ + #define RGBLIGHT_LIMIT_VAL 50 /* The maximum brightness level */ // #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */ -/*== Lighting Layers ==*/ -#define RGBLIGHT_LAYERS + /*== Lighting Layers ==*/ + #define RGBLIGHT_LAYERS // #define RGBLIGHT_MAX_LAYERS 2 #define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF // Overriding RGB Lighting on/off status -/*== all animations enable ==*/ + /*== all animations enable ==*/ // #define RGBLIGHT_ANIMATIONS -/*== or choose animations ==*/ + /*== or choose animations ==*/ // #define RGBLIGHT_EFFECT_BREATHING // #define RGBLIGHT_EFFECT_RAINBOW_MOOD // #define RGBLIGHT_EFFECT_RAINBOW_SWIRL @@ -84,7 +84,7 @@ along with this program. If not, see . // #define RGBLIGHT_EFFECT_KNIGHT // #define RGBLIGHT_EFFECT_CHRISTMAS // #define RGBLIGHT_EFFECT_STATIC_GRADIENT - #define RGBLIGHT_EFFECT_RGB_TEST + // #define RGBLIGHT_EFFECT_RGB_TEST // #define RGBLIGHT_EFFECT_ALTERNATING // /*== customize breathing effect ==*/ // /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/ diff --git a/keyboards/jones/v.0.2/keymaps/default/keymap.c b/keyboards/jones/v.0.2/keymaps/default/keymap.c index ce3021d98ad..fcee0ce19f8 100644 --- a/keyboards/jones/v.0.2/keymaps/default/keymap.c +++ b/keyboards/jones/v.0.2/keymaps/default/keymap.c @@ -20,12 +20,16 @@ extern rgblight_config_t rgblight_config; #endif + + // Defines names for use in layer keycodes and the keymap enum layer_number { _MAC = 0, _WIN, + _NUM, _LOWER, _RAISE, + _NUM_RAISE, _ADJUST }; @@ -33,61 +37,121 @@ enum layer_number { enum custom_keycodes { MAC = SAFE_RANGE, WIN, + NUM, LOWER, RAISE, + NUM_RAISE, ADJUST, ALT_US, - ALT_JP + ALT_JP, + MAC_IME, + WIN_IME, }; +// Tap Dance +enum tap_dances{ + TD_GRV_ESC = 0 , + TD_Y_LBRC, + TD_LSFT_CAPS, + TD_LBRC_RBRC, + TD_ESC_NUM +}; + +// Tap Dance state +// for toggle layer by ESC +enum { + SINGLE_TAP = 1, + SINGLE_HOLD, + DOUBLE_TAP +}; + +// Declare the functions to be used with your tap dance key(s) + +// Function associated with all tap dances +uint8_t cur_dance(qk_tap_dance_state_t *state); + +// Functions associated with individual tap dances +void ql_finished(qk_tap_dance_state_t *state, void *user_data); +void ql_reset(qk_tap_dance_state_t *state, void *user_data); + +// Tap Dance definitions +qk_tap_dance_action_t tap_dance_actions[] = { + // [TD_GRV_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_GRV, KC_ESC), + [TD_Y_LBRC] = ACTION_TAP_DANCE_DOUBLE(KC_Y, KC_LBRC), + [TD_LSFT_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS), + [TD_LBRC_RBRC] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_RBRC), + [TD_ESC_NUM] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, ql_finished, ql_reset, 275) +}; + +#define ESC_NUM TD(TD_ESC_NUM) +// #define ESC_NUM LT(_NUM, KC_ESC) +// #define GRV_ESC TD(TD_GRV_ESC) +#define Y_LBRC TD(TD_Y_LBRC) +#define S_CAP TD(TD_LSFT_CAPS) +#define L_R_BRC TD(TD_LBRC_RBRC) //#define TG_NUM TT(_NUM) #define SP_LOW LT(_LOWER, KC_SPC) #define SP_RAI LT(_RAISE, KC_SPC) +#define SP_NRAI LT(_NUM_RAISE, KC_SPC) #define SP_ADJ LT(_ADJUST, KC_SPC) #define SP_GUI MT(MOD_LGUI, KC_SPC) #define SP_SFT MT(MOD_LSFT, KC_SPC) - +// #define ZERO_NR LT(_NUM_RAISE, KC_P0) #define S_SLS RSFT_T(KC_SLSH) - #define C_SCLN RCTL_T(KC_SCLN) // #define RAI_OP LALT_T(IME_US) #define C_E LCTL(KC_E) #define C_A LCTL(KC_A) + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_MAC] = LAYOUT( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSLS,KC_GRV, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC,KC_RBRC,KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + ESC_NUM, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_GRV,KC_BSLS,KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, L_R_BRC,KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ KC_LCTL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_QUOT,KC_H, KC_J, KC_K, KC_L, C_SCLN, KC_ENT, \ - RAISE, KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, S_SLS, LOWER, \ - RAISE, ALT_US, KC_LGUI,SP_SFT, SP_SFT, SP_SFT, SP_RAI, SP_RAI, KC_LGUI,KC_LALT,LOWER, KC_MUTE \ + RAISE, S_CAP, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LEFT,KC_RGHT,KC_N, KC_M, KC_COMM,KC_DOT, S_SLS, LOWER, \ + RAISE, RAISE, ALT_US, KC_LGUI,SP_SFT, MAC_IME, SP_RAI, SP_RAI, KC_LGUI,ALT_JP, LOWER, KC_MUTE \ ), [_WIN] = LAYOUT( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSLS,KC_GRV, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC,KC_RBRC,KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - KC_LCTL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_QUOT,KC_H, KC_J, KC_K, KC_L, C_SCLN, KC_ENT, \ - RAISE, KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, S_SLS, LOWER, \ - RAISE, KC_LGUI,KC_LALT,SP_SFT, SP_SFT, SP_SFT, SP_RAI, SP_RAI, KC_LALT,KC_APP, LOWER, KC_MUTE \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \ + _______,_______,KC_LGUI,KC_LALT,_______, WIN_IME, _______,_______,KC_LALT,KC_APP, _______,_______ \ ), - [_LOWER] = LAYOUT( - _______,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \ - _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_HOME,KC_UP, KC_END, KC_VOLU, \ - _______,_______,_______,_______,_______,_______,_______,_______,_______,KC_PGUP,KC_LEFT,KC_RGHT,_______,KC_VOLD, \ - _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_PGDN,KC_DOWN,_______,_______,_______, \ - ADJUST, _______,_______,_______,_______, _______, ADJUST, ADJUST, _______,_______,_______,_______ \ + [_NUM] = LAYOUT( + _______,_______,_______,_______,_______,_______,_______,_______,_______,KC_PSLS,KC_PSLS,KC_PSLS,KC_PAST,_______,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,KC_P7, KC_P8, KC_P9, KC_PPLS,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,KC_P4, KC_P5, KC_P6, KC_P6, _______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_P1, KC_P2, KC_P3, KC_PENT,_______, \ + _______,_______,_______,_______,_______, _______, SP_NRAI,SP_NRAI,KC_P0, KC_PDOT,_______,_______ \ + ), + [_LOWER] = LAYOUT( + KC_PAUS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_INS, KC_DEL, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ + KC_PSCR,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_HOME,KC_UP, KC_END, KC_DEL, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,KC_PGUP,KC_LEFT,KC_RGHT,_______,KC_INS, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_PGDN,KC_DOWN,KC_VOLD,KC_VOLU,_______, \ + ADJUST, _______,_______,_______,_______, _______, ADJUST, ADJUST, _______,KC_MUTE,_______,_______ \ ), [_RAISE] = LAYOUT( - _______,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \ - _______,_______,_______,C_E, _______,_______,_______,_______,_______,_______,KC_PGUP,KC_DEL, _______,KC_VOLU, \ - _______,C_A, _______,KC_DEL, KC_RGHT,KC_ESC, KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,_______,_______,_______,KC_VOLD, \ - _______,_______,_______,_______,_______,_______,KC_LEFT,KC_PGDN,KC_ENT, _______,_______,_______,_______,_______,ADJUST, \ - _______,_______,_______,_______,_______, _______, _______,_______,_______,ADJUST, _______,_______ \ + KC_PAUS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \ + KC_PSCR,_______,_______,C_E, _______,_______,_______,_______,_______,_______,_______,_______,KC_PGUP,KC_DEL, \ + _______,C_A, _______,KC_DEL, KC_RGHT,KC_ESC, _______,_______,KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,_______,KC_INS, \ + _______,_______,_______,_______,_______,_______,KC_LEFT,_______,_______,KC_PGDN,KC_ENT, _______,KC_MRWD,KC_MFFD,ADJUST, \ + _______,_______,_______,_______,_______, _______, _______,_______,_______,KC_MPLY,ADJUST, _______ \ + ), + [_NUM_RAISE] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_GRV, KC_BSLS,KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, L_R_BRC,KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_LCTL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_QUOT,KC_H, KC_J, KC_K, KC_L, C_SCLN, KC_ENT, \ + RAISE, S_CAP, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LEFT,KC_RGHT,KC_N, KC_M, KC_COMM,KC_DOT, S_SLS, ADJUST, \ + _______,_______,_______,_______,_______, _______, _______,_______,_______,_______,ADJUST, _______ \ ), [_ADJUST] = LAYOUT( - _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \ - _______,_______,DF(_WIN),_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, \ - _______,_______,_______,_______,_______,_______,_______,_______,RGB_M_P, RGB_TOG,RGB_MOD,_______,_______,_______, \ - _______,_______,_______,_______,_______,_______,_______,_______,DF(_MAC),_______,_______,_______,_______,_______,_______, \ + _______,RGB_HUI,RGB_SAI,RGB_VAI,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \ + _______,_______,DF(_WIN),_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RGB_M_P,RGB_TOG,RGB_MOD,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,TG(_NUM),DF(_MAC),_______,_______,_______,_______, \ _______,_______,_______,_______,_______, _______, _______,_______,_______,_______,_______,_______ \ ) }; @@ -124,19 +188,19 @@ switch (keycode) { layer_off(_LOWER); update_tri_layer(_LOWER, _RAISE, _ADJUST); - /* - 長押し時に入力キャンセルする場合 - if (lower_pressed && (TIMER_DIFF_16(record->event.time, lower_pressed_time) < TAPPING_TERM)) { - - 長押しキャンセルなしの場合 - if (lower_pressed) { - */ - if (lower_pressed && (TIMER_DIFF_16(record->event.time, lower_pressed_time) < TAPPING_TERM)) { - register_code(KC_LANG1); // for macOS - register_code(KC_HENK); - unregister_code(KC_HENK); - unregister_code(KC_LANG1); - } + // /* + // 長押し時に入力キャンセルする場合 + // if (lower_pressed && (TIMER_DIFF_16(record->event.time, lower_pressed_time) < TAPPING_TERM)) { + // + // 長押しキャンセルなしの場合 + // if (lower_pressed) { + // */ + // if (lower_pressed && (TIMER_DIFF_16(record->event.time, lower_pressed_time) < TAPPING_TERM)) { + // register_code(KC_LANG1); // for macOS + // register_code(KC_HENK); + // unregister_code(KC_HENK); + // unregister_code(KC_LANG1); + // } lower_pressed = false; } return false; @@ -152,16 +216,16 @@ switch (keycode) { layer_off(_RAISE); update_tri_layer(_LOWER, _RAISE, _ADJUST); - /* - 長押し時に入力キャンセルする場合はこれ - if (raise_pressed && (TIMER_DIFF_16(record->event.time, raise_pressed_time) < TAPPING_TERM)) { - */ - if (raise_pressed) { - register_code(KC_LANG2); // for macOS - register_code(KC_MHEN); - unregister_code(KC_MHEN); - unregister_code(KC_LANG2); - } + // /* + // 長押し時に入力キャンセルする場合はこれ + // if (raise_pressed && (TIMER_DIFF_16(record->event.time, raise_pressed_time) < TAPPING_TERM)) { + // */ + // if (raise_pressed) { + // register_code(KC_LANG2); // for macOS + // register_code(KC_MHEN); + // unregister_code(KC_MHEN); + // unregister_code(KC_LANG2); + // } raise_pressed = false; } return false; @@ -185,7 +249,8 @@ switch (keycode) { 長押し時に入力キャンセルする場合はこれ if (raise_pressed && (TIMER_DIFF_16(record->event.time, raise_pressed_time) < TAPPING_TERM)) { */ - if (alt_us_pressed) { + // if (alt_us_pressed) { + if (alt_us_pressed && (TIMER_DIFF_16(record->event.time, alt_us_pressed_time) < TAPPING_TERM)) { register_code(KC_LANG2); // for macOS register_code(KC_MHEN); unregister_code(KC_MHEN); @@ -206,7 +271,8 @@ switch (keycode) { 長押し時に入力キャンセルする場合はこれ if (raise_pressed && (TIMER_DIFF_16(record->event.time, raise_pressed_time) < TAPPING_TERM)) { */ - if (alt_jp_pressed) { + // if (alt_jp_pressed) { + if (alt_jp_pressed && (TIMER_DIFF_16(record->event.time, alt_jp_pressed_time) < TAPPING_TERM)) { register_code(KC_LANG1); // for macOS register_code(KC_HENK); unregister_code(KC_HENK); @@ -216,6 +282,22 @@ switch (keycode) { } return false; break; + case MAC_IME: + if (record->event.pressed) { + // when pressed + SEND_STRING(SS_LCTL(" ")); + } else { + // when released + } + break; + case WIN_IME: + if (record->event.pressed) { + // when pressed + SEND_STRING(SS_LALT("`")); + } else { + // when released + } + break; default: if (record->event.pressed) { // reset the flags @@ -229,70 +311,95 @@ switch (keycode) { return true; } -// レイヤー切り替えにともなって、インジケータLEDを発光 -// layer_state_t layer_state_set_user(layer_state_t state) { -// #ifdef RGBLIGHT_ENABLE -// // rgblight_sethsv_at (200,200,200, 0); -// -// switch (get_highest_layer(state)) { -// case _LOWER: -// rgblight_sethsv_range(HSV_CYAN,0,2); -// break; -// case _RAISE: -// rgblight_sethsv_range(HSV_RED,0,1); -// break; -// case _ADJUST: -// rgblight_sethsv_range(HSV_GREEN,0,1); -// break; -// default: // for any other layers, or the default layer -// rgblight_sethsv_range(200,200,200,0,2); -// break; -// } -// rgblight_set_effect_range(0,1); -// #endif -// return state; -// } - +//------------------------------------------------------------------------------ +// RGB Light settings #ifdef RGBLIGHT_LAYERS -// Light LEDs 1 in cyan when keyboard layer 1 is active -const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {0, 2, HSV_RED} + +// 1st LED +const rgblight_segment_t PROGMEM my_mac_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 1, HSV_WHITE} ); -// Light LEDs 1 in red when keyboard layer 2 is active -const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {0, 2, HSV_CYAN} +const rgblight_segment_t PROGMEM my_win_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 1, HSV_BLUE} ); -// Light LEDs 1 in green when keyboard layer 3 is active -const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {0, 2, HSV_GREEN} +const rgblight_segment_t PROGMEM my_num_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 1, HSV_YELLOW} ); + +// 2nd LED +const rgblight_segment_t PROGMEM my_caps_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {1, 1, HSV_MAGENTA} +); + +const rgblight_segment_t PROGMEM my_lower_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {1, 1, HSV_GREEN} +); + +const rgblight_segment_t PROGMEM my_raise_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {1, 1, HSV_CYAN} +); + +const rgblight_segment_t PROGMEM my_num_raise_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {1, 1, HSV_GOLD} +); + +const rgblight_segment_t PROGMEM my_adjust_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {1, 1, HSV_RED} +); + + // Define the array of layers. Later layers take precedence const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( - my_layer1_layer, - my_layer2_layer, // Overrides other layers - my_layer3_layer // Overrides other layers + my_mac_layer, + my_win_layer, + my_num_layer, + my_caps_layer, + my_lower_layer, + my_raise_layer, + my_num_raise_layer, + my_adjust_layer ); + void keyboard_post_init_user(void) { // Enable the LED layers rgblight_layers = my_rgb_layers; } + // Enabling and disabling lighting layers layer_state_t layer_state_set_user(layer_state_t state) { - // Both layers will light up if both kb layers are active - rgblight_set_layer_state(0, layer_state_cmp(state, 2)); - rgblight_set_layer_state(1, layer_state_cmp(state, 3)); - rgblight_set_layer_state(2, layer_state_cmp(state, 4)); + rgblight_set_layer_state(2, layer_state_cmp(state, _NUM)); + rgblight_set_layer_state(4, layer_state_cmp(state, _LOWER)); + rgblight_set_layer_state(5, layer_state_cmp(state, _RAISE)); + rgblight_set_layer_state(6, layer_state_cmp(state, _NUM_RAISE)); + rgblight_set_layer_state(7, layer_state_cmp(state, _ADJUST)); return state; } + +// Enabling and disabling lighting layers for default layer +layer_state_t default_layer_state_set_user(layer_state_t state) { + // TODO change color when CAPS Lock is enebled + rgblight_set_layer_state(0, layer_state_cmp(state, _MAC)); + rgblight_set_layer_state(1, layer_state_cmp(state, _WIN)); + rgblight_set_layer_state(2, layer_state_cmp(state, _NUM)); + + return state; +} + +bool led_update_user(led_t led_state) { + rgblight_set_layer_state(3, led_state.caps_lock); + return true; +} #endif +//------------------------------------------------------------------------------ // TEST LEDs // void keyboard_post_init_user(void) { // rgblight_enable_noeeprom(); // rgblight_mode_noeeprom(RGBLIGHT_MODE_RGB_TEST); // } +//------------------------------------------------------------------------------ // Rotary Encoder void encoder_update_user(uint8_t index, bool clockwise) { if (index == 0) { /* First encoder */ @@ -304,6 +411,65 @@ void encoder_update_user(uint8_t index, bool clockwise) { } } + +//------------------------------------------------------------------------------ +// ESCキーの動作を、次のようにする設定 +// シングルタップ:ESC +// シングルタップしてホールド:NUMレイヤー +// ダブルタップ:Numレイヤーをトグル + +typedef struct { + bool is_press_action; + uint8_t state; +} tap; + +// Determine the current tap dance state +uint8_t cur_dance(qk_tap_dance_state_t *state) { + if (state->count == 1) { + if (!state->pressed) return SINGLE_TAP; + else return SINGLE_HOLD; + } else if (state->count == 2) return DOUBLE_TAP; + else return 8; +} + +// Initialize tap structure associated with example tap dance key +static tap ql_tap_state = { + .is_press_action = true, + .state = 0 +}; + +// Functions that control what our tap dance key does +void ql_finished(qk_tap_dance_state_t *state, void *user_data) { + ql_tap_state.state = cur_dance(state); + switch (ql_tap_state.state) { + case SINGLE_TAP: + tap_code(KC_ESC); + break; + case SINGLE_HOLD: + layer_on(_NUM); + break; + case DOUBLE_TAP: + // Check to see if the layer is already set + if (layer_state_is(_NUM)) { + // If already set, then switch it off + layer_off(_NUM); + } else { + // If not already set, then switch the layer on + layer_on(_NUM); + } + break; + } +} + +void ql_reset(qk_tap_dance_state_t *state, void *user_data) { + // If the key was held down and now is released then switch off the layer + if (ql_tap_state.state == SINGLE_HOLD) { + layer_off(_NUM); + } + ql_tap_state.state = 0; +} +//------------------------------------------------------------------------------ + /* void matrix_init_user(void) { diff --git a/keyboards/jones/v.0.2/rules.mk b/keyboards/jones/v.0.2/rules.mk index 2d9f9d763ac..9cf43e38c50 100644 --- a/keyboards/jones/v.0.2/rules.mk +++ b/keyboards/jones/v.0.2/rules.mk @@ -33,3 +33,4 @@ FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches HD44780_ENABLE = no # Enable support for HD44780 based LCDs ENCODER_ENABLE = yes # Rotary Encoder +TAP_DANCE_ENABLE = yes # Tap Dance