Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Custom #21

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions keyboards/crkbd/keymaps/harvester/enums.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ typedef enum {
_NUM,
_FUN,
_MEDIA,
_GAME,
_MOD,
_NAV,
_MSE,
_SYM
Expand All @@ -19,8 +17,6 @@ typedef enum {
_RGB_NUM,
_RGB_FUNC,
_RGB_MEDIA,
_RGB_GAME,
_RGB_MOD,
_RGB_DEFAULT,
_RGB_TRANS,
_RGB_DISABLED
Expand Down
165 changes: 134 additions & 31 deletions keyboards/crkbd/keymaps/harvester/keymap.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,29 +20,57 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <stdio.h>
#include "oled.c"

// Tap Dance keycodes
enum td_keycodes {
CTL_LPRN, // Our example key: `LALT` when held, `(` when tapped. Add additional keycodes for each tapdance.
ALT_RPRN,

};

// Define a type containing as many tapdance states as you need
typedef enum {
TD_NONE,
TD_UNKNOWN,
TD_SINGLE_TAP,
TD_SINGLE_HOLD,
TD_DOUBLE_SINGLE_TAP
} td_state_t;

// Create a global instance of the tapdance state type
static td_state_t td_state;

// Declare your tapdance functions:

// Function to determine the current tapdance state
td_state_t cur_dance(qk_tap_dance_state_t *state);

// `finished` and `reset` functions for each tapdance keycode
void ctl_lprn_finished(qk_tap_dance_state_t *state, void *user_data);
void ctl_lprn_reset(qk_tap_dance_state_t *state, void *user_data);
void alt_rprn_finished(qk_tap_dance_state_t *state, void *user_data);
void alt_rprn_reset(qk_tap_dance_state_t *state, void *user_data);

// Aliases for readability
#define BASE TO(_BASE)
#define GAME TO(_GAME)
#define SYM LT(_SYM,KC_ENT)
#define NAV LT(_NAV,KC_TAB)
#define FUN LT(_FUN,KC_DEL)
#define MEDIA LT(_MEDIA,KC_RGUI)
#define NUM LT(_NUM,KC_BSPC)
#define MOD MO(_MOD)
#define MOUSE LT(_MSE,KC_SPC)

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE]= LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
QK_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, RSFT_T(KC_QUOT),
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RALT,
TD(CTL_LPRN), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, TD(ALT_RPRN),
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
LT(_MEDIA,KC_ESC), LT(_NAV,KC_TAB), LT(_MSE,KC_SPC), LT(_SYM,KC_ENT), LT(_NUM,KC_BSPC), LT(_FUN,KC_DEL)
//`--------------------------' `--------------------------'
),

[_GAME] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
KC_ESC, KC_T, KC_Q, KC_W, KC_E, KC_R, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
_______, KC_F, KC_A, KC_S, KC_D, KC_F, KC_H, KC_J, KC_K, KC_L, KC_SCLN, _______,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
_______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
MO(_NUM), MO(_MOD), KC_SPC, KC_ENT, KC_BSPC , KC_DEL
MEDIA, NAV, MOUSE, SYM, NUM, FUN
//`--------------------------' `--------------------------'
),

Expand All @@ -60,9 +88,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

[_MSE] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
QK_BOOT, XXXXXXX, XXXXXXX, LGUI(KC_E), LGUI(KC_R), XXXXXXX, C(KC_Y), C(KC_V), C(KC_C), C(KC_X), C(KC_Z), C(KC_S),
QK_BOOT, XXXXXXX, XXXXXXX, LSG(KC_E), LSG(KC_R), XXXXXXX, C(KC_Y), C(KC_V), C(KC_C), C(KC_X), C(KC_Z), C(KC_S),
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
_______, XXXXXXX, LGUI(LSFT(KC_S)), XXXXXXX, XXXXXXX, TO(_GAME), XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______,
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
EE_CLR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
Expand All @@ -72,9 +100,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

[_MEDIA] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, LGUI(KC_E), LGUI(KC_R), LGUI(KC_T), RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
_______, KC_LGUI, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, _______,
_______, XXXXXXX, LSG(KC_S), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, _______,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NK_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
Expand Down Expand Up @@ -116,17 +144,92 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
KC_MENU, KC_TAB, KC_SPC, XXXXXXX, XXXXXXX, _______
//`--------------------------' `--------------------------'
),

[_MOD] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TO(_BASE),
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
_______, XXXXXXX, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
MO(_FUN), _______, KC_ENT, XXXXXXX, _______, XXXXXXX
//`--------------------------' `--------------------------'
)
};

// Determine the tapdance state to return
td_state_t cur_dance(qk_tap_dance_state_t *state) {
if (state->count == 1) {
if (state->interrupted || !state->pressed) return TD_SINGLE_TAP;
else return TD_SINGLE_HOLD;
}

if (state->count == 2) return TD_DOUBLE_SINGLE_TAP;
else return TD_UNKNOWN; // Any number higher than the maximum state value you return above
}

// Handle the possible states for each tapdance keycode you define:

