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
|
||||
#include "talljoe.h"
|
||||
|
||||
// Send semin-colon + enter on two taps
|
||||
void tap_dance_semicolon(qk_tap_dance_state_t *state, void *user_data) {
|
||||
enum {
|
||||
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) {
|
||||
case 1:
|
||||
register_code(KC_SCLN);
|
||||
unregister_code(KC_SCLN);
|
||||
SEND_STRING("`");
|
||||
break;
|
||||
case 2:
|
||||
register_code(KC_SCLN);
|
||||
unregister_code(KC_SCLN);
|
||||
SEND_STRING("~");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t mods = get_mods();
|
||||
if (mods) {
|
||||
clear_mods();
|
||||
}
|
||||
void tap_dance_grave_each(qk_tap_dance_state_t *state, void *user_data) {
|
||||
if(state->count == 3) {
|
||||
SEND_STRING("```");
|
||||
} else if (state->count > 3) {
|
||||
SEND_STRING("`");
|
||||
}
|
||||
}
|
||||
|
||||
register_code(KC_ENT);
|
||||
unregister_code(KC_ENT);
|
||||
|
||||
if (mods) {
|
||||
set_mods(mods);
|
||||
}
|
||||
void tap_dance_quote_finished(qk_tap_dance_state_t *state, void *user_data) {
|
||||
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);
|
||||
break;
|
||||
void tap_dance_quote_reset(qk_tap_dance_state_t *state, void *user_data) {
|
||||
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[] = {
|
||||
[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