Keymap: Talljoe's keymap for oddball keyboards (#3910)
authorJoe Wasson <jwasson+github@gmail.com>
Wed, 19 Sep 2018 23:13:58 +0000 (16:13 -0700)
committerDrashna Jaelre <drashna@live.com>
Wed, 19 Sep 2018 23:13:58 +0000 (16:13 -0700)
* 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.

20 files changed:
keyboards/atreus/keymaps/talljoe-atreus/config.h [new file with mode: 0644]
keyboards/atreus/keymaps/talljoe-atreus/keymap.c [new file with mode: 0644]
keyboards/atreus/keymaps/talljoe-atreus/rules.mk [new file with mode: 0644]
keyboards/gherkin/keymaps/talljoe-gherkin/config.h [moved from keyboards/gherkin/keymaps/talljoe_gherkin/config.h with 100% similarity]
keyboards/gherkin/keymaps/talljoe-gherkin/keymap.c [moved from keyboards/gherkin/keymaps/talljoe_gherkin/keymap.c with 100% similarity]
keyboards/gherkin/keymaps/talljoe-gherkin/rules.mk [moved from keyboards/gherkin/keymaps/talljoe_gherkin/rules.mk with 100% similarity]
keyboards/jd45/keymaps/talljoe/config.h [new file with mode: 0644]
keyboards/jd45/keymaps/talljoe/keymap.c [new file with mode: 0644]
keyboards/tv44/keymaps/talljoe-minivan/config.h [new file with mode: 0644]
keyboards/tv44/keymaps/talljoe-minivan/keymap.c [new file with mode: 0644]
keyboards/tv44/keymaps/talljoe-minivan/rules.mk [new file with mode: 0644]
keyboards/zeal60/rules.mk
layouts/community/60_ansi_split_bs_rshift/talljoe/keymap.c
layouts/community/60_ansi_split_bs_rshift/talljoe/rules.mk [new file with mode: 0644]
layouts/community/60_ansi_split_bs_rshift/talljoe/solarized.c [new file with mode: 0644]
layouts/community/60_ansi_split_bs_rshift/talljoe/solarized.h [new file with mode: 0644]
users/talljoe/config.h
users/talljoe/talljoe.c
users/talljoe/talljoe.h
users/talljoe/tapdance.c

diff --git a/keyboards/atreus/keymaps/talljoe-atreus/config.h b/keyboards/atreus/keymaps/talljoe-atreus/config.h
new file mode 100644 (file)
index 0000000..87b68ff
--- /dev/null
@@ -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
diff --git a/keyboards/atreus/keymaps/talljoe-atreus/keymap.c b/keyboards/atreus/keymaps/talljoe-atreus/keymap.c
new file mode 100644 (file)
index 0000000..7812add
--- /dev/null
@@ -0,0 +1 @@
+// This space intentionally left blank
diff --git a/keyboards/atreus/keymaps/talljoe-atreus/rules.mk b/keyboards/atreus/keymaps/talljoe-atreus/rules.mk
new file mode 100644 (file)
index 0000000..92007fe
--- /dev/null
@@ -0,0 +1 @@
+USER_NAME := talljoe
diff --git a/keyboards/jd45/keymaps/talljoe/config.h b/keyboards/jd45/keymaps/talljoe/config.h
new file mode 100644 (file)
index 0000000..f8b0333
--- /dev/null
@@ -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
diff --git a/keyboards/jd45/keymaps/talljoe/keymap.c b/keyboards/jd45/keymaps/talljoe/keymap.c
new file mode 100644 (file)
index 0000000..7812add
--- /dev/null
@@ -0,0 +1 @@
+// This space intentionally left blank
diff --git a/keyboards/tv44/keymaps/talljoe-minivan/config.h b/keyboards/tv44/keymaps/talljoe-minivan/config.h
new file mode 100644 (file)
index 0000000..fa1f43a
--- /dev/null
@@ -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
diff --git a/keyboards/tv44/keymaps/talljoe-minivan/keymap.c b/keyboards/tv44/keymaps/talljoe-minivan/keymap.c
new file mode 100644 (file)
index 0000000..7812add
--- /dev/null
@@ -0,0 +1 @@
+// This space intentionally left blank
diff --git a/keyboards/tv44/keymaps/talljoe-minivan/rules.mk b/keyboards/tv44/keymaps/talljoe-minivan/rules.mk
new file mode 100644 (file)
index 0000000..a4e40d0
--- /dev/null
@@ -0,0 +1,3 @@
+USER_NAME := talljoe
+
+COMMAND_ENABLE   = no  # Commands for debug and configuration
index c4686f9..f099ea9 100644 (file)
@@ -53,7 +53,7 @@ BOOTLOADER = atmel-dfu
 OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
 
 # Build Options
-#   change to "no" to disable the options, or define them in the Makefile in 
+#   change to "no" to disable the options, or define them in the Makefile in
 #   the appropriate keymap folder that will get included automatically
 #
 BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
@@ -76,3 +76,4 @@ RAW_ENABLE = yes
 DYNAMIC_KEYMAP_ENABLE = yes
 CIE1931_CURVE = yes
 
+LAYOUTS = 60_ansi 60_iso 60_hhkb 60_ansi_split_bs_rshift
index b5dc544..cfad9da 100644 (file)
@@ -1,7 +1,7 @@
 #ifdef KEYBOARD_zeal60
 #include "config.h"
 #include "zeal60.h"
-#include "zeal_backlight.h"
+#include "rgb_backlight.h"
 #include "action_layer.h"
 #include "solarized.h"
 #include "talljoe.h"
@@ -9,7 +9,7 @@
 // from zeal_backlight.c
 // we want to be able to set indicators for the spacebar stabs
 // but they are not represented by a row/index.
-extern zeal_backlight_config g_config;
+extern backlight_config g_config;
 void map_row_column_to_led( uint8_t row, uint8_t column, uint8_t *led );
 
 void set_backlight_defaults(void) {
@@ -17,7 +17,7 @@ void set_backlight_defaults(void) {
   uint8_t caps_lock;
   map_row_column_to_led(3, 12, &caps_lock);
   map_row_column_to_led(4, 7, &space);
-  zeal_backlight_config default_values = {
+  backlight_config default_values = {
     .use_split_backspace = USE_SPLIT_BACKSPACE,
     .use_split_left_shift = USE_SPLIT_LEFT_SHIFT,
     .use_split_right_shift = USE_SPLIT_RIGHT_SHIFT,
@@ -34,15 +34,17 @@ void set_backlight_defaults(void) {
     .layer_2_indicator = { .index = space, .color = solarized.yellow },
     .layer_3_indicator = { .index = 254, .color = solarized.red },
     .alphas_mods = {
-      BACKLIGHT_ALPHAS_MODS_ROW_0,
-      BACKLIGHT_ALPHAS_MODS_ROW_1,
-      BACKLIGHT_ALPHAS_MODS_ROW_2,
-      BACKLIGHT_ALPHAS_MODS_ROW_3,
-      BACKLIGHT_ALPHAS_MODS_ROW_4 }
+      RGB_BACKLIGHT_ALPHAS_MODS_ROW_0,
+      RGB_BACKLIGHT_ALPHAS_MODS_ROW_1,
+      RGB_BACKLIGHT_ALPHAS_MODS_ROW_2,
+      RGB_BACKLIGHT_ALPHAS_MODS_ROW_3,
+      RGB_BACKLIGHT_ALPHAS_MODS_ROW_4 }
   };
-  memcpy(&g_config, &default_values, sizeof(zeal_backlight_config));
+  memcpy(&g_config, &default_values, sizeof(backlight_config));
   backlight_config_save();
 
+#undef CUSTOM_RGB_LAYOUTS
+#ifdef CUSTOM_RGB_LAYOUTS
   solarized_t* S = &solarized;
   HSV alphas = S->base2;
   HSV custom_color_map[MATRIX_ROWS][MATRIX_COLS] = CM(
@@ -54,9 +56,12 @@ void set_backlight_defaults(void) {
   );
   for (uint8_t row = 0; row < MATRIX_ROWS; ++row) {
     for (uint8_t col = 0; col < MATRIX_COLS; ++col) {
-      backlight_set_key_color(row, col, custom_color_map[row][col]);
+      uint8_t index;
+                       map_row_column_to_led( row, col, &index );
+      set_key_color(index, custom_color_map[row][col]);
     }
   }
+#endif // CUSTOM_RGB_LAYOUTS
 }
 
 bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
diff --git a/layouts/community/60_ansi_split_bs_rshift/talljoe/rules.mk b/layouts/community/60_ansi_split_bs_rshift/talljoe/rules.mk
new file mode 100644 (file)
index 0000000..239f030
--- /dev/null
@@ -0,0 +1 @@
+SRC += $(KEYMAP_PATH)/solarized.c
diff --git a/layouts/community/60_ansi_split_bs_rshift/talljoe/solarized.c b/layouts/community/60_ansi_split_bs_rshift/talljoe/solarized.c
new file mode 100644 (file)
index 0000000..3e9e726
--- /dev/null
@@ -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),
+};
diff --git a/layouts/community/60_ansi_split_bs_rshift/talljoe/solarized.h b/layouts/community/60_ansi_split_bs_rshift/talljoe/solarized.h
new file mode 100644 (file)
index 0000000..3b00cae
--- /dev/null
@@ -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
index 1cdbb5a..0d06a0b 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef USERSPACE_CONFIG_H
 #define USERSPACE_CONFIG_H
 
-#define IGNORE_MOD_TAP_INTERRUPT
+#define PERMISSIVE_HOLD
 
 #define RESET_LAYER 15
 
index e9c69b0..7a343e7 100644 (file)
@@ -5,10 +5,10 @@
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   [_BASE] = TEMPLATE_TKL(
       KC_ESC,  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_PSCR, KC_SLCK, MO_ADJ ,
-      KC_GRV , 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_INS , KC_HOME, KC_PGUP,
-      KC_TAB , KC_Q,    KC_W,    KC_E,    KC_R,    KC_T   , KC_Y,    KC_U,    KC_I,    KC_O,    KC_P   , KC_LBRC, KC_RBRC, KC_BSPC, KC_DEL , KC_END , KC_PGDN,
-      US_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G   , KC_H,    KC_J,    KC_K,    KC_L,    US_SCLN, US_QUOT,          US_ENT ,
-      KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B   , KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,                   KC_RSFT,          KC_UP  ,
+      US_GRV , KC_1   , KC_2   , KC_3   , KC_4   , KC_5   , KC_6   , KC_7   , KC_8   , KC_9   , KC_0   , KC_MINS, KC_EQL , US_BSLS, KC_INS , KC_HOME, KC_PGUP,
+      US_TAB , KC_Q,    KC_W,    KC_E,    KC_R,    KC_T   , KC_Y,    KC_U,    KC_I,    KC_O,    KC_P   , KC_LBRC, KC_RBRC, KC_BSPC, KC_DEL , KC_END , KC_PGDN,
+      CTL_ESC, KC_A,    KC_S,    KC_D,    KC_F,    KC_G   , KC_H,    KC_J,    KC_K,    KC_L,    US_SCLN, US_QUOT,          US_ENT ,
+      SH_LBRC, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B   , KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,                   SH_RBRC,          KC_UP  ,
       KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC2, KC_SPC1, KC_SPC3,                   KC_RALT, KC_RGUI, KC_RCTL, KC_PTT , KC_LEFT, KC_DOWN, KC_RGHT),
   [_WORKMAN] = TEMPLATE(
       _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -34,41 +34,44 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
       _______, KC_A,    KC_R,    KC_S,    KC_T,    KC_D   , KC_H,    KC_N,    KC_E,    KC_I,    KC_O   , _______,          _______,
       _______, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B   , KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,          _______, _______,
       _______, _______, _______,                   _______, _______, _______,                   _______, _______, _______, _______),
-
+#if (SPACE_COUNT > 1)
+  // A tweaked version of the Maltron layout
+  [_MALTROFF] = TEMPLATE(
+      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+      _______, KC_Q,    KC_P,    KC_Y,    KC_G,    KC_B   , KC_J,    KC_M,    KC_U,    KC_K,    KC_L,    _______, _______, _______,
+      _______, KC_A,    KC_N,    KC_I,    KC_S,    KC_F   , KC_D,    KC_T,    KC_H,    KC_O,    KC_R   , US_ENT ,          KC_BSPC,
+      _______, KC_Z,    KC_X,    KC_C,    KC_V,    US_QUOT, KC_SCLN, KC_W,    KC_COMM, KC_DOT,  KC_SLSH,          _______, _______,
+      _______, _______, _______,                   MLT_E  , _______, _______,                   _______, _______, _______, _______),
+#endif
 #ifdef ENABLE_GAME_LAYER
   [_GAME] = TEMPLATE(
       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_Y   , KC_U   , KC_I   , KC_O   , KC_P   , KC_LBRC, KC_RBRC, KC_BSPC,
       MO_NAV , KC_A   , KC_S   , KC_D   , KC_F   , KC_G   , KC_H   , KC_J   , KC_K   , KC_L   , KC_SCLN, KC_QUOT,          KC_ENT ,
       KC_LSFT, KC_Z   , KC_X   , KC_C   , KC_V   , KC_B   , KC_N   , KC_M   , KC_COMM, KC_DOT , KC_SLSH,          KC_RSFT, MO_ADJ ,
-      KC_LCTL, KC_PTT , KC_PGDN,                   KC_SPC , KC_SPC , KC_SPC ,                    KC_RALT, KC_APP , KC_RCTL, KC_PTT ),
+      KC_LCTL, KC_PTT , KC_PGDN,                   KC_SPC , KC_SPC , KC_SPC ,                   KC_RALT, KC_APP , KC_RCTL, KC_PTT ),
 #endif
-  [_NAV] = TEMPLATE(
+  [_NAV] = TEMPLATE_NAV(
       KC_GRV , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-      KC_TAB , KC_F1  , KC_F2  , KC_F3  , KC_F4  , KC_VOLU, KC_INS , KC_PGUP, KC_UP  , KC_PGDN, KC_BTN1, KC_BTN2, KC_BTN3, KC_DEL ,
-      US_CAPS, KC_F5  , KC_F6  , KC_F7  , KC_F8  , KC_MUTE, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END , KC_RCTL,          TG_ADJ ,
-      KC_LSFT, KC_F9  , KC_F10 , KC_F11 , KC_F12 , KC_VOLD, KC_END , KC_PGDN, KC_WBAK, KC_WFWD, KC_WREF,          KC_RSFT, KC_APP ,
+      US_TAB , KC_EXLM, KC_AT  , KC_HASH, KC_DLR , KC_PERC, KC_INS , KC_PGUP, KC_UP  , KC_PGDN, KC_BTN1, KC_BTN3, KC_BTN2, KC_DEL ,
+      CTL_ESC, KC_LCBR, KC_RCBR, KC_LPRN, KC_RPRN, KC_AMPR, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END , US_QUOT,          TG_ADJ ,
+      KC_LSFT, KC_EQL,  KC_PLUS, KC_MINS, KC_UNDS, KC_ASTR, KC_CALC, US_GRV , KC_WBAK, KC_WFWD, KC_WREF,          KC_RSFT, KC_APP ,
       KC_LCTL, KC_LGUI, KC_LALT,                   NV_SPC2, NV_SPC1, NV_SPC3,                   KC_RALT, KC_RGUI, KC_RCTL, KC_PTT ),
-  [_NUM] = TEMPLATE(
+  [_NUM] = TEMPLATE_NUM(
       XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-      KC_GRV , KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, XXXXXXX, KC_DEL ,
-      US_CAPS, KC_LCBR, KC_RCBR, KC_LPRN, KC_RPRN, KC_LBRC, KC_RBRC, KC_4,    KC_5,    KC_6,    KC_PPLS, KC_PENT,          XXXXXXX,
-      KC_LSFT, KC_EQL,  KC_PLUS, KC_BSLS, KC_PIPE, KC_SCLN, XXXXXXX, KC_1,    KC_2,    KC_3,    KC_PAST,          KC_PSLS, XXXXXXX,
+      KC_GRV , KC_F1  , KC_F2  , KC_F3  , KC_F4  , KC_VOLU, KC_CIRC, KC_7,    KC_8,    KC_9,    KC_PMNS, XXXXXXX, XXXXXXX, KC_DEL ,
+      CTL_ESC, KC_F5  , KC_F6  , KC_F7  , KC_F8  , KC_MUTE, KC_PENT, KC_4,    KC_5,    KC_6,    KC_PPLS, XXXXXXX,          KC_ENT ,
+      KC_LSFT, KC_F9  , KC_F10 , KC_F11 , KC_F12 , KC_VOLD, KC_PIPE, KC_1,    KC_2,    KC_3,    KC_PAST,          KC_PSLS, TG_NUM ,
       KC_LCTL, KC_LGUI, KC_LALT,                   NM_SPC2, NM_SPC1, NM_SPC3,                   KC_PDOT, KC_PCMM, KC_RCTL, KC_PTT ),
  // Adjust layer is on the split-shift key; or NAV+Enter (for non-split keyboards)
-  [_ADJUST] = TEMPLATE(
-      MO_RST , FX(1)  , FX(2)  , FX(3)  , FX(4)  , FX(5)  , FX(6)  , FX(7)  , FX(8)  , FX(9)  , FX(10) , BR_DEC , BR_INC , XXXXXXX, MO_RST ,
-      XXXXXXX, H1_INC , S1_INC , H2_INC , S2_INC , EF_INC , RGB_HUI, RGB_SAI, RGB_MOD, RGB_M_P, DFAULTS, RGB_VAD, RGB_VAI, KC_DEL ,
+  [_ADJUST] = TEMPLATE_ADJUST(
+      MO_RST , FX(1)  , FX(2)  , FX(3)  , FX(4)  , FX(5)  , FX(8)  , FX(9)  , FX(10) , FX(20) , FX(0)  , BR_DEC , BR_INC , XXXXXXX, MO_RST ,
+      MO_RST , H1_INC , S1_INC , H2_INC , S2_INC , EF_INC , RGB_HUI, RGB_SAI, RGB_MOD, RGB_M_P, DFAULTS, RGB_VAD, RGB_VAI, MO_RST ,
       XXXXXXX, H1_DEC , S1_DEC , H2_DEC , S2_DEC , EF_DEC , RGB_HUD, RGB_SAD, RGB_RMOD,RGB_M_K, RGB_M_B, RGB_M_G,          TG_ADJ ,
-      TG_NKRO, LY_QWER, LY_WORK, LY_NRMN, LY_DVRK, LY_CLMK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MAKE,          KC_CAPS, XXXXXXX,
-      MO_RST , AG_NORM, AG_SWAP,                   XXXXXXX, BL_STEP, XXXXXXX,                   RGB_TOG, XXXXXXX, XXXXXXX, TG_GAME),
+      TG_NKRO, LY_QWER, LY_WORK, LY_NRMN, LY_DVRK, LY_CLMK, XXXXXXX, LY_MALT, XXXXXXX, XXXXXXX, KC_MAKE,          KC_CAPS, XXXXXXX,
+      MO_RST , AG_SWAP, AG_NORM,                   XXXXXXX, BL_TOGG, XXXXXXX,                   RGB_TOG, XXXXXXX, XXXXXXX, TG_GAME),
   // To Reset hit FN + ` + Esc
-  [_RESET] = TEMPLATE(
-      RESET  , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 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, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          XXXXXXX, XXXXXXX,
-      RESET  , XXXXXXX, XXXXXXX,                   XXXXXXX, KC_SLEP, XXXXXXX,                   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX),
+  [_RESET] = TEMPLATE_RESET,
 };
 
 void matrix_scan_user(void) {
index 7c34cd4..4436c0a 100644 (file)
@@ -8,7 +8,7 @@ enum userspace_custom_keycodes {
   DFAULTS,
   TOGGLE_BACKLIGHT,
   EFFECT,
-  EFFECT_END = EFFECT + 10
+  EFFECT_END = EFFECT + 20
 };
 
 #ifndef RESET_LAYER
@@ -21,6 +21,7 @@ enum layers {
     _NORMAN,
     _DVORAK,
     _COLMAK,
+    _MALTROFF,
     _GAME,
     _NAV,
     _NUM,
@@ -29,7 +30,9 @@ enum layers {
 };
 
 enum tap_dancers {
-  TD_SEMICOLON
+  TD_SEMICOLON,
+  TD_GRAVE,
+  TD_QUOTE,
 };
 
 #define _______ KC_TRNS
@@ -39,6 +42,7 @@ enum tap_dancers {
 #define MO_ADJ    MO(_ADJUST)
 #define MO_RST    MO(_RESET)
 #define TG_ADJ    TG(_ADJUST)
+#define TG_NUM    TG(_NUM)
 #ifdef ENABLE_GAME_LAYER
   #define TG_GAME TG(_GAME)
 #else
@@ -49,16 +53,28 @@ enum tap_dancers {
 #define LY_NRMN   DF(_NORMAN)
 #define LY_DVRK   DF(_DVORAK)
 #define LY_CLMK   DF(_COLMAK)
+#if SPACE_COUNT >= 2
+  #define LY_MALT DF(_MALTROFF)
+#else
+  #define LY_MALT KC_NO
+#endif
 #define TG_NKRO   MAGIC_TOGGLE_NKRO
 #define KC_PTT    KC_F24
 #define MS_MID    KC_MS_BTN3
 #define FX(x)     (EFFECT + x)
 
-#define US_CAPS   CTL_T(KC_ESC)
-#define US_QUOT   RCTL_T(KC_QUOT)
+#define CTL_ESC   CTL_T(KC_ESC)
+#define US_ENT    RCTL_T(KC_ENT)
 #define US_MINS   RCTL_T(KC_QUOT)
+#define US_BSLS   LCA_T(KC_BSLS)
 #define US_SCLN   TD(TD_SEMICOLON)
-#define US_ENT    LT(_NUM, KC_ENT)
+#define US_GRV    TD(TD_GRAVE)
+#define US_QUOT   TD(TD_QUOTE)
+#define US_TAB    C_S_T(KC_TAB)
+#define SH_LBRC   LSFT_T(KC_LBRC)
+#define SH_RBRC   RSFT_T(KC_RBRC)
+
+#define MLT_E     LT(_NUM, KC_E)
 
 #ifndef SPACE_COUNT
   #define SPACE_COUNT 1
@@ -75,17 +91,34 @@ enum tap_dancers {
   #define NM_SPC1   _______
   #define NM_SPC2   _______
   #define NM_SPC3   _______
+#elif (SPACE_COUNT == 2)
+  #define KC_SPC1   LT(_NAV,KC_SPC)
+  #define KC_SPC2   LT(_NUM,KC_ENT)
+
+  #define NV_SPC1   KC_SPC
+  #define NV_SPC2   KC_ENT
+
+  #define NM_SPC1   KC_0
+  #define NM_SPC2   KC_SPC
+
+  #define KC_SPC3   XXXXXXX
+  #define NV_SPC3   XXXXXXX
+  #define NM_SPC3   XXXXXXX
 #elif (SPACE_COUNT == 3)
-  #define KC_SPC1   KC_BSPC
+  #ifdef SWAP_HANDS_ENABLE
+    #define KC_SPC1 SH_T(KC_BSPC)
+  #else
+    #define KC_SPC1 KC_BSPC
+  #endif
   #define KC_SPC2   LT(_NUM,KC_ENT)
   #define KC_SPC3   LT(_NAV,KC_SPC)
 
   #define NV_SPC1   KC_SPC
-  #define NV_SPC2   C_S_T(KC_ENT)
+  #define NV_SPC2   KC_ENT
   #define NV_SPC3   KC_SPC
 
-  #define NM_SPC2   XXXXXXX
   #define NM_SPC1   KC_SPC
+  #define NM_SPC2   XXXXXXX
   #define NM_SPC3   KC_0
 #else
   #error "Unsupported space count:" SPACE_COUNT
@@ -110,7 +143,7 @@ enum tap_dancers {
   #define FN_MO2 KC_NO
 #endif
 
-#ifdef TEMPLATE_TKL
+#ifndef TEMPLATE
   #define _X_ KC_NO
   #define TEMPLATE( \
     KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KJ6,      \
@@ -126,7 +159,8 @@ enum tap_dancers {
     KN2,      KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0,      KN3,        _X_,      \
     KA4, KP2, KC6,           KX1, KK6, KX2,           KC0, KM3, KD0, KA1,   _X_, _X_, _X_  \
   )
-#else
+#endif
+#ifndef TEMPLATE_TKL
   #define TEMPLATE_TKL( \
     KJ6,      KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0,   KC7, KC5, KA5, \
     KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2,   KL4, KO4, KQ4, \
@@ -143,4 +177,26 @@ enum tap_dancers {
   )
 #endif
 
+#ifndef TEMPLATE_ALT
+  #define TEMPLATE_ALT TEMPLATE
+#endif
+#ifndef TEMPLATE_NUM
+  #define TEMPLATE_NUM TEMPLATE_ALT
+#endif
+#ifndef TEMPLATE_NAV
+  #define TEMPLATE_NAV TEMPLATE_ALT
+#endif
+#ifndef TEMPLATE_ADJUST
+  #define TEMPLATE_ADJUST TEMPLATE_ALT
+#endif
+
+#ifndef TEMPLATE_RESET
+  #define TEMPLATE_RESET TEMPLATE_ALT( \
+      RESET  , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET  ,  \
+      RESET  , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 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,           \
+      RESET  , XXXXXXX, XXXXXXX,                   XXXXXXX, RESET  , XXXXXXX,                   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX)
+#endif
+
 #endif
dissimilarity index 73%
index 3198fc6..c4d6025 100644 (file)
-//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) {
-  switch(state->count) {
-    case 1:
-      register_code(KC_SCLN);
-      unregister_code(KC_SCLN);
-      break;
-    case 2:
-      register_code(KC_SCLN);
-      unregister_code(KC_SCLN);
-
-      uint8_t mods = get_mods();
-      if (mods) {
-        clear_mods();
-      }
-
-      register_code(KC_ENT);
-      unregister_code(KC_ENT);
-
-      if (mods) {
-        set_mods(mods);
-      }
-
-      reset_tap_dance(state);
-      break;
-  }
-}
-
-qk_tap_dance_action_t tap_dance_actions[] = {
-  [TD_SEMICOLON]  = ACTION_TAP_DANCE_FN(tap_dance_semicolon),
-};
+//Tap Dance
+#include "talljoe.h"
+
+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:
+      SEND_STRING("`");
+      break;
+    case 2:
+      SEND_STRING("~");
+      break;
+  }
+}
+
+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("`");
+  }
+}
+
+
+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;
+  }
+}
+
+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_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),
+};