Keymap: Talljoe's keymap for oddball keyboards (#3910)
* Create layout for JD45 * Tweak layout to better support JD45 and add more tap dancing. * Add Maltron and tweak layout for 40% enter compatibility. * Switch back to `BL_TOGGLE` for backlight. * More tweaks * Rename talljoe_gherkin to talljoe-gherkin * Make NAV layer tab C_S_T also. * Add missing RESET key. * Add Talljoe layout for minivan. * MTI is not for me * Tweak keymap. * Add talljoe keymap to Atreus. * Minor tweaks. * Fix talljoe keymaps to work with new Zeal60 commit.pull/3950/head
parent
71fe973190
commit
c23233f41a
@ -0,0 +1,42 @@
|
|||||||
|
#ifndef CONFIG_USER_H
|
||||||
|
#define CONFIG_USER_H
|
||||||
|
|
||||||
|
#include QMK_KEYBOARD_CONFIG_H
|
||||||
|
|
||||||
|
#define PREVENT_STUCK_MODIFIERS
|
||||||
|
#define SPACE_COUNT 2
|
||||||
|
|
||||||
|
#define TEMPLATE( \
|
||||||
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \
|
||||||
|
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
|
||||||
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
|
||||||
|
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
|
||||||
|
K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \
|
||||||
|
) LAYOUT( \
|
||||||
|
K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
|
||||||
|
K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, \
|
||||||
|
K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, \
|
||||||
|
K10, K41, K42, K30, K44, K1D, K20, K45, K3C, K0D, K2B, K3D \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define TEMPLATE_NUM( \
|
||||||
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \
|
||||||
|
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
|
||||||
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
|
||||||
|
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
|
||||||
|
K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \
|
||||||
|
) LAYOUT( \
|
||||||
|
K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
|
||||||
|
K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, \
|
||||||
|
K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, \
|
||||||
|
K10, K41, K42, K30, K44, K1D, K20, K45, K48, K49, K2B, K3D \
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
#define TEMPLATE_RESET LAYOUT( \
|
||||||
|
RESET , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
|
||||||
|
RESET , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
|
||||||
|
)
|
||||||
|
#endif
|
@ -0,0 +1 @@
|
|||||||
|
// This space intentionally left blank
|
@ -0,0 +1 @@
|
|||||||
|
USER_NAME := talljoe
|
@ -0,0 +1,22 @@
|
|||||||
|
#ifndef CONFIG_USER_H
|
||||||
|
#define CONFIG_USER_H
|
||||||
|
|
||||||
|
#include QMK_KEYBOARD_CONFIG_H
|
||||||
|
|
||||||
|
#define PREVENT_STUCK_MODIFIERS
|
||||||
|
#define SPACE_COUNT 2
|
||||||
|
|
||||||
|
#define TEMPLATE( \
|
||||||
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \
|
||||||
|
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
|
||||||
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
|
||||||
|
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
|
||||||
|
K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \
|
||||||
|
) { \
|
||||||
|
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K0D, K1D }, \
|
||||||
|
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2C, KC_NO }, \
|
||||||
|
{ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, KC_NO }, \
|
||||||
|
{ K40, K00, K41, K42, K44, KC_NO, K45, KC_NO, K48, K49, K3D, K4C, KC_NO } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1 @@
|
|||||||
|
// This space intentionally left blank
|
@ -0,0 +1,53 @@
|
|||||||
|
#ifndef CONFIG_USER_H
|
||||||
|
#define CONFIG_USER_H
|
||||||
|
|
||||||
|
#include QMK_KEYBOARD_CONFIG_H
|
||||||
|
|
||||||
|
#define SPACE_COUNT 2
|
||||||
|
|
||||||
|
#define TEMPLATE( \
|
||||||
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \
|
||||||
|
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
|
||||||
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
|
||||||
|
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
|
||||||
|
K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \
|
||||||
|
) KEYMAP_ARROW( \
|
||||||
|
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1D, \
|
||||||
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
|
||||||
|
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K0D, \
|
||||||
|
K41, K49, K42, K44, K45, K3C, K0B, K00, K3D \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define TEMPLATE_ALT( \
|
||||||
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \
|
||||||
|
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
|
||||||
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
|
||||||
|
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
|
||||||
|
K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \
|
||||||
|
) KEYMAP_ARROW( \
|
||||||
|
K00, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1D, \
|
||||||
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2C, \
|
||||||
|
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \
|
||||||
|
K41, K49, K42, K44, K45, K48, K49, K4B, K4C \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define TEMPLATE_ADJUST( \
|
||||||
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \
|
||||||
|
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
|
||||||
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
|
||||||
|
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
|
||||||
|
K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \
|
||||||
|
) KEYMAP_ARROW( \
|
||||||
|
K00, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K2D, \
|
||||||
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2C, \
|
||||||
|
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \
|
||||||
|
K40, K49, K42, K44, K45, K48, K0B, K0C, K4C \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define TEMPLATE_RESET KEYMAP_ARROW( \
|
||||||
|
RESET, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET, \
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET)
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1 @@
|
|||||||
|
// This space intentionally left blank
|
@ -0,0 +1,3 @@
|
|||||||
|
USER_NAME := talljoe
|
||||||
|
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
@ -0,0 +1 @@
|
|||||||
|
SRC += $(KEYMAP_PATH)/solarized.c
|
@ -0,0 +1,23 @@
|
|||||||
|
#include "solarized.h"
|
||||||
|
|
||||||
|
#define MAKE_COLOR(_H, _S, _V) \
|
||||||
|
{ .h = (((uint32_t)_H) * 255) / 360, .s = (((uint16_t)_S) * 255) / 100, .v = (((uint16_t)_V) * 255) / 100 }
|
||||||
|
|
||||||
|
solarized_t solarized = {
|
||||||
|
.base03 = MAKE_COLOR(193, 100, 21),
|
||||||
|
.base02 = MAKE_COLOR(192, 90, 26),
|
||||||
|
.base01 = MAKE_COLOR(194, 25, 46),
|
||||||
|
.base00 = MAKE_COLOR(195, 23, 51),
|
||||||
|
.base0 = MAKE_COLOR(186, 13, 59),
|
||||||
|
.base1 = MAKE_COLOR(180, 9, 63),
|
||||||
|
.base2 = MAKE_COLOR( 44, 11, 93),
|
||||||
|
.base3 = MAKE_COLOR( 44, 10, 99),
|
||||||
|
.yellow = MAKE_COLOR( 45, 100, 71),
|
||||||
|
.orange = MAKE_COLOR( 18, 89, 80),
|
||||||
|
.red = MAKE_COLOR( 1, 79, 86),
|
||||||
|
.magenta = MAKE_COLOR(331, 74, 83),
|
||||||
|
.violet = MAKE_COLOR(237, 45, 77),
|
||||||
|
.blue = MAKE_COLOR(205, 82, 82),
|
||||||
|
.cyan = MAKE_COLOR(175, 74, 63),
|
||||||
|
.green = MAKE_COLOR( 68, 100, 60),
|
||||||
|
};
|
@ -0,0 +1,27 @@
|
|||||||
|
#ifndef SOLARIZED_H
|
||||||
|
#define SOLARIZED_H
|
||||||
|
|
||||||
|
#include "quantum/color.h"
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
HSV base03;
|
||||||
|
HSV base02;
|
||||||
|
HSV base01;
|
||||||
|
HSV base00;
|
||||||
|
HSV base0;
|
||||||
|
HSV base1;
|
||||||
|
HSV base2;
|
||||||
|
HSV base3;
|
||||||
|
HSV yellow;
|
||||||
|
HSV orange;
|
||||||
|
HSV red;
|
||||||
|
HSV magenta;
|
||||||
|
HSV violet;
|
||||||
|
HSV blue;
|
||||||
|
HSV cyan;
|
||||||
|
HSV green;
|
||||||
|
} solarized_t;
|
||||||
|
|
||||||
|
extern solarized_t solarized;
|
||||||
|
|
||||||
|
#endif
|
@ -1,34 +1,146 @@
|
|||||||
//Tap Dance
|
//Tap Dance
|
||||||
#include "talljoe.h"
|
#include "talljoe.h"
|
||||||
|
|
||||||
// Send semin-colon + enter on two taps
|
enum {
|
||||||
void tap_dance_semicolon(qk_tap_dance_state_t *state, void *user_data) {
|
SINGLE_TAP = 1,
|
||||||
|
SINGLE_HOLD = 2,
|
||||||
|
DOUBLE_TAP = 3,
|
||||||
|
DOUBLE_HOLD = 4,
|
||||||
|
DOUBLE_SINGLE_TAP = 5, //send two single taps
|
||||||
|
TRIPLE_TAP = 6,
|
||||||
|
TRIPLE_HOLD = 7,
|
||||||
|
SPECIAL = 8
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct {
|
||||||
|
int quote;
|
||||||
|
int semicolon;
|
||||||
|
} tap_state = {0};
|
||||||
|
|
||||||
|
int cur_dance (qk_tap_dance_state_t *state) {
|
||||||
|
if (state->count == 1) {
|
||||||
|
//If count = 1, and it has been interrupted - it doesn't matter if it is pressed or not: Send SINGLE_TAP
|
||||||
|
if (state->interrupted) {
|
||||||
|
// if (!state->pressed) return SINGLE_TAP;
|
||||||
|
//need "permissive hold" here.
|
||||||
|
// else return SINGLE_HOLD;
|
||||||
|
//If the interrupting key is released before the tap-dance key, then it is a single HOLD
|
||||||
|
//However, if the tap-dance key is released first, then it is a single TAP
|
||||||
|
//But how to get access to the state of the interrupting key????
|
||||||
|
return SINGLE_TAP;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (!state->pressed) return SINGLE_TAP;
|
||||||
|
else return SINGLE_HOLD;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//If count = 2, and it has been interrupted - assume that user is trying to type the letter associated
|
||||||
|
//with single tap.
|
||||||
|
else if (state->count == 2) {
|
||||||
|
if (state->interrupted) return DOUBLE_SINGLE_TAP;
|
||||||
|
else if (state->pressed) return DOUBLE_HOLD;
|
||||||
|
else return DOUBLE_TAP;
|
||||||
|
}
|
||||||
|
else if ((state->count == 3) && ((state->interrupted) || (!state->pressed))) return TRIPLE_TAP;
|
||||||
|
else if (state->count == 3) return TRIPLE_HOLD;
|
||||||
|
else return SPECIAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int hold_cur_dance (qk_tap_dance_state_t *state) {
|
||||||
|
if (state->count == 1) {
|
||||||
|
if (state->interrupted) {
|
||||||
|
if (!state->pressed) return SINGLE_TAP;
|
||||||
|
else return SINGLE_HOLD;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (!state->pressed) return SINGLE_TAP;
|
||||||
|
else return SINGLE_HOLD;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//If count = 2, and it has been interrupted - assume that user is trying to type the letter associated
|
||||||
|
//with single tap.
|
||||||
|
else if (state->count == 2) {
|
||||||
|
if (state->pressed) return DOUBLE_HOLD;
|
||||||
|
else return DOUBLE_TAP;
|
||||||
|
}
|
||||||
|
else if (state->count == 3) {
|
||||||
|
if (!state->pressed) return TRIPLE_TAP;
|
||||||
|
else return TRIPLE_HOLD;
|
||||||
|
}
|
||||||
|
else return SPECIAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send semi-colon + enter on two taps
|
||||||
|
void tap_dance_semicolon_finished(qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
tap_state.semicolon = hold_cur_dance(state);
|
||||||
|
switch (tap_state.semicolon) {
|
||||||
|
case SINGLE_TAP: case DOUBLE_HOLD: register_code(KC_SCLN); break;
|
||||||
|
case SINGLE_HOLD: layer_on(_NUM); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void tap_dance_semicolon_reset(qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
switch (tap_state.semicolon) {
|
||||||
|
case SINGLE_TAP: case DOUBLE_HOLD: unregister_code(KC_SCLN); break;
|
||||||
|
case DOUBLE_TAP: {
|
||||||
|
if (get_mods()) {
|
||||||
|
SEND_STRING(";;"); // send normal when mods are pressed
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
SEND_STRING(";\n");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case TRIPLE_TAP: {
|
||||||
|
SEND_STRING(";\n\n");
|
||||||
|
}
|
||||||
|
case SPECIAL: layer_invert(_NUM); break;
|
||||||
|
case SINGLE_HOLD: layer_off(_NUM); break;
|
||||||
|
}
|
||||||
|
tap_state.semicolon = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send `. ~. ```
|
||||||
|
void tap_dance_grave_finished(qk_tap_dance_state_t *state, void *user_data) {
|
||||||
switch(state->count) {
|
switch(state->count) {
|
||||||
case 1:
|
case 1:
|
||||||
register_code(KC_SCLN);
|
SEND_STRING("`");
|
||||||
unregister_code(KC_SCLN);
|
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
register_code(KC_SCLN);
|
SEND_STRING("~");
|
||||||
unregister_code(KC_SCLN);
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t mods = get_mods();
|
void tap_dance_grave_each(qk_tap_dance_state_t *state, void *user_data) {
|
||||||
if (mods) {
|
if(state->count == 3) {
|
||||||
clear_mods();
|
SEND_STRING("```");
|
||||||
|
} else if (state->count > 3) {
|
||||||
|
SEND_STRING("`");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
register_code(KC_ENT);
|
|
||||||
unregister_code(KC_ENT);
|
|
||||||
|
|
||||||
if (mods) {
|
void tap_dance_quote_finished(qk_tap_dance_state_t *state, void *user_data) {
|
||||||
set_mods(mods);
|
tap_state.quote = hold_cur_dance(state);
|
||||||
|
switch (tap_state.quote) {
|
||||||
|
case SINGLE_TAP: case DOUBLE_HOLD: register_code(KC_QUOT); break;
|
||||||
|
case SINGLE_HOLD: layer_on(_NAV); break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
reset_tap_dance(state);
|
void tap_dance_quote_reset(qk_tap_dance_state_t *state, void *user_data) {
|
||||||
break;
|
switch (tap_state.quote) {
|
||||||
|
case SINGLE_TAP: case DOUBLE_HOLD: unregister_code(KC_QUOTE); break;
|
||||||
|
case DOUBLE_TAP: SEND_STRING("\""); break;
|
||||||
|
case TRIPLE_TAP: layer_invert(_NAV); break;
|
||||||
|
case SINGLE_HOLD: layer_off(_NAV); break;
|
||||||
}
|
}
|
||||||
|
tap_state.quote = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
qk_tap_dance_action_t tap_dance_actions[] = {
|
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||||
[TD_SEMICOLON] = ACTION_TAP_DANCE_FN(tap_dance_semicolon),
|
[TD_SEMICOLON] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_dance_semicolon_finished, tap_dance_semicolon_reset),
|
||||||
|
[TD_GRAVE] = ACTION_TAP_DANCE_FN_ADVANCED(tap_dance_grave_each, tap_dance_grave_finished, NULL),
|
||||||
|
[TD_QUOTE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_dance_quote_finished, tap_dance_quote_reset),
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in new issue