void ctl_lprn_finished(qk_tap_dance_state_t *state, void *user_data) {
td_state = cur_dance(state);
switch (td_state) {
case TD_SINGLE_TAP:
register_code16(LSFT(KC_9));
break;
case TD_SINGLE_HOLD:
register_mods(MOD_BIT(KC_LCTL)); // For a layer-tap key, use `layer_on(_MY_LAYER)` here
break;
case TD_DOUBLE_SINGLE_TAP: // Allow nesting of 2 parens `((` within tapping term
tap_code16(LSFT(KC_9));
register_code16(LSFT(KC_9));
break;
default:
break;
}
}

void ctl_lprn_reset(qk_tap_dance_state_t *state, void *user_data) {
switch (td_state) {
case TD_SINGLE_TAP:
unregister_code16(LSFT(KC_9));
break;
case TD_SINGLE_HOLD:
unregister_mods(MOD_BIT(KC_LCTL)); // For a layer-tap key, use `layer_off(_MY_LAYER)` here
break;
case TD_DOUBLE_SINGLE_TAP:
unregister_code16(LSFT(KC_9));
break;
default:
break;
}
}

void atl_rprn_finished(qk_tap_dance_state_t *state, void *user_data) {
td_state = cur_dance(state);
switch (td_state) {
case TD_SINGLE_TAP:
register_code16(LSFT(KC_0));
break;
case TD_SINGLE_HOLD:
register_mods(MOD_BIT(KC_RALT)); // For a layer-tap key, use `layer_on(_MY_LAYER)` here
break;
case TD_DOUBLE_SINGLE_TAP: // Allow nesting of 2 parens `((` within tapping term
tap_code16(LSFT(KC_0));
register_code16(LSFT(KC_0));
break;
default:
break;
}
}

void alt_rprn_reset(qk_tap_dance_state_t *state, void *user_data) {
switch (td_state) {
case TD_SINGLE_TAP:
unregister_code16(LSFT(KC_0));
break;
case TD_SINGLE_HOLD:
unregister_mods(MOD_BIT(KC_RALT)); // For a layer-tap key, use `layer_off(_MY_LAYER)` here
break;
case TD_DOUBLE_SINGLE_TAP:
unregister_code16(LSFT(KC_0));
break;
default:
break;
}
}

// Define `ACTION_TAP_DANCE_FN_ADVANCED()` for each tapdance keycode, passing in `finished` and `reset` functions
qk_tap_dance_action_t tap_dance_actions[] = {
[CTL_LPRN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctl_lprn_finished, ctl_lprn_reset),
[ALT_RPRN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, atl_rprn_finished, alt_rprn_reset)
};
6 changes: 0 additions & 6 deletions keyboards/crkbd/keymaps/harvester/oled.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,6 @@ void oled_render_layer_state(void) {
case _MEDIA:
oled_write_ln_P(PSTR("MDIA"), false);
break;
case _GAME:
oled_write_ln_P(PSTR("GAME"), false);
break;
case _MOD:
oled_write_ln_P(PSTR("MOD"), false);
break;
case _MSE:
oled_write_ln_P(PSTR("MSE"), false);
break;
Expand Down
32 changes: 2 additions & 30 deletions keyboards/crkbd/keymaps/harvester/rgb.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

__attribute__ ((weak))

void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {

if (host_keyboard_led_state().caps_lock) {
for (uint8_t i = led_min; i <= led_max; i++) {
Expand All @@ -24,36 +24,7 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
if (index >= led_min && index <= led_max && index != NO_LED && (keymap_key_to_keycode(layer, (keypos_t){col, row}) == QK_BOOTLOADER || keymap_key_to_keycode(layer, (keypos_t){col, row}) == QK_CLEAR_EEPROM)) {
rgb_matrix_set_color(index, RGB_DANGER);
} else if (index >= led_min && index <= led_max && index != NO_LED && keymap_key_to_keycode(layer, (keypos_t){col, row}) > KC_TRNS) {
switch (layer) {
case _GAME: {
switch (keymap_key_to_keycode(layer, (keypos_t){col, row})) {
case KC_W: {
rgb_matrix_set_color(index, RGB_GAME);
break;
}
case KC_A: {
rgb_matrix_set_color(index, RGB_GAME);
break;
}
case KC_S: {
rgb_matrix_set_color(index, RGB_GAME);
break;
}
case KC_D: {
rgb_matrix_set_color(index, RGB_GAME);
break;
}
default: {
rgb_matrix_set_color(index, RGB_DISABLED);
break;
}
}
break;
};
default: { // for any other layers, or the default layer
rgb_matrix_set_color(index, RGB_DEFAULT);
}
}
} /*else if (index >= led_min && index <= led_max && index != NO_LED && keymap_key_to_keycode(layer, (keypos_t){col, row}) == KC_TRNS) {
rgb_matrix_set_color(index, RGB_TRANS);
} else if (index >= led_min && index <= led_max && index != NO_LED && keymap_key_to_keycode(layer, (keypos_t){col, row}) == KC_NO) {
Expand All @@ -62,5 +33,6 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
}
}
}
return false;
}
#endif
2 changes: 1 addition & 1 deletion keyboards/crkbd/keymaps/harvester/rules.mk
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ MOUSEKEY_ENABLE = yes
RGB_MATRIX_DRIVER = WS2812
RGB_MATRIX_ENABLE = yes
GRAVE_ESC_ENABLE = yes
TAP_DANCE_ENABLE = no
TAP_DANCE_ENABLE = yes
AUTO_SHIFT_ENABLE = no
COMBO_ENABLE = no
KEY_LOCK_ENABLE = no
Expand Down