From 73b4484f633f36a8256cb02deab7a6e3ef93595f Mon Sep 17 00:00:00 2001 From: Manna Harbour <51143715+manna-harbour@users.noreply.github.com> Date: Tue, 23 Feb 2021 16:31:13 +1100 Subject: [PATCH] Add combos of primary and secondary thumbs to emulate tertiary thumb --- config/corne.keymap | 3 + miryoku/miryoku-zmk.org | 110 +++++++++++++++++++++++++++----- miryoku/miryoku.dtsi | 137 +++++++++++++++++++++++++++++----------- miryoku/split_3x5_2.h | 5 ++ miryoku/split_3x5_3.h | 3 + miryoku/split_3x6_3.h | 3 + 6 files changed, 210 insertions(+), 51 deletions(-) diff --git a/config/corne.keymap b/config/corne.keymap index f7a26a0..05bc521 100644 --- a/config/corne.keymap +++ b/config/corne.keymap @@ -1,3 +1,6 @@ #include "../miryoku/split_3x6_3.h" + +#define MIRYOKU_COMBO_TPS_ENABLE + #include "../miryoku/miryoku.dtsi" diff --git a/miryoku/miryoku-zmk.org b/miryoku/miryoku-zmk.org index c5ed931..c79869f 100644 --- a/miryoku/miryoku-zmk.org +++ b/miryoku/miryoku-zmk.org @@ -911,6 +911,10 @@ layout is mapped onto keyboards with different physical layouts as a subset. *** [[split_3x5_2.h]] +Combos of primary and secondary thumb keys emulate the missing tertiary thumb +key. To enable with other subset mappings for compatibility, add ~#define +MIRYOKU_COMBO_TPS_ENABLE~ to the keymap before the includes. + #+BEGIN_SRC C :noweb yes :padline no :tangle split_3x5_2.h // <
> @@ -928,6 +932,11 @@ K20 K21 K22 K23 K24 K25 K26 K27 K28 K29 \ K33 K34 K35 K36 #define MIRYOKU_SUPERMAP MIRYOKU_SUBMAP + +#define MIRYOKU_COMBO_TPSL 30 31 +#define MIRYOKU_COMBO_TPSR 32 33 + +#define MIRYOKU_COMBO_TPS_ENABLE #+END_SRC @@ -950,6 +959,9 @@ K20 K21 K22 K23 K24 K25 K26 K27 K28 K29 \ K32 K33 K34 K35 K36 K37 #define MIRYOKU_SUPERMAP MIRYOKU_SUBMAP + +#define MIRYOKU_COMBO_TPSL 33 34 +#define MIRYOKU_COMBO_TPSR 35 36 #+END_SRC @@ -981,6 +993,9 @@ XXX K20 K21 K22 K23 K24 K25 K26 K27 K28 K29 XXX \ &kp LCTRL K10 K11 K12 K13 K14 K15 K16 K17 K18 K19 &kp RCTRL \ &kp LSHFT K20 K21 K22 K23 K24 K25 K26 K27 K28 K29 &kp RSHFT \ K32 K33 K34 K35 K36 K37 + +#define MIRYOKU_COMBO_TPSL 37 38 +#define MIRYOKU_COMBO_TPSR 39 40 #+END_SRC @@ -1057,6 +1072,9 @@ K20 K21 K22 K23 K24 &kp NUM_4 &kp NUM_3 K25 K26 K27 K28 K bindings = <&kp>, <&kp>; }; }; +}; + +/ { keymap { compatible = "zmk,keymap"; BASE_layer { @@ -1096,32 +1114,32 @@ K20 K21 K22 K23 K24 &kp NUM_4 &kp NUM_3 K25 K26 K27 K28 K bindings = < #if defined MIRYOKU_ALPHAS_COLEMAK MIRYOKU_SUPERMAP( -<> - ) + <> + ) #elif defined MIRYOKU_ALPHAS_COLEMAKDH MIRYOKU_SUPERMAP( -<> - ) + <> + ) #elif defined MIRYOKU_ALPHAS_DVORAK - MIRYOKU_SUPERMAP( -<> - ) + MIRYOKU_SUPERMAP( + <> + ) #elif defined MIRYOKU_ALPHAS_HALMAK MIRYOKU_SUPERMAP( -<> - ) + <> + ) #elif defined MIRYOKU_ALPHAS_WORKMAN MIRYOKU_SUPERMAP( -<> - ) + <> + ) #elif defined MIRYOKU_ALPHAS_QWERTY MIRYOKU_SUPERMAP( -<> - ) + <> + ) #else MIRYOKU_SUPERMAP( -<> - ) + <> + ) #endif >; }; @@ -1194,6 +1212,68 @@ K20 K21 K22 K23 K24 &kp NUM_4 &kp NUM_3 K25 K26 K27 K28 K }; }; }; + +#if defined (MIRYOKU_COMBO_TPS_ENABLE) && defined (MIRYOKU_COMBO_TPSL) && defined (MIRYOKU_COMBO_TPSR) +/ { + combos { + compatible = "zmk,combos"; + combo_tpsl_BASE { + timeout-ms = <200>; + key-positions = ; + bindings = << MEDR ESC>; + layers = ; + }; + combo_tpsr_BASE { + timeout-ms = <200>; + key-positions = ; + bindings = << FUNL DEL>; + layers = ; + }; + combo_tpsr_MBO { + timeout-ms = <200>; + key-positions = ; + bindings = ; + layers = ; + }; + combo_tpsr_NAVR { + timeout-ms = <200>; + key-positions = ; + bindings = <&kp DEL>; + layers = ; + }; + combo_tpsr_MOUR { + timeout-ms = <200>; + key-positions = ; + bindings = ; + layers = ; + }; + combo_tpsr_MEDR { + timeout-ms = <200>; + key-positions = ; + bindings = <&kp K_MUTE>; + layers = ; + }; + combo_tpsl_NSL { + timeout-ms = <200>; + key-positions = ; + bindings = <&kp DOT>; + layers = ; + }; + combo_tpsl_NSSL { + timeout-ms = <200>; + key-positions = ; + bindings = <&kp LPAR>; + layers = ; + }; + combo_tpsl_FUNL { + timeout-ms = <200>; + key-positions = ; + bindings = <&kp K_APP>; + layers = ; + }; + }; +}; +#endif #+END_SRC diff --git a/miryoku/miryoku.dtsi b/miryoku/miryoku.dtsi index 96ad7b7..9c8eaa9 100644 --- a/miryoku/miryoku.dtsi +++ b/miryoku/miryoku.dtsi @@ -58,6 +58,9 @@ bindings = <&kp>, <&kp>; }; }; +}; + +/ { keymap { compatible = "zmk,keymap"; BASE_layer { @@ -118,53 +121,53 @@ U_NP, U_NP, < MEDR ESC, < NAVR SPC, < MOUR TAB, < NSSL R bindings = < #if defined MIRYOKU_ALPHAS_COLEMAK MIRYOKU_SUPERMAP( -&kp Q, &kp W, &kp F, &kp P, &kp G, &kp J, &kp L, &kp U, &kp Y, &kp SQT, -&kp A, &kp R, &kp S, &kp T, &kp D, &kp H, &kp N, &kp E, &kp I, &kp O, -&kp Z, &kp X, &kp C, &kp V, &kp B, &kp K, &kp M, &kp COMMA, &kp DOT, &kp SLASH, -U_NP, U_NP, &kp ESC, &kp SPC, &kp TAB, &kp RET, &kp BSPC, &kp DEL, U_NP, U_NP - ) + &kp Q, &kp W, &kp F, &kp P, &kp G, &kp J, &kp L, &kp U, &kp Y, &kp SQT, + &kp A, &kp R, &kp S, &kp T, &kp D, &kp H, &kp N, &kp E, &kp I, &kp O, + &kp Z, &kp X, &kp C, &kp V, &kp B, &kp K, &kp M, &kp COMMA, &kp DOT, &kp SLASH, + U_NP, U_NP, &kp ESC, &kp SPC, &kp TAB, &kp RET, &kp BSPC, &kp DEL, U_NP, U_NP + ) #elif defined MIRYOKU_ALPHAS_COLEMAKDH MIRYOKU_SUPERMAP( -&kp Q, &kp W, &kp F, &kp P, &kp B, &kp J, &kp L, &kp U, &kp Y, &kp SQT, -&kp A, &kp R, &kp S, &kp T, &kp G, &kp K, &kp N, &kp E, &kp I, &kp O, -&kp Z, &kp X, &kp C, &kp D, &kp V, &kp M, &kp H, &kp COMMA, &kp DOT, &kp SLASH, -U_NP, U_NP, &kp ESC, &kp SPC, &kp TAB, &kp RET, &kp BSPC, &kp DEL, U_NP, U_NP - ) + &kp Q, &kp W, &kp F, &kp P, &kp B, &kp J, &kp L, &kp U, &kp Y, &kp SQT, + &kp A, &kp R, &kp S, &kp T, &kp G, &kp K, &kp N, &kp E, &kp I, &kp O, + &kp Z, &kp X, &kp C, &kp D, &kp V, &kp M, &kp H, &kp COMMA, &kp DOT, &kp SLASH, + U_NP, U_NP, &kp ESC, &kp SPC, &kp TAB, &kp RET, &kp BSPC, &kp DEL, U_NP, U_NP + ) #elif defined MIRYOKU_ALPHAS_DVORAK - MIRYOKU_SUPERMAP( -&kp SQT, &kp COMMA, &kp DOT, &kp P, &kp Y, &kp F, &kp G, &kp C, &kp R, &kp L, -&kp A, &kp O, &kp E, &kp U, &kp I, &kp D, &kp H, &kp T, &kp N, &kp S, -&kp SLASH, &kp Q, &kp J, &kp K, &kp X, &kp B, &kp M, &kp W, &kp V, &kp Z, -U_NP, U_NP, &kp ESC, &kp SPC, &kp TAB, &kp RET, &kp BSPC, &kp DEL, U_NP, U_NP - ) + MIRYOKU_SUPERMAP( + &kp SQT, &kp COMMA, &kp DOT, &kp P, &kp Y, &kp F, &kp G, &kp C, &kp R, &kp L, + &kp A, &kp O, &kp E, &kp U, &kp I, &kp D, &kp H, &kp T, &kp N, &kp S, + &kp SLASH, &kp Q, &kp J, &kp K, &kp X, &kp B, &kp M, &kp W, &kp V, &kp Z, + U_NP, U_NP, &kp ESC, &kp SPC, &kp TAB, &kp RET, &kp BSPC, &kp DEL, U_NP, U_NP + ) #elif defined MIRYOKU_ALPHAS_HALMAK MIRYOKU_SUPERMAP( -&kp W, &kp L, &kp R, &kp B, &kp Z, &kp SQT, &kp Q, &kp U, &kp D, &kp J, -&kp S, &kp H, &kp N, &kp T, &kp COMMA, &kp DOT, &kp A, &kp E, &kp O, &kp I, -&kp F, &kp M, &kp V, &kp C, &kp SLASH, &kp G, &kp P, &kp X, &kp K, &kp Y, -U_NP, U_NP, &kp ESC, &kp SPC, &kp TAB, &kp RET, &kp BSPC, &kp DEL, U_NP, U_NP - ) + &kp W, &kp L, &kp R, &kp B, &kp Z, &kp SQT, &kp Q, &kp U, &kp D, &kp J, + &kp S, &kp H, &kp N, &kp T, &kp COMMA, &kp DOT, &kp A, &kp E, &kp O, &kp I, + &kp F, &kp M, &kp V, &kp C, &kp SLASH, &kp G, &kp P, &kp X, &kp K, &kp Y, + U_NP, U_NP, &kp ESC, &kp SPC, &kp TAB, &kp RET, &kp BSPC, &kp DEL, U_NP, U_NP + ) #elif defined MIRYOKU_ALPHAS_WORKMAN MIRYOKU_SUPERMAP( -&kp Q, &kp D, &kp R, &kp W, &kp B, &kp J, &kp F, &kp U, &kp P, &kp SQT, -&kp A, &kp S, &kp H, &kp T, &kp G, &kp Y, &kp N, &kp E, &kp O, &kp I, -&kp Z, &kp X, &kp M, &kp C, &kp V, &kp K, &kp L, &kp COMMA, &kp DOT, &kp SLASH, -U_NP, U_NP, &kp ESC, &kp SPC, &kp TAB, &kp RET, &kp BSPC, &kp DEL, U_NP, U_NP - ) + &kp Q, &kp D, &kp R, &kp W, &kp B, &kp J, &kp F, &kp U, &kp P, &kp SQT, + &kp A, &kp S, &kp H, &kp T, &kp G, &kp Y, &kp N, &kp E, &kp O, &kp I, + &kp Z, &kp X, &kp M, &kp C, &kp V, &kp K, &kp L, &kp COMMA, &kp DOT, &kp SLASH, + U_NP, U_NP, &kp ESC, &kp SPC, &kp TAB, &kp RET, &kp BSPC, &kp DEL, U_NP, U_NP + ) #elif defined MIRYOKU_ALPHAS_QWERTY MIRYOKU_SUPERMAP( -&kp Q, &kp W, &kp E, &kp R, &kp T, &kp Y, &kp U, &kp I, &kp O, &kp P, -&kp A, &kp S, &kp D, &kp F, &kp G, &kp H, &kp J, &kp K, &kp L, &kp SQT, -&kp Z, &kp X, &kp C, &kp V, &kp B, &kp N, &kp M, &kp COMMA, &kp DOT, &kp SLASH, -U_NP, U_NP, &kp ESC, &kp SPC, &kp TAB, &kp RET, &kp BSPC, &kp DEL, U_NP, U_NP - ) + &kp Q, &kp W, &kp E, &kp R, &kp T, &kp Y, &kp U, &kp I, &kp O, &kp P, + &kp A, &kp S, &kp D, &kp F, &kp G, &kp H, &kp J, &kp K, &kp L, &kp SQT, + &kp Z, &kp X, &kp C, &kp V, &kp B, &kp N, &kp M, &kp COMMA, &kp DOT, &kp SLASH, + U_NP, U_NP, &kp ESC, &kp SPC, &kp TAB, &kp RET, &kp BSPC, &kp DEL, U_NP, U_NP + ) #else MIRYOKU_SUPERMAP( -&kp Q, &kp W, &kp F, &kp P, &kp B, &kp J, &kp L, &kp U, &kp Y, &kp SQT, -&kp A, &kp R, &kp S, &kp T, &kp G, &kp M, &kp N, &kp E, &kp I, &kp O, -&kp Z, &kp X, &kp C, &kp D, &kp V, &kp K, &kp H, &kp COMMA, &kp DOT, &kp SLASH, -U_NP, U_NP, &kp ESC, &kp SPC, &kp TAB, &kp RET, &kp BSPC, &kp DEL, U_NP, U_NP - ) + &kp Q, &kp W, &kp F, &kp P, &kp B, &kp J, &kp L, &kp U, &kp Y, &kp SQT, + &kp A, &kp R, &kp S, &kp T, &kp G, &kp M, &kp N, &kp E, &kp I, &kp O, + &kp Z, &kp X, &kp C, &kp D, &kp V, &kp K, &kp H, &kp COMMA, &kp DOT, &kp SLASH, + U_NP, U_NP, &kp ESC, &kp SPC, &kp TAB, &kp RET, &kp BSPC, &kp DEL, U_NP, U_NP + ) #endif >; }; @@ -267,3 +270,65 @@ U_NP, U_NP, &kp K_APP, &kp SPC, &kp TAB, U_NA, U_ }; }; }; + +#if defined (MIRYOKU_COMBO_TPS_ENABLE) && defined (MIRYOKU_COMBO_TPSL) && defined (MIRYOKU_COMBO_TPSR) +/ { + combos { + compatible = "zmk,combos"; + combo_tpsl_BASE { + timeout-ms = <200>; + key-positions = ; + bindings = << MEDR ESC>; + layers = ; + }; + combo_tpsr_BASE { + timeout-ms = <200>; + key-positions = ; + bindings = << FUNL DEL>; + layers = ; + }; + combo_tpsr_MBO { + timeout-ms = <200>; + key-positions = ; + bindings = ; + layers = ; + }; + combo_tpsr_NAVR { + timeout-ms = <200>; + key-positions = ; + bindings = <&kp DEL>; + layers = ; + }; + combo_tpsr_MOUR { + timeout-ms = <200>; + key-positions = ; + bindings = ; + layers = ; + }; + combo_tpsr_MEDR { + timeout-ms = <200>; + key-positions = ; + bindings = <&kp K_MUTE>; + layers = ; + }; + combo_tpsl_NSL { + timeout-ms = <200>; + key-positions = ; + bindings = <&kp DOT>; + layers = ; + }; + combo_tpsl_NSSL { + timeout-ms = <200>; + key-positions = ; + bindings = <&kp LPAR>; + layers = ; + }; + combo_tpsl_FUNL { + timeout-ms = <200>; + key-positions = ; + bindings = <&kp K_APP>; + layers = ; + }; + }; +}; +#endif diff --git a/miryoku/split_3x5_2.h b/miryoku/split_3x5_2.h index 21d64fd..248a7bf 100644 --- a/miryoku/split_3x5_2.h +++ b/miryoku/split_3x5_2.h @@ -14,3 +14,8 @@ K20 K21 K22 K23 K24 K25 K26 K27 K28 K29 \ K33 K34 K35 K36 #define MIRYOKU_SUPERMAP MIRYOKU_SUBMAP + +#define MIRYOKU_COMBO_TPSL 30 31 +#define MIRYOKU_COMBO_TPSR 32 33 + +#define MIRYOKU_COMBO_TPS_ENABLE diff --git a/miryoku/split_3x5_3.h b/miryoku/split_3x5_3.h index 9f9922f..20dbdb1 100644 --- a/miryoku/split_3x5_3.h +++ b/miryoku/split_3x5_3.h @@ -14,3 +14,6 @@ K20 K21 K22 K23 K24 K25 K26 K27 K28 K29 \ K32 K33 K34 K35 K36 K37 #define MIRYOKU_SUPERMAP MIRYOKU_SUBMAP + +#define MIRYOKU_COMBO_TPSL 33 34 +#define MIRYOKU_COMBO_TPSR 35 36 diff --git a/miryoku/split_3x6_3.h b/miryoku/split_3x6_3.h index 9f11edc..7b80d5f 100644 --- a/miryoku/split_3x6_3.h +++ b/miryoku/split_3x6_3.h @@ -23,3 +23,6 @@ XXX K20 K21 K22 K23 K24 K25 K26 K27 K28 K29 XXX \ &kp LCTRL K10 K11 K12 K13 K14 K15 K16 K17 K18 K19 &kp RCTRL \ &kp LSHFT K20 K21 K22 K23 K24 K25 K26 K27 K28 K29 &kp RSHFT \ K32 K33 K34 K35 K36 K37 + +#define MIRYOKU_COMBO_TPSL 37 38 +#define MIRYOKU_COMBO_TPSR 39 40