From 651ca82cec8aa4397ea9bdb53dde95d42da99488 Mon Sep 17 00:00:00 2001 From: Victor Date: Sun, 14 Apr 2024 22:31:51 -0500 Subject: [PATCH 01/28] Adding structure for klor - Added my keymap folder but with empty files - Added new json for further github action customization - Updated the rollow keyboard definition with new OLED picture --- keyboards/barbellboards/rollow/rollow.c | 41 ++++++++++++++++++++---- keyboards/klor/keymaps/t4corun/config.h | 0 keyboards/klor/keymaps/t4corun/keymap.c | 0 keyboards/klor/keymaps/t4corun/readmd.md | 0 keyboards/klor/keymaps/t4corun/rules.mk | 0 qmk_clone.json | 8 +++++ 6 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 keyboards/klor/keymaps/t4corun/config.h create mode 100644 keyboards/klor/keymaps/t4corun/keymap.c create mode 100644 keyboards/klor/keymaps/t4corun/readmd.md create mode 100644 keyboards/klor/keymaps/t4corun/rules.mk create mode 100644 qmk_clone.json diff --git a/keyboards/barbellboards/rollow/rollow.c b/keyboards/barbellboards/rollow/rollow.c index 43c3a764..55cd56e0 100644 --- a/keyboards/barbellboards/rollow/rollow.c +++ b/keyboards/barbellboards/rollow/rollow.c @@ -106,13 +106,42 @@ static void oled_render_keylog(void) { __attribute__((weak)) void oled_render_logo(void) { // clang-format off - static const char PROGMEM crkbd_logo[] = { - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, - 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, - 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, - 0}; + static const char PROGMEM rollow_logo[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, + 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xe0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xe0, 0x00, 0x00, 0xf0, 0xf0, 0x00, + 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xe0, 0xe0, 0x80, 0x80, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0x7c, 0x00, 0x00, 0xf0, 0xf8, 0xf8, + 0xf8, 0x3c, 0xfc, 0xf8, 0xf8, 0xf0, 0xe0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xe0, 0xf0, 0xf8, 0xf8, 0xfc, 0x3c, 0xf8, 0xf8, 0xf8, 0xf0, + 0xc0, 0x08, 0xf8, 0xf8, 0xf8, 0xf8, 0x00, 0xf8, 0xf8, 0xf8, 0xf8, 0xe0, 0xe0, 0xf8, 0xf8, 0xf8, + 0xf8, 0x00, 0x00, 0x80, 0x80, 0xe0, 0xe0, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, + 0x00, 0xff, 0xff, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x07, 0x07, 0x01, 0x01, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0xff, 0xff, 0xff, + 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x01, 0x01, 0x07, 0x07, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, + 0x00, 0xff, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x07, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x01, 0x01, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x07, 0x00, 0x00, 0x0f, 0x0f, 0x00, + 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; // clang-format on - oled_write_P(crkbd_logo, false); + oled_write_P(rollow_logo, false); } bool oled_task_kb(void) { diff --git a/keyboards/klor/keymaps/t4corun/config.h b/keyboards/klor/keymaps/t4corun/config.h new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/klor/keymaps/t4corun/keymap.c b/keyboards/klor/keymaps/t4corun/keymap.c new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/klor/keymaps/t4corun/readmd.md b/keyboards/klor/keymaps/t4corun/readmd.md new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/klor/keymaps/t4corun/rules.mk b/keyboards/klor/keymaps/t4corun/rules.mk new file mode 100644 index 00000000..e69de29b diff --git a/qmk_clone.json b/qmk_clone.json new file mode 100644 index 00000000..7aeff4f3 --- /dev/null +++ b/qmk_clone.json @@ -0,0 +1,8 @@ +{ + "clone_targets": [ + { + "repository": "https://github.com/app-gitKaiwho/qmk-config-klor/", + "tree": "main" + } + ] +} \ No newline at end of file From d40809e5a6027c796d6a76d7fbfdd9ed1fd6d73f Mon Sep 17 00:00:00 2001 From: Victor Date: Sun, 14 Apr 2024 22:44:08 -0500 Subject: [PATCH 02/28] lol made updates to rollow because I might submit the PR - added via keymap - Updated readme file to make it more generic --- .../barbellboards/rollow/keymaps/via/keymap.c | 60 +++++++++++++++++++ .../barbellboards/rollow/keymaps/via/rules.mk | 1 + keyboards/barbellboards/rollow/readme.md | 4 -- 3 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 keyboards/barbellboards/rollow/keymaps/via/keymap.c create mode 100644 keyboards/barbellboards/rollow/keymaps/via/rules.mk diff --git a/keyboards/barbellboards/rollow/keymaps/via/keymap.c b/keyboards/barbellboards/rollow/keymaps/via/keymap.c new file mode 100644 index 00000000..e82a46c4 --- /dev/null +++ b/keyboards/barbellboards/rollow/keymaps/via/keymap.c @@ -0,0 +1,60 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_split_3x6_3( + //,-----------------------------------------------------. ,-----------------------------------------------------. + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ESC, + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + KC_LGUI, MO(1), KC_SPC, KC_ENT, MO(2), KC_RALT + //`--------------------------' `--------------------------' + + ), + + [1] = LAYOUT_split_3x6_3( + //,-----------------------------------------------------. ,-----------------------------------------------------. + KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT, XXXXXXX, XXXXXXX, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + KC_LGUI, _______, KC_SPC, KC_ENT, MO(3), KC_RALT + //`--------------------------' `--------------------------' + ), + + [2] = LAYOUT_split_3x6_3( + //,-----------------------------------------------------. ,-----------------------------------------------------. + KC_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_TILD, + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + KC_LGUI, MO(3), KC_SPC, KC_ENT, _______, KC_RALT + //`--------------------------' `--------------------------' + ), + + [3] = LAYOUT_split_3x6_3( + //,-----------------------------------------------------. ,-----------------------------------------------------. + QK_BOOT, 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, + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + KC_LGUI, _______, KC_SPC, KC_ENT, _______, KC_RALT + //`--------------------------' `--------------------------' + ) +}; + + +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { + [0] = { ENCODER_CCW_CW(KC_RGHT, KC_LEFT), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(XXXXXXX, XXXXXXX), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [2] = { ENCODER_CCW_CW(KC_UP, KC_DOWN), ENCODER_CCW_CW(XXXXXXX, XXXXXXX) }, + [3] = { ENCODER_CCW_CW(XXXXXXX, XXXXXXX), ENCODER_CCW_CW(XXXXXXX, XXXXXXX) } +}; \ No newline at end of file diff --git a/keyboards/barbellboards/rollow/keymaps/via/rules.mk b/keyboards/barbellboards/rollow/keymaps/via/rules.mk new file mode 100644 index 00000000..036bd6d1 --- /dev/null +++ b/keyboards/barbellboards/rollow/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes \ No newline at end of file diff --git a/keyboards/barbellboards/rollow/readme.md b/keyboards/barbellboards/rollow/readme.md index 0799349b..2650da3d 100644 --- a/keyboards/barbellboards/rollow/readme.md +++ b/keyboards/barbellboards/rollow/readme.md @@ -15,10 +15,6 @@ The current build guide is [available here](https://github.com/barbellboards/Rol Make example for this keyboard (after setting up your build environment): ```bash -# This board definition is currently not part of QMK Firmware -# Copy the keyboard definition into your forked/cloned QMK_HOME folder -cp /d/Repo/qmk_userspace/keyboards/barbellboards /d/Repo/qmk_firmware/keyboards/ -R - make barbellboards/rollow:default # or qmk compile -kb barbellboards/rollow -km default From 8a484995040e2ac458d1b1726bd18e89254a6966 Mon Sep 17 00:00:00 2001 From: Victor Date: Tue, 16 Apr 2024 22:45:53 -0500 Subject: [PATCH 03/28] Re-enabling combos - implement mouse buttons - activate certain layers with thumbs - update readme for clarity --- README.md | 29 +++++++++++----------- users/t4corun/features/combo.c | 44 +++++++++++++++++++++------------- users/t4corun/features/combo.h | 41 ++++++++++++++++++++++++++++++- users/t4corun/rules.mk | 6 +---- users/t4corun/t4corun.h | 15 +++++------- 5 files changed, 89 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index de458bb1..560e3008 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,10 @@ The custom layout optimizes for programming (SQL, Powershell, C) and minimizes h ## Features +### Build Non-Tree Keyboards + +- Extended the [qmk/.github](https://github.com/qmk/.github) userspace build actions to build non-tree qmk keyboards (e.g. Barbellboards Rollow). This works by copying keyboard definitions from the userspace to the qmk_firmware keyboards folder in the container. The list of keyboards to copy are defined in `qmk_nontree.json` + ### Layout Wrapper Macros A single keymap layout can be shared with multiple keyboards by using C preprocessor macros. These macros are referenced in the keyboard JSON files, and the build process will expand them into a transient keymap.c file during compile time. @@ -101,22 +105,19 @@ Additional keys may be mapped if present. Check each keyboard's `keymap.c` for m ├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ │ z │ x │ c │ v │ b │ │ n │ m │ , ( │ . ) │ - _ │ ╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯ - enc: mwheel │ │ num │ mou │ │ spc │ nav │ mute │ enc: volume + enc: mwheel │ │ num │ shft │ │ spc │ nav │ mute │ enc: volume ╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯ ╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮ -│ q │ w │ f │ p │ b │ │ j │ l │ u │ y │ o │ +│ q │ w │ f │ p │ b │ │ j │ l │ u │ y │ ' " │ ├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ -│ a mou│ r │ s │ t │ g │ colemak │ m │ n │ e │ i │ ' " │ +│ a mou│ r │ s │ t │ g │ colemak │ m │ n │ e │ i │ o │ ├──────┼──────┼──────┼──────┼──────┤ dh ├──────┼──────┼──────┼──────┼──────┤ │ z │ x │ c │ d │ v │ │ k │ h │ , ( │ . ) │ - _ │ ╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯ - enc: mwheel │ │ num │ mou │ │ spc │ nav │ mute │ enc: volume + enc: mwheel │ │ num │ shft │ │ spc │ nav │ mute │ enc: volume ╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯ -Notes: -- swapped o and repeat on this keymap to keep repeat key in the same position across layers - ╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮ │ tab │ q │ w │ e │ r │ │ │ │ │ │ │ ├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ @@ -128,11 +129,11 @@ Notes: ╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯ ╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮ -│ esc │ home │ up │ end │ pgup │ │ ins │ │ app │ │ cfg │ +│ esc │ home │ up │ end │ pgup │ │ ins │ │ │ │ cfg │ ├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ -│ │ left │ down │ rght │ pgdn │ nav │ bksp │ shft │ ctrl │ alt │ gui │ +│ tab │ left │ down │ rght │ pgdn │ nav │ bksp │ shft │ ctrl │ alt │ gui │ ├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ -│ undo │ cut │ copy │ pste │ redo │ │ del │ tab │ vol- │ vol+ │ mute │ +│ undo │ cut │ copy │ pste │ redo │ │ del │ app │ vol- │ vol+ │ mute │ ╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┴──────┴──────╯ enc: zoom │ zrst │ num │ ent │ │ │ nav │ │ enc: none ╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯ @@ -147,7 +148,7 @@ Notes: ├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ │ undo │ cut │ copy │ pste │ redo │ │ del │ 1 │ 2 │ 3 │ - _ │ ╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯ - enc: none │ │ sym │ │ │ spc │ 0 nav│ │ enc: ← → + enc: none │ │ num │ │ │ spc │ 0 nav│ │ enc: ← → ╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯ ╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮ @@ -157,7 +158,7 @@ Notes: ├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ │ % ^ │ < <> │ > │ \ │ ! │ │ del │ / │ , () │ . ) │ - _ │ ╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯ - enc: none │ │ sym │ │ │ │ nav │ │ enc: none + enc: none │ │ num │ │ │ │ nav │ │ enc: none ╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯ Notes: @@ -170,7 +171,7 @@ Notes: ├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ │ │ │ │ │ │ │ paus │ F1 │ F2 │ F3 │ F12 │ ╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯ - enc: none │ │ sym │ │ │ mply1│ mrec1│ │ enc: ↑ ↓ + enc: none │ │ num │ │ │ mply1│ mrec1│ │ enc: ↑ ↓ ╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯ ╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮ @@ -195,7 +196,7 @@ Notes: ├──────┼──────┼──────┼──────┼──────┤ num ├──────┼──────┼──────┼──────┼──────┤ │ │ 5 │ 6 │ 7 │ 8 │ │ │ │ │ │ │ ╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯ - end: mwheel │ │ alt │ ctr │ │ │ nav │ mute │ enc: volume + end: mwheel │ │ alt │ ctrl │ │ │ nav │ mute │ enc: volume ╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯ ╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮ diff --git a/users/t4corun/features/combo.c b/users/t4corun/features/combo.c index 08f44efa..3f75a17f 100644 --- a/users/t4corun/features/combo.c +++ b/users/t4corun/features/combo.c @@ -6,28 +6,29 @@ //const uint16_t PROGMEM sniptog_combo[] = {KC_M, TR_DOT, COMBO_END}; //const uint16_t PROGMEM moubtn4_combo[] = {KC_SPC, NAV, COMBO_END}; -combo_t key_combos[COMBO_LENGTH] = { - /* -#if defined(POINTING_DEVICE_ENABLE) - [DRAGTOGGLE] = COMBO(dragtog_combo, DRG_TOG), - [SNIPERTOGGLE] = COMBO(sniptog_combo, SNP_TOG), -#else - [DRAGTOGGLE] = COMBO(dragtog_combo, ___x___), - [SNIPERTOGGLE] = COMBO(sniptog_combo, ___x___), -#endif //POINTING_DEVICE_ENABLE +mouse buttons to map +- mb1 left 1 df +- mb2 right 3 dg +- mb3 middle +- mb4 back 2 cv +- mb5 forward -#if defined(MOUSELAYER_ENABLE) - [MOUSEBUTTON4] = COMBO(moubtn4_combo, KC_BTN4) -#else - [MOUSEBUTTON4] = COMBO(moubtn4_combo, ___x___) -#endif //MOUSELAYER_ENABLE +bigrams that may work for mouse +- cv +- cb +- xc +- cv */ -}; bool get_combo_must_hold(uint16_t index, combo_t *combo) { switch (index) { + + case LYR_CONFIG: + case LYR_FUNCTION: + return true; + default: return false; } @@ -44,6 +45,11 @@ bool get_combo_must_tap(uint16_t index, combo_t *combo) { return true; */ + case MOUSE_BUTTON1: + case MOUSE_BUTTON2: + case MOUSE_BUTTON4: + case MOUSE_DRGTOG: + default: return false; } @@ -53,10 +59,14 @@ bool get_combo_must_press_in_order(uint16_t combo_index, combo_t *combo) { switch (combo_index) { /* List combos here that you want to only activate if their keys * are pressed in the same order as they are defined in the combo's key - * array. */ + * array. + * + * return false means they do not have to be pressed in order + * + * */ default: - return false; + return true; } } diff --git a/users/t4corun/features/combo.h b/users/t4corun/features/combo.h index 818c45a6..4a0d5d3d 100644 --- a/users/t4corun/features/combo.h +++ b/users/t4corun/features/combo.h @@ -3,10 +3,49 @@ enum combos { //DRAGTOGGLE, - //SNIPERTOGGLE, + //SNIPERTOGGLE,c //MOUSEBUTTON4, + +#if defined(MOUSELAYER_ENABLE) + MOUSE_BUTTON1, + MOUSE_BUTTON2, + MOUSE_BUTTON4, + MOUSE_DRGTOG, +#endif //MOUSELAYER_ENABLE + + KB_TAB, + KB_BSPC, + LYR_CONFIG, + LYR_FUNCTION, COMBO_LENGTH }; +#if defined(MOUSELAYER_ENABLE) +const uint16_t PROGMEM mou_btn1_combo[] = { KC_D, KC_F, COMBO_END }; +const uint16_t PROGMEM mou_btn2_combo[] = { KC_D, KC_G, COMBO_END }; +const uint16_t PROGMEM mou_btn4_combo[] = { KC_C, KC_V, COMBO_END }; +const uint16_t PROGMEM mou_drg_combo[] = { TR_COMM, TR_DOT, COMBO_END }; +#endif //MOUSELAYER_ENABLE + +const uint16_t PROGMEM kb_tab_combo[] = { KC_S, KC_F, COMBO_END }; +const uint16_t PROGMEM kb_bspc_combo[] = { KC_J, KC_L, COMBO_END }; +const uint16_t PROGMEM lyr_cfg_combo[] = { KC_SPC, NAV, COMBO_END }; +const uint16_t PROGMEM lyr_fun_combo[] = { NUM, TR_LSFT, COMBO_END }; + +combo_t key_combos[COMBO_LENGTH] = { + +#if defined(MOUSELAYER_ENABLE) + [MOUSE_BUTTON1] = COMBO(mou_btn1_combo, TR_BTN1), + [MOUSE_BUTTON2] = COMBO(mou_btn2_combo, TR_BTN2), + [MOUSE_BUTTON4] = COMBO(mou_btn4_combo, TR_BTN4), + [MOUSE_BUTTON4] = COMBO(mou_drg_combo, TR_DRGS), +#endif //MOUSELAYER_ENABLE + + [KB_TAB] = COMBO(kb_tab_combo, KC_TAB), + [KB_BSPC] = COMBO(kb_bspc_combo, KC_BSPC), + [LYR_CONFIG] = COMBO(lyr_cfg_combo, CONFIG), + [LYR_FUNCTION] = COMBO(lyr_fun_combo, FUNC) +}; + //their documentation is so confusing because you don't use COMBO_LEN defining the actions uint16_t COMBO_LEN = COMBO_LENGTH; \ No newline at end of file diff --git a/users/t4corun/rules.mk b/users/t4corun/rules.mk index 298b1351..b5c4753c 100644 --- a/users/t4corun/rules.mk +++ b/users/t4corun/rules.mk @@ -18,7 +18,6 @@ UNICODE_ENABLE ?= no SPACE_CADET_ENABLE ?= no GRAVE_ESC_ENABLE ?= no -COMBO_ENABLE ?= no DYNAMIC_MACRO_ENABLE ?= yes RGB_MATRIX_ENABLE ?= no RGBLIGHT_ENABLE ?= no @@ -32,7 +31,7 @@ EXTRAKEY_ENABLE = yes AUDIO_ENABLE = no CAPS_WORD_ENABLE = yes MOUSEKEY_ENABLE = yes - +COMBO_ENABLE = yes # --------------------------------------------------------- # include my code that will be common across all my keyboards @@ -49,7 +48,6 @@ ifeq ($(strip $(CAPS_WORD_ENABLE)), yes) SRC += features/capsword.c endif - ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes) SRC += features/rgbmatrix.c endif @@ -58,12 +56,10 @@ ifeq ($(strip $(RGB_MATRIX_ENABLE)), ws2812) SRC += features/rgbmatrix.c endif - ifeq ($(strip $(MOUSEKEY_ENABLE)), yes) SRC += features/mouse.c endif - ifeq ($(strip $(OLED_ENABLE)), yes) SRC += features/oled.c endif diff --git a/users/t4corun/t4corun.h b/users/t4corun/t4corun.h index 3b4c00a1..b0cc751b 100644 --- a/users/t4corun/t4corun.h +++ b/users/t4corun/t4corun.h @@ -114,12 +114,10 @@ enum keycodes { # define TR_BTN4 KC_BTN4 # define TR_BTN5 KC_BTN5 -# define TR_NUM1 LT(_NUMBER, KC_BTN1) - # if defined(KEYBOARD_bastardkb_charybdis_3x5) //these codes are defined in charybdis.h # define TR_SNIP SNIPING -# define TR_DRGS DRGSCRL +# define TR_DRGS DRG_TOG # define TR_SDPI S_D_MOD //sniping dpi # define TR_PDPI DPI_MOD //pointer dpi # else @@ -151,7 +149,6 @@ enum keycodes { # define TR_SDPI ___x___ # define TR_PDPI ___x___ -# define TR_NUM1 MO(_NUMBER) #endif //MOUSEKEY_ENABLE @@ -197,7 +194,7 @@ enum keycodes { #define _SCAG_MODS________________________ TR_LSFT, TR_LCTL, TR_LALT, TR_LGUI #define _UCCPR_L___________________________________ SC_UNDO, SC_CUT, SC_COPY, SC_PAST, SC_REDO -#define _BASE_L4_________________ ___x___, TR_NUM1, TR_LSFT +#define _BASE_L4_________________ ___x___, NUM, TR_LSFT #define _BASE_R4_________________ KC_SPC, NAV, KC_MUTE #define _LAYER_TRANS_____________ ___x___, _______, ___x___ @@ -233,10 +230,10 @@ enum keycodes { #define LAYER_NAVIGATION \ - KC_ESC, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_INS, ___x___, KC_APP, ___x___, CONFIG, \ - ___x___, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_BSPC, _SCAG_MODS________________________, \ - _UCCPR_L___________________________________, KC_DEL, KC_TAB, KC_VOLD, KC_VOLU, KC_MUTE, \ - ZOOMRST, NUM, KC_ENT, _LAYER_TRANS_____________ + KC_ESC, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_INS, ___x___, ___x___, ___x___, CONFIG, \ + KC_TAB, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_BSPC, _SCAG_MODS________________________, \ + _UCCPR_L___________________________________, KC_DEL, KC_APP, KC_VOLD, KC_VOLU, KC_MUTE, \ + ZOOMRST, _______, KC_ENT, _LAYER_TRANS_____________ #define LAYER_NUMBER \ From 2e87f03d7d90072cfab723579f6c4abfde0a87e8 Mon Sep 17 00:00:00 2001 From: Victor Date: Tue, 16 Apr 2024 22:52:28 -0500 Subject: [PATCH 04/28] Had to fix a preprocessor - had MOUSELAYER_ENABLE instead of MOUSEKEY_ENABLE --- users/t4corun/features/combo.c | 5 +++++ users/t4corun/features/combo.h | 12 ++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/users/t4corun/features/combo.c b/users/t4corun/features/combo.c index 3f75a17f..ec1478ad 100644 --- a/users/t4corun/features/combo.c +++ b/users/t4corun/features/combo.c @@ -45,10 +45,15 @@ bool get_combo_must_tap(uint16_t index, combo_t *combo) { return true; */ +#if defined(MOUSEKEY_ENABLE) case MOUSE_BUTTON1: case MOUSE_BUTTON2: case MOUSE_BUTTON4: case MOUSE_DRGTOG: +#endif //MOUSEKEY_ENABLE + + case KB_TAB: + case KB_BSPC: default: return false; diff --git a/users/t4corun/features/combo.h b/users/t4corun/features/combo.h index 4a0d5d3d..1ea10664 100644 --- a/users/t4corun/features/combo.h +++ b/users/t4corun/features/combo.h @@ -6,12 +6,12 @@ enum combos { //SNIPERTOGGLE,c //MOUSEBUTTON4, -#if defined(MOUSELAYER_ENABLE) +#if defined(MOUSEKEY_ENABLE) MOUSE_BUTTON1, MOUSE_BUTTON2, MOUSE_BUTTON4, MOUSE_DRGTOG, -#endif //MOUSELAYER_ENABLE +#endif //MOUSEKEY_ENABLE KB_TAB, KB_BSPC, @@ -20,12 +20,12 @@ enum combos { COMBO_LENGTH }; -#if defined(MOUSELAYER_ENABLE) +#if defined(MOUSEKEY_ENABLE) const uint16_t PROGMEM mou_btn1_combo[] = { KC_D, KC_F, COMBO_END }; const uint16_t PROGMEM mou_btn2_combo[] = { KC_D, KC_G, COMBO_END }; const uint16_t PROGMEM mou_btn4_combo[] = { KC_C, KC_V, COMBO_END }; const uint16_t PROGMEM mou_drg_combo[] = { TR_COMM, TR_DOT, COMBO_END }; -#endif //MOUSELAYER_ENABLE +#endif //MOUSEKEY_ENABLE const uint16_t PROGMEM kb_tab_combo[] = { KC_S, KC_F, COMBO_END }; const uint16_t PROGMEM kb_bspc_combo[] = { KC_J, KC_L, COMBO_END }; @@ -34,12 +34,12 @@ const uint16_t PROGMEM lyr_fun_combo[] = { NUM, TR_LSFT, COMBO_END }; combo_t key_combos[COMBO_LENGTH] = { -#if defined(MOUSELAYER_ENABLE) +#if defined(MOUSEKEY_ENABLE) [MOUSE_BUTTON1] = COMBO(mou_btn1_combo, TR_BTN1), [MOUSE_BUTTON2] = COMBO(mou_btn2_combo, TR_BTN2), [MOUSE_BUTTON4] = COMBO(mou_btn4_combo, TR_BTN4), [MOUSE_BUTTON4] = COMBO(mou_drg_combo, TR_DRGS), -#endif //MOUSELAYER_ENABLE +#endif //MOUSEKEY_ENABLE [KB_TAB] = COMBO(kb_tab_combo, KC_TAB), [KB_BSPC] = COMBO(kb_bspc_combo, KC_BSPC), From d3b130a53c40aacda7a4c827d47b24e496fd68f7 Mon Sep 17 00:00:00 2001 From: Victor Date: Tue, 16 Apr 2024 23:04:29 -0500 Subject: [PATCH 05/28] Tweaking combo settings - removing the must press in order rule --- users/t4corun/features/combo.c | 3 +-- users/t4corun/t4corun.h | 8 ++++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/users/t4corun/features/combo.c b/users/t4corun/features/combo.c index ec1478ad..7215b8ac 100644 --- a/users/t4corun/features/combo.c +++ b/users/t4corun/features/combo.c @@ -67,11 +67,10 @@ bool get_combo_must_press_in_order(uint16_t combo_index, combo_t *combo) { * array. * * return false means they do not have to be pressed in order - * * */ default: - return true; + return false; } } diff --git a/users/t4corun/t4corun.h b/users/t4corun/t4corun.h index b0cc751b..f728b692 100644 --- a/users/t4corun/t4corun.h +++ b/users/t4corun/t4corun.h @@ -251,8 +251,8 @@ enum keycodes { #define LAYER_FUNCTION \ - TR_DMP2, TR_DMR2, ___x___, _______, KC_SCRL, KC_PSCR, KC_F7, KC_F8, KC_F9, KC_F10, \ - _NONE_5____________________________________, KC_CAPS, KC_F4, KC_F5, KC_F6, KC_F11, \ + TR_DMP2, TR_DMR2, ___x___, ___x___, KC_SCRL, KC_PSCR, KC_F7, KC_F8, KC_F9, KC_F10, \ + ___x___, ___x___, ___x___, ___x___, KC_NUM, KC_CAPS, KC_F4, KC_F5, KC_F6, KC_F11, \ _NONE_5____________________________________, KC_PAUS, KC_F1, KC_F2, KC_F3, KC_F12, \ _LAYER_TRANS_____________, TR_DMP1, TR_DMR1, ___x___ @@ -272,7 +272,7 @@ enum keycodes { #define LAYER_CONFIG \ - _NONE_5____________________________________, EE_CLR, QK_RBT, QK_BOOT, ___x___, _______, \ + _NONE_5____________________________________, EE_CLR, QK_RBT, QK_BOOT, ___x___, ___x___, \ TR_RTOG, TR_RMOD, _NONE_3__________________, BASELYR, _SCAG_MODS________________________, \ TR_RHUI, TR_RSAI, TR_RVAI, TR_RSPI, ___x___, _NONE_5____________________________________, \ - _NONE_3__________________, _LAYER_TRANS_____________ + _NONE_3__________________, _NONE_3__________________ From dae4f2b76a8e0c65ae3a42594fd71960598df76a Mon Sep 17 00:00:00 2001 From: Victor Date: Tue, 16 Apr 2024 23:46:10 -0500 Subject: [PATCH 06/28] Adding/tuning combos - all five mouse buttons and drag tog on the left hand side - added esc, tab, enter to left side - added backspace, and del --- users/t4corun/features/combo.c | 43 +++---------------------- users/t4corun/features/combo.h | 59 ++++++++++++++++++++++++---------- users/t4corun/t4corun.h | 2 +- 3 files changed, 47 insertions(+), 57 deletions(-) diff --git a/users/t4corun/features/combo.c b/users/t4corun/features/combo.c index 7215b8ac..0eb41769 100644 --- a/users/t4corun/features/combo.c +++ b/users/t4corun/features/combo.c @@ -1,27 +1,5 @@ #include "combo.h" - -//only need to make it for the qwerty layer -//const uint16_t PROGMEM dragtog_combo[] = {TR_COMM, TR_DOT, COMBO_END}; -//const uint16_t PROGMEM sniptog_combo[] = {KC_M, TR_DOT, COMBO_END}; -//const uint16_t PROGMEM moubtn4_combo[] = {KC_SPC, NAV, COMBO_END}; - -/* -mouse buttons to map -- mb1 left 1 df -- mb2 right 3 dg -- mb3 middle -- mb4 back 2 cv -- mb5 forward - -bigrams that may work for mouse -- cv -- cb -- xc -- cv -*/ - - bool get_combo_must_hold(uint16_t index, combo_t *combo) { switch (index) { @@ -38,25 +16,12 @@ bool get_combo_must_tap(uint16_t index, combo_t *combo) { switch (index) { - /* - case DRAGTOGGLE: - case SNIPERTOGGLE: - case MOUSEBUTTON4: - return true; - */ - -#if defined(MOUSEKEY_ENABLE) - case MOUSE_BUTTON1: - case MOUSE_BUTTON2: - case MOUSE_BUTTON4: - case MOUSE_DRGTOG: -#endif //MOUSEKEY_ENABLE - - case KB_TAB: - case KB_BSPC: + case LYR_CONFIG: + case LYR_FUNCTION: + return false; default: - return false; + return true; } } diff --git a/users/t4corun/features/combo.h b/users/t4corun/features/combo.h index 1ea10664..25f226af 100644 --- a/users/t4corun/features/combo.h +++ b/users/t4corun/features/combo.h @@ -2,49 +2,74 @@ #include "t4corun.h" enum combos { - //DRAGTOGGLE, - //SNIPERTOGGLE,c - //MOUSEBUTTON4, + // left hand combos #if defined(MOUSEKEY_ENABLE) MOUSE_BUTTON1, MOUSE_BUTTON2, + MOUSE_BUTTON3, MOUSE_BUTTON4, + MOUSE_BUTTON5, MOUSE_DRGTOG, #endif //MOUSEKEY_ENABLE - KB_TAB, - KB_BSPC, - LYR_CONFIG, + KEY_ESC, + KEY_TAB, + KEY_ENT, LYR_FUNCTION, + + // right hand combos + KEY_DEL, + KEY_BSPC, + LYR_CONFIG, + COMBO_LENGTH }; + +// left hand combos #if defined(MOUSEKEY_ENABLE) const uint16_t PROGMEM mou_btn1_combo[] = { KC_D, KC_F, COMBO_END }; -const uint16_t PROGMEM mou_btn2_combo[] = { KC_D, KC_G, COMBO_END }; -const uint16_t PROGMEM mou_btn4_combo[] = { KC_C, KC_V, COMBO_END }; -const uint16_t PROGMEM mou_drg_combo[] = { TR_COMM, TR_DOT, COMBO_END }; +const uint16_t PROGMEM mou_btn2_combo[] = { KC_S, KC_D, COMBO_END }; +const uint16_t PROGMEM mou_btn3_combo[] = { KC_E, KC_R, COMBO_END }; +const uint16_t PROGMEM mou_btn4_combo[] = { KC_W, KC_E, COMBO_END }; +const uint16_t PROGMEM mou_btn5_combo[] = { KC_W, KC_R, COMBO_END }; +const uint16_t PROGMEM mou_drg_combo[] = { KC_A, KC_S, COMBO_END }; #endif //MOUSEKEY_ENABLE -const uint16_t PROGMEM kb_tab_combo[] = { KC_S, KC_F, COMBO_END }; -const uint16_t PROGMEM kb_bspc_combo[] = { KC_J, KC_L, COMBO_END }; -const uint16_t PROGMEM lyr_cfg_combo[] = { KC_SPC, NAV, COMBO_END }; +const uint16_t PROGMEM kb_esc_combo[] = { KC_Q, KC_W, COMBO_END }; +const uint16_t PROGMEM kb_tab_combo[] = { KC_C, KC_V, COMBO_END }; +const uint16_t PROGMEM kb_ent_combo[] = { KC_X, KC_V, COMBO_END }; const uint16_t PROGMEM lyr_fun_combo[] = { NUM, TR_LSFT, COMBO_END }; +// right hand combos +const uint16_t PROGMEM kb_del_combo[] = { KC_M, TR_DOT, COMBO_END }; +const uint16_t PROGMEM kb_bspc_combo[] = { KC_M, TR_COMM, COMBO_END }; +const uint16_t PROGMEM lyr_cfg_combo[] = { KC_SPC, NAV, COMBO_END }; + + combo_t key_combos[COMBO_LENGTH] = { + // left hand combos #if defined(MOUSEKEY_ENABLE) [MOUSE_BUTTON1] = COMBO(mou_btn1_combo, TR_BTN1), [MOUSE_BUTTON2] = COMBO(mou_btn2_combo, TR_BTN2), + [MOUSE_BUTTON3] = COMBO(mou_btn3_combo, TR_BTN3), [MOUSE_BUTTON4] = COMBO(mou_btn4_combo, TR_BTN4), - [MOUSE_BUTTON4] = COMBO(mou_drg_combo, TR_DRGS), + [MOUSE_BUTTON5] = COMBO(mou_btn5_combo, TR_BTN5), + [MOUSE_DRGTOG] = COMBO(mou_drg_combo, TR_DRGS), #endif //MOUSEKEY_ENABLE - [KB_TAB] = COMBO(kb_tab_combo, KC_TAB), - [KB_BSPC] = COMBO(kb_bspc_combo, KC_BSPC), - [LYR_CONFIG] = COMBO(lyr_cfg_combo, CONFIG), - [LYR_FUNCTION] = COMBO(lyr_fun_combo, FUNC) + [KEY_ESC] = COMBO(kb_esc_combo, KC_ESC), + [KEY_TAB] = COMBO(kb_tab_combo, KC_TAB), + [KEY_ENT] = COMBO(kb_end_combo, KC_ENT), + [LYR_FUNCTION] = COMBO(lyr_fun_combo, FUNC), + + // right hand combos + [KEY_DEL] = COMBO(kb_del_combo, KC_DEL), + [KEY_BSPC] = COMBO(kb_bspc_combo, KC_BSPC), + [LYR_CONFIG] = COMBO(lyr_cfg_combo, CONFIG) + }; //their documentation is so confusing because you don't use COMBO_LEN defining the actions diff --git a/users/t4corun/t4corun.h b/users/t4corun/t4corun.h index f728b692..53bca42b 100644 --- a/users/t4corun/t4corun.h +++ b/users/t4corun/t4corun.h @@ -237,7 +237,7 @@ enum keycodes { #define LAYER_NUMBER \ - KC_ESC, SC_SNIP, SC_FILE, FUNC, TR_GRV, KC_ENT, KC_7, KC_8, KC_9, KC_TAB, \ + KC_ESC, SC_SNIP, SC_FILE, ___x___, TR_GRV, KC_ENT, KC_7, KC_8, KC_9, KC_TAB, \ _GACS_MODS________________________, TR_SCLN, KC_BSPC, KC_4, KC_5, KC_6, KC_DOT, \ _UCCPR_L___________________________________, KC_DEL, KC_1, KC_2, KC_3, TR_MINS, \ _LAYER_TRANS_____________, KC_SPC, NAV_0, ___x___ From 85f211b557ecb7c19fdaa4baaea33a16bbad979c Mon Sep 17 00:00:00 2001 From: Victor Date: Tue, 16 Apr 2024 23:52:39 -0500 Subject: [PATCH 07/28] Typo but adding new macro - adding control backspace macro, but I might not use it --- users/t4corun/features/combo.h | 25 ++++++++++++++----------- users/t4corun/t4corun.h | 3 +++ 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/users/t4corun/features/combo.h b/users/t4corun/features/combo.h index 25f226af..ed28f0aa 100644 --- a/users/t4corun/features/combo.h +++ b/users/t4corun/features/combo.h @@ -21,6 +21,7 @@ enum combos { // right hand combos KEY_DEL, KEY_BSPC, + KEY_BWRD, LYR_CONFIG, COMBO_LENGTH @@ -37,15 +38,16 @@ const uint16_t PROGMEM mou_btn5_combo[] = { KC_W, KC_R, COMBO_END }; const uint16_t PROGMEM mou_drg_combo[] = { KC_A, KC_S, COMBO_END }; #endif //MOUSEKEY_ENABLE -const uint16_t PROGMEM kb_esc_combo[] = { KC_Q, KC_W, COMBO_END }; -const uint16_t PROGMEM kb_tab_combo[] = { KC_C, KC_V, COMBO_END }; -const uint16_t PROGMEM kb_ent_combo[] = { KC_X, KC_V, COMBO_END }; +const uint16_t PROGMEM key_esc_combo[] = { KC_Q, KC_W, COMBO_END }; +const uint16_t PROGMEM key_tab_combo[] = { KC_C, KC_V, COMBO_END }; +const uint16_t PROGMEM key_ent_combo[] = { KC_X, KC_V, COMBO_END }; const uint16_t PROGMEM lyr_fun_combo[] = { NUM, TR_LSFT, COMBO_END }; // right hand combos -const uint16_t PROGMEM kb_del_combo[] = { KC_M, TR_DOT, COMBO_END }; -const uint16_t PROGMEM kb_bspc_combo[] = { KC_M, TR_COMM, COMBO_END }; -const uint16_t PROGMEM lyr_cfg_combo[] = { KC_SPC, NAV, COMBO_END }; +const uint16_t PROGMEM key_del_combo[] = { KC_M, TR_DOT, COMBO_END }; +const uint16_t PROGMEM key_bspc_combo[] = { KC_M, TR_COMM, COMBO_END }; +const uint16_t PROGMEM key_bwrd_combo[] = { TR_COMM, TR_DOT, COMBO_END }; +const uint16_t PROGMEM lyr_cfg_combo[] = { KC_SPC, NAV, COMBO_END }; combo_t key_combos[COMBO_LENGTH] = { @@ -60,14 +62,15 @@ combo_t key_combos[COMBO_LENGTH] = { [MOUSE_DRGTOG] = COMBO(mou_drg_combo, TR_DRGS), #endif //MOUSEKEY_ENABLE - [KEY_ESC] = COMBO(kb_esc_combo, KC_ESC), - [KEY_TAB] = COMBO(kb_tab_combo, KC_TAB), - [KEY_ENT] = COMBO(kb_end_combo, KC_ENT), + [KEY_ESC] = COMBO(key_esc_combo, KC_ESC), + [KEY_TAB] = COMBO(key_tab_combo, KC_TAB), + [KEY_ENT] = COMBO(key_ent_combo, KC_ENT), [LYR_FUNCTION] = COMBO(lyr_fun_combo, FUNC), // right hand combos - [KEY_DEL] = COMBO(kb_del_combo, KC_DEL), - [KEY_BSPC] = COMBO(kb_bspc_combo, KC_BSPC), + [KEY_DEL] = COMBO(key_del_combo, KC_DEL), + [KEY_BSPC] = COMBO(key_bspc_combo, KC_BSPC), + [KEY_BWRD] = COMBO(key_bwrd_combo, BACKWRD), [LYR_CONFIG] = COMBO(lyr_cfg_combo, CONFIG) }; diff --git a/users/t4corun/t4corun.h b/users/t4corun/t4corun.h index 53bca42b..65d564b5 100644 --- a/users/t4corun/t4corun.h +++ b/users/t4corun/t4corun.h @@ -64,6 +64,9 @@ enum keycodes { #define ZOOMOUT LCTL(KC_MINS) #define ZOOMRST LCTL(KC_0) +// Macros +#define BACKWRD LCTL(vcKC_BSPC) + /* - Any keycodes with prefix TR has behavior dependent on if the feature is enabled. - If the feature is disabled then the key is just the normal key From 5511db5cfcbb3160b03c0665283a97e1c91ca996 Mon Sep 17 00:00:00 2001 From: Victor Date: Tue, 16 Apr 2024 23:56:07 -0500 Subject: [PATCH 08/28] fixing more typos --- users/t4corun/t4corun.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/users/t4corun/t4corun.h b/users/t4corun/t4corun.h index 65d564b5..a8cc2ad9 100644 --- a/users/t4corun/t4corun.h +++ b/users/t4corun/t4corun.h @@ -65,7 +65,7 @@ enum keycodes { #define ZOOMRST LCTL(KC_0) // Macros -#define BACKWRD LCTL(vcKC_BSPC) +#define BACKWRD LCTL(KC_BSPC) /* - Any keycodes with prefix TR has behavior dependent on if the feature is enabled. From 1dd978d0ce82c872b3766c3d8254dbc9963c1690 Mon Sep 17 00:00:00 2001 From: Victor Date: Wed, 17 Apr 2024 00:16:35 -0500 Subject: [PATCH 09/28] Being clever didn't work - i think I need to specify each mouse code that must be tapped versus specifying what shouldn't be tapped --- users/t4corun/features/combo.c | 20 ++++++++++++++++++-- users/t4corun/features/combo.h | 6 +++--- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/users/t4corun/features/combo.c b/users/t4corun/features/combo.c index 0eb41769..46f73cbf 100644 --- a/users/t4corun/features/combo.c +++ b/users/t4corun/features/combo.c @@ -16,12 +16,28 @@ bool get_combo_must_tap(uint16_t index, combo_t *combo) { switch (index) { +#if defined(MOUSEKEY_ENABLE) + case MOUSE_BUTTON1: + case MOUSE_BUTTON2: + case MOUSE_BUTTON3: + case MOUSE_BUTTON4: + case MOUSE_BUTTON5: + case MOUSE_DRGTOG: +#endif //MOUSEKEY_ENABLE + + case KEY_ESC: + case KEY_TAB: + case KEY_ENT: + case KEY_DEL: + case KEY_BSPC: + case KEY_BWRD: + case LYR_CONFIG: case LYR_FUNCTION: - return false; + return true; default: - return true; + return false; } } diff --git a/users/t4corun/features/combo.h b/users/t4corun/features/combo.h index ed28f0aa..d2040343 100644 --- a/users/t4corun/features/combo.h +++ b/users/t4corun/features/combo.h @@ -32,9 +32,9 @@ enum combos { #if defined(MOUSEKEY_ENABLE) const uint16_t PROGMEM mou_btn1_combo[] = { KC_D, KC_F, COMBO_END }; const uint16_t PROGMEM mou_btn2_combo[] = { KC_S, KC_D, COMBO_END }; -const uint16_t PROGMEM mou_btn3_combo[] = { KC_E, KC_R, COMBO_END }; -const uint16_t PROGMEM mou_btn4_combo[] = { KC_W, KC_E, COMBO_END }; -const uint16_t PROGMEM mou_btn5_combo[] = { KC_W, KC_R, COMBO_END }; +const uint16_t PROGMEM mou_btn3_combo[] = { KC_S, KC_F, COMBO_END }; +const uint16_t PROGMEM mou_btn4_combo[] = { KC_E, KC_R, COMBO_END }; +const uint16_t PROGMEM mou_btn5_combo[] = { KC_W, KC_E, COMBO_END }; const uint16_t PROGMEM mou_drg_combo[] = { KC_A, KC_S, COMBO_END }; #endif //MOUSEKEY_ENABLE From 3bd720d86cc74cb4ffb3e5659e541d181b469378 Mon Sep 17 00:00:00 2001 From: Victor Date: Wed, 17 Apr 2024 00:26:27 -0500 Subject: [PATCH 10/28] used hte layer combos in must tap - this might have messed up the other combos --- keymap.yml | 0 users/t4corun/features/combo.c | 3 --- users/t4corun/features/combo.h | 2 +- 3 files changed, 1 insertion(+), 4 deletions(-) create mode 100644 keymap.yml diff --git a/keymap.yml b/keymap.yml new file mode 100644 index 00000000..e69de29b diff --git a/users/t4corun/features/combo.c b/users/t4corun/features/combo.c index 46f73cbf..fdacd707 100644 --- a/users/t4corun/features/combo.c +++ b/users/t4corun/features/combo.c @@ -31,9 +31,6 @@ bool get_combo_must_tap(uint16_t index, combo_t *combo) { case KEY_DEL: case KEY_BSPC: case KEY_BWRD: - - case LYR_CONFIG: - case LYR_FUNCTION: return true; default: diff --git a/users/t4corun/features/combo.h b/users/t4corun/features/combo.h index d2040343..78c7668e 100644 --- a/users/t4corun/features/combo.h +++ b/users/t4corun/features/combo.h @@ -76,4 +76,4 @@ combo_t key_combos[COMBO_LENGTH] = { }; //their documentation is so confusing because you don't use COMBO_LEN defining the actions -uint16_t COMBO_LEN = COMBO_LENGTH; \ No newline at end of file +uint16_t COMBO_LEN = COMBO_LENGTH;d \ No newline at end of file From 3279aeb5f55dcf9dbb4c251e6dd486a53396e9c1 Mon Sep 17 00:00:00 2001 From: Victor Date: Wed, 17 Apr 2024 00:29:49 -0500 Subject: [PATCH 11/28] had extra char --- users/t4corun/features/combo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/users/t4corun/features/combo.h b/users/t4corun/features/combo.h index 78c7668e..1248aeb2 100644 --- a/users/t4corun/features/combo.h +++ b/users/t4corun/features/combo.h @@ -76,4 +76,4 @@ combo_t key_combos[COMBO_LENGTH] = { }; //their documentation is so confusing because you don't use COMBO_LEN defining the actions -uint16_t COMBO_LEN = COMBO_LENGTH;d \ No newline at end of file +uint16_t COMBO_LEN = COMBO_LENGTH; From f053b1e041eb2b7fcd2c7245d1a42b3b049e4ba2 Mon Sep 17 00:00:00 2001 From: Victor Date: Wed, 17 Apr 2024 00:44:20 -0500 Subject: [PATCH 12/28] removed ctrl backspace combo --- users/t4corun/features/combo.c | 3 +-- users/t4corun/features/combo.h | 3 --- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/users/t4corun/features/combo.c b/users/t4corun/features/combo.c index fdacd707..b8d5df35 100644 --- a/users/t4corun/features/combo.c +++ b/users/t4corun/features/combo.c @@ -29,8 +29,7 @@ bool get_combo_must_tap(uint16_t index, combo_t *combo) { case KEY_TAB: case KEY_ENT: case KEY_DEL: - case KEY_BSPC: - case KEY_BWRD: + case KEY_BSPC: return true; default: diff --git a/users/t4corun/features/combo.h b/users/t4corun/features/combo.h index 1248aeb2..164a17f5 100644 --- a/users/t4corun/features/combo.h +++ b/users/t4corun/features/combo.h @@ -21,7 +21,6 @@ enum combos { // right hand combos KEY_DEL, KEY_BSPC, - KEY_BWRD, LYR_CONFIG, COMBO_LENGTH @@ -46,7 +45,6 @@ const uint16_t PROGMEM lyr_fun_combo[] = { NUM, TR_LSFT, COMBO_END }; // right hand combos const uint16_t PROGMEM key_del_combo[] = { KC_M, TR_DOT, COMBO_END }; const uint16_t PROGMEM key_bspc_combo[] = { KC_M, TR_COMM, COMBO_END }; -const uint16_t PROGMEM key_bwrd_combo[] = { TR_COMM, TR_DOT, COMBO_END }; const uint16_t PROGMEM lyr_cfg_combo[] = { KC_SPC, NAV, COMBO_END }; @@ -70,7 +68,6 @@ combo_t key_combos[COMBO_LENGTH] = { // right hand combos [KEY_DEL] = COMBO(key_del_combo, KC_DEL), [KEY_BSPC] = COMBO(key_bspc_combo, KC_BSPC), - [KEY_BWRD] = COMBO(key_bwrd_combo, BACKWRD), [LYR_CONFIG] = COMBO(lyr_cfg_combo, CONFIG) }; From 6350d0043d27f9b1d7d6b402c70690aeb69e7dba Mon Sep 17 00:00:00 2001 From: Victor Date: Wed, 17 Apr 2024 00:56:44 -0500 Subject: [PATCH 13/28] moving the mouse keys from must tap --- users/t4corun/features/combo.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/users/t4corun/features/combo.c b/users/t4corun/features/combo.c index b8d5df35..9cf3eb26 100644 --- a/users/t4corun/features/combo.c +++ b/users/t4corun/features/combo.c @@ -16,7 +16,7 @@ bool get_combo_must_tap(uint16_t index, combo_t *combo) { switch (index) { -#if defined(MOUSEKEY_ENABLE) +#if defined(MOUSEKEY_ENABLE222) case MOUSE_BUTTON1: case MOUSE_BUTTON2: case MOUSE_BUTTON3: From 4c13c8d016143ad2375254affebda58107992ebf Mon Sep 17 00:00:00 2001 From: Victor Date: Wed, 17 Apr 2024 01:03:46 -0500 Subject: [PATCH 14/28] one more try on the drag scroll combo --- users/t4corun/features/combo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/users/t4corun/features/combo.h b/users/t4corun/features/combo.h index 164a17f5..363ee1bf 100644 --- a/users/t4corun/features/combo.h +++ b/users/t4corun/features/combo.h @@ -34,7 +34,7 @@ const uint16_t PROGMEM mou_btn2_combo[] = { KC_S, KC_D, COMBO_END }; const uint16_t PROGMEM mou_btn3_combo[] = { KC_S, KC_F, COMBO_END }; const uint16_t PROGMEM mou_btn4_combo[] = { KC_E, KC_R, COMBO_END }; const uint16_t PROGMEM mou_btn5_combo[] = { KC_W, KC_E, COMBO_END }; -const uint16_t PROGMEM mou_drg_combo[] = { KC_A, KC_S, COMBO_END }; +const uint16_t PROGMEM mou_drg_combo[] = { KC_Z, KC_X, COMBO_END }; #endif //MOUSEKEY_ENABLE const uint16_t PROGMEM key_esc_combo[] = { KC_Q, KC_W, COMBO_END }; From b314c3ffe1824e8fd08d724a8f264e2f6651a24b Mon Sep 17 00:00:00 2001 From: Victor Date: Wed, 17 Apr 2024 16:25:29 -0500 Subject: [PATCH 15/28] Combo overhaul - Remapped some combos based on how I used them - Turned the combo term down because of misfires (e.g. re) - Removed all the keys that are now combos to save room and force me to get used to using combos - Combined Game and GameNum. Removed GameNum Layer --- .../rollow/keymaps/t4corun/keymap.c | 2 - .../charybdis/3x5/keymaps/t4corun/keymap.c | 1 - .../bluebell/swoop/keymaps/t4corun/keymap.c | 2 - keyboards/crkbd/keymaps/t4corun/keymap.c | 1 - keyboards/planck/keymaps/t4corun/keymap.c | 1 - users/t4corun/config/combo_config.h | 2 +- users/t4corun/features/combo.c | 10 +---- users/t4corun/features/combo.h | 11 +++-- users/t4corun/features/oled.c | 2 +- users/t4corun/features/oled.h | 4 +- users/t4corun/t4corun.h | 41 ++++++------------- 11 files changed, 26 insertions(+), 51 deletions(-) diff --git a/keyboards/barbellboards/rollow/keymaps/t4corun/keymap.c b/keyboards/barbellboards/rollow/keymaps/t4corun/keymap.c index d75794be..d45a7ad4 100644 --- a/keyboards/barbellboards/rollow/keymaps/t4corun/keymap.c +++ b/keyboards/barbellboards/rollow/keymaps/t4corun/keymap.c @@ -27,7 +27,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_SYMBOL] = ROLLOW(LAYER_SYMBOL), [_FUNCTION] = ROLLOW(LAYER_FUNCTION), [_MOUSE] = ROLLOW(LAYER_MOUSE), - [_GAME_NUM] = ROLLOW(LAYER_GAME_NUM), [_CONFIG] = ROLLOW(LAYER_CONFIG) }; @@ -45,7 +44,6 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { [_SYMBOL] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___) }, [_FUNCTION] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(KC_DOWN, KC_UP ) }, [_MOUSE] = { ENCODER_CCW_CW(TR_MWHD, TR_MWHU), ENCODER_CCW_CW(___x___, ___x___) }, - [_GAME_NUM] = { ENCODER_CCW_CW(TR_MWHD, TR_MWHU), ENCODER_CCW_CW(KC_VOLU, KC_VOLD) }, [_CONFIG] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___) }, }; diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/t4corun/keymap.c b/keyboards/bastardkb/charybdis/3x5/keymaps/t4corun/keymap.c index 6dff9187..0ab681a5 100644 --- a/keyboards/bastardkb/charybdis/3x5/keymaps/t4corun/keymap.c +++ b/keyboards/bastardkb/charybdis/3x5/keymaps/t4corun/keymap.c @@ -27,7 +27,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_SYMBOL] = CNANO(LAYER_SYMBOL), [_FUNCTION] = CNANO(LAYER_FUNCTION), [_MOUSE] = CNANO(LAYER_MOUSE), - [_GAME_NUM] = CNANO(LAYER_GAME_NUM), [_CONFIG] = CNANO(LAYER_CONFIG) }; \ No newline at end of file diff --git a/keyboards/bluebell/swoop/keymaps/t4corun/keymap.c b/keyboards/bluebell/swoop/keymaps/t4corun/keymap.c index 92efb33e..1a089d23 100644 --- a/keyboards/bluebell/swoop/keymaps/t4corun/keymap.c +++ b/keyboards/bluebell/swoop/keymaps/t4corun/keymap.c @@ -27,7 +27,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_SYMBOL] = SWOOP(LAYER_SYMBOL), [_FUNCTION] = SWOOP(LAYER_FUNCTION), [_MOUSE] = SWOOP(LAYER_MOUSE), - [_GAME_NUM] = SWOOP(LAYER_GAME_NUM), [_CONFIG] = SWOOP(LAYER_CONFIG) }; @@ -46,7 +45,6 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { [_SYMBOL] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___) }, [_FUNCTION] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(KC_DOWN, KC_UP ) }, [_MOUSE] = { ENCODER_CCW_CW(TR_MWHD, TR_MWHU), ENCODER_CCW_CW(___x___, ___x___) }, - [_GAME_NUM] = { ENCODER_CCW_CW(TR_MWHD, TR_MWHU), ENCODER_CCW_CW(KC_VOLU, KC_VOLD) }, [_CONFIG] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___) }, }; diff --git a/keyboards/crkbd/keymaps/t4corun/keymap.c b/keyboards/crkbd/keymaps/t4corun/keymap.c index 3114f27a..e5a4aa33 100644 --- a/keyboards/crkbd/keymaps/t4corun/keymap.c +++ b/keyboards/crkbd/keymaps/t4corun/keymap.c @@ -27,7 +27,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_SYMBOL] = CRKBD(LAYER_SYMBOL), [_FUNCTION] = CRKBD(LAYER_FUNCTION), [_MOUSE] = CRKBD(LAYER_MOUSE), - [_GAME_NUM] = CRKBD(LAYER_GAME_NUM), [_CONFIG] = CRKBD(LAYER_CONFIG) }; \ No newline at end of file diff --git a/keyboards/planck/keymaps/t4corun/keymap.c b/keyboards/planck/keymaps/t4corun/keymap.c index 3cec3d89..2fb1fae8 100644 --- a/keyboards/planck/keymaps/t4corun/keymap.c +++ b/keyboards/planck/keymaps/t4corun/keymap.c @@ -27,7 +27,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_SYMBOL] = PLANCK(LAYER_SYMBOL), [_FUNCTION] = PLANCK(LAYER_FUNCTION), [_MOUSE] = PLANCK(LAYER_MOUSE), - [_GAME_NUM] = PLANCK(LAYER_GAME_NUM), [_CONFIG] = PLANCK(LAYER_CONFIG) }; \ No newline at end of file diff --git a/users/t4corun/config/combo_config.h b/users/t4corun/config/combo_config.h index 87182471..b154e1d5 100644 --- a/users/t4corun/config/combo_config.h +++ b/users/t4corun/config/combo_config.h @@ -23,7 +23,7 @@ Explore these (there are way more) //Set common configuration for all keyboards -#define COMBO_TERM 50 +#define COMBO_TERM 25 #define COMBO_TERM_PER_COMBO #define COMBO_MUST_TAP_PER_COMBO #define EXTRA_SHORT_COMBOS diff --git a/users/t4corun/features/combo.c b/users/t4corun/features/combo.c index 9cf3eb26..94908766 100644 --- a/users/t4corun/features/combo.c +++ b/users/t4corun/features/combo.c @@ -16,20 +16,14 @@ bool get_combo_must_tap(uint16_t index, combo_t *combo) { switch (index) { -#if defined(MOUSEKEY_ENABLE222) - case MOUSE_BUTTON1: - case MOUSE_BUTTON2: - case MOUSE_BUTTON3: - case MOUSE_BUTTON4: - case MOUSE_BUTTON5: +#if defined(MOUSEKEY_ENABLE) case MOUSE_DRGTOG: #endif //MOUSEKEY_ENABLE case KEY_ESC: case KEY_TAB: case KEY_ENT: - case KEY_DEL: - case KEY_BSPC: + case KEY_BWRD: return true; default: diff --git a/users/t4corun/features/combo.h b/users/t4corun/features/combo.h index 363ee1bf..98894d9e 100644 --- a/users/t4corun/features/combo.h +++ b/users/t4corun/features/combo.h @@ -21,6 +21,7 @@ enum combos { // right hand combos KEY_DEL, KEY_BSPC, + KEY_BWRD, LYR_CONFIG, COMBO_LENGTH @@ -30,11 +31,11 @@ enum combos { // left hand combos #if defined(MOUSEKEY_ENABLE) const uint16_t PROGMEM mou_btn1_combo[] = { KC_D, KC_F, COMBO_END }; -const uint16_t PROGMEM mou_btn2_combo[] = { KC_S, KC_D, COMBO_END }; -const uint16_t PROGMEM mou_btn3_combo[] = { KC_S, KC_F, COMBO_END }; +const uint16_t PROGMEM mou_btn2_combo[] = { KC_S, KC_F, COMBO_END }; +const uint16_t PROGMEM mou_btn3_combo[] = { KC_S, KC_D, COMBO_END }; const uint16_t PROGMEM mou_btn4_combo[] = { KC_E, KC_R, COMBO_END }; -const uint16_t PROGMEM mou_btn5_combo[] = { KC_W, KC_E, COMBO_END }; -const uint16_t PROGMEM mou_drg_combo[] = { KC_Z, KC_X, COMBO_END }; +const uint16_t PROGMEM mou_btn5_combo[] = { KC_W, KC_R, COMBO_END }; +const uint16_t PROGMEM mou_drg_combo[] = { TR_MOUA, KC_S, COMBO_END }; #endif //MOUSEKEY_ENABLE const uint16_t PROGMEM key_esc_combo[] = { KC_Q, KC_W, COMBO_END }; @@ -45,6 +46,7 @@ const uint16_t PROGMEM lyr_fun_combo[] = { NUM, TR_LSFT, COMBO_END }; // right hand combos const uint16_t PROGMEM key_del_combo[] = { KC_M, TR_DOT, COMBO_END }; const uint16_t PROGMEM key_bspc_combo[] = { KC_M, TR_COMM, COMBO_END }; +const uint16_t PROGMEM key_bwrd_combo[] = { TR_COMM, TR_DOT, COMBO_END }; const uint16_t PROGMEM lyr_cfg_combo[] = { KC_SPC, NAV, COMBO_END }; @@ -68,6 +70,7 @@ combo_t key_combos[COMBO_LENGTH] = { // right hand combos [KEY_DEL] = COMBO(key_del_combo, KC_DEL), [KEY_BSPC] = COMBO(key_bspc_combo, KC_BSPC), + [KEY_BWRD] = COMBO(key_bwrd_combo, BACKWRD), [LYR_CONFIG] = COMBO(lyr_cfg_combo, CONFIG) }; diff --git a/users/t4corun/features/oled.c b/users/t4corun/features/oled.c index c7282a3c..e1b8fe24 100644 --- a/users/t4corun/features/oled.c +++ b/users/t4corun/features/oled.c @@ -42,7 +42,7 @@ void render_layer_state(void) { oled_write_P(PSTR(OLED_RENDER_LAYER_MOUSE), get_highest_layer(layer_state) == _MOUSE); #endif //MOUSEKEY_ENABLE - oled_write_P(PSTR(OLED_RENDER_LAYER_GAME_NUM), get_highest_layer(layer_state) == _GAME_NUM); + oled_write_P(PSTR(OLED_RENDER_LAYER_FUNCTION), get_highest_layer(layer_state) == _FUNCTION); oled_write_P(PSTR(OLED_RENDER_LAYER_CONFIG), get_highest_layer(layer_state) == _CONFIG); } diff --git a/users/t4corun/features/oled.h b/users/t4corun/features/oled.h index fad58170..273b971f 100644 --- a/users/t4corun/features/oled.h +++ b/users/t4corun/features/oled.h @@ -7,7 +7,7 @@ #define OLED_RENDER_MODS_NAME "Mods:" #define OLED_RENDER_LAYOUT_NAME "Lyout" -#define OLED_RENDER_LAYOUT_QWERTY " QRTY" +#define OLED_RENDER_LAYOUT_QWERTY " qrty" #define OLED_RENDER_LAYOUT_COLEMAK_DH " cmDH" #define OLED_RENDER_LAYOUT_GAME " Game" @@ -16,7 +16,7 @@ #define OLED_RENDER_LAYER_NUMBER " Num " #define OLED_RENDER_LAYER_NAVIGATION " Nav " #define OLED_RENDER_LAYER_SYMBOL " Sym " -#define OLED_RENDER_LAYER_GAME_NUM " gNum" +#define OLED_RENDER_LAYER_FUNCTION " Fun " #define OLED_RENDER_LAYER_CONFIG " Cfg " #if defined(MOUSEKEY_ENABLE) diff --git a/users/t4corun/t4corun.h b/users/t4corun/t4corun.h index a8cc2ad9..dfcdd12c 100644 --- a/users/t4corun/t4corun.h +++ b/users/t4corun/t4corun.h @@ -48,7 +48,6 @@ enum keycodes { #define NUM MO(_NUMBER) #define CONFIG MO(_CONFIG) #define FUNC MO(_FUNCTION) -#define GAMENUM MO(_GAME_NUM) // Windows Shortcuts #define SC_COPY LCTL(KC_C) @@ -204,13 +203,6 @@ enum keycodes { //___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, -#define BASETEST \ - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \ - KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, \ - KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, \ - KC_TAB, KC_ESC, KC_LSFT, KC_SPC, KC_ENT, KC_MUTE - - #define LAYER_QWERTY \ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \ TR_MOUA, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, TR_QUOT, \ @@ -226,30 +218,30 @@ enum keycodes { #define LAYER_GAME \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, _NONE_5____________________________________, \ - GAMENUM, KC_A, KC_S, KC_D, KC_F, _NONE_5____________________________________, \ - KC_Z, KC_X, KC_C, KC_V, KC_B, _NONE_5____________________________________, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_7, KC_8, KC_9, KC_ESC, \ + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_4, KC_5, KC_6, KC_GRV, \ + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_1, KC_2, KC_3, CM_TOGG, \ ___x___, KC_LSFT, KC_SPC, _BASE_R4_________________ #define LAYER_NAVIGATION \ - KC_ESC, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_INS, ___x___, ___x___, ___x___, CONFIG, \ - KC_TAB, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_BSPC, _SCAG_MODS________________________, \ - _UCCPR_L___________________________________, KC_DEL, KC_APP, KC_VOLD, KC_VOLU, KC_MUTE, \ - ZOOMRST, _______, KC_ENT, _LAYER_TRANS_____________ + ___x___, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_INS, ___x___, ___x___, ___x___, ___x___, \ + ___x___, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, ___x___, _SCAG_MODS________________________, \ + _UCCPR_L___________________________________, ___x___, KC_APP, KC_VOLD, KC_VOLU, KC_MUTE, \ + ZOOMRST, _______, ___x___, _LAYER_TRANS_____________ #define LAYER_NUMBER \ - KC_ESC, SC_SNIP, SC_FILE, ___x___, TR_GRV, KC_ENT, KC_7, KC_8, KC_9, KC_TAB, \ - _GACS_MODS________________________, TR_SCLN, KC_BSPC, KC_4, KC_5, KC_6, KC_DOT, \ - _UCCPR_L___________________________________, KC_DEL, KC_1, KC_2, KC_3, TR_MINS, \ + ___x___, SC_SNIP, SC_FILE, ___x___, TR_GRV, ___x___, KC_7, KC_8, KC_9, ___x___, \ + _GACS_MODS________________________, TR_SCLN, ___x___, KC_4, KC_5, KC_6, KC_DOT, \ + _UCCPR_L___________________________________, ___x___, KC_1, KC_2, KC_3, TR_MINS, \ _LAYER_TRANS_____________, KC_SPC, NAV_0, ___x___ #define LAYER_SYMBOL \ - KC_ESC, ___x___, KC_AT, KC_DLR, TR_GRV, TR_EQL, KC_HASH, KC_ASTR, ___x___, TR_DQUO, \ - KC_AMPR, TR_LCBR, KC_RCBR, KC_PIPE, TR_SCLN, KC_BSPC, KC_QUES, TR_LBRC, KC_RBRC, TR_SQUO, \ - TR_PERC, TR_LABK, KC_RABK, KC_BSLS, KC_EXLM, KC_DEL, KC_SLSH, TR_LPRN, TR_DOT, TR_MINS, \ + ___x___, ___x___, KC_AT, KC_DLR, TR_GRV, TR_EQL, KC_HASH, KC_ASTR, ___x___, TR_DQUO, \ + KC_AMPR, TR_LCBR, KC_RCBR, KC_PIPE, TR_SCLN, ___x___, KC_QUES, TR_LBRC, KC_RBRC, TR_SQUO, \ + TR_PERC, TR_LABK, KC_RABK, KC_BSLS, KC_EXLM, ___x___, KC_SLSH, TR_LPRN, TR_DOT, TR_MINS, \ _LAYER_TRANS_____________, _LAYER_TRANS_____________ @@ -267,13 +259,6 @@ enum keycodes { ___x___, TR_BTN1, TR_BTN2, _NONE_3__________________ -#define LAYER_GAME_NUM \ - ___x___, KC_ESC, KC_TILD, KC_G, KC_T, _NONE_5____________________________________, \ - _______, KC_1, KC_2, KC_3, KC_4, _NONE_5____________________________________, \ - ___x___, KC_5, KC_6, KC_7, KC_8, _NONE_5____________________________________, \ - ___x___, KC_LALT, KC_LCTL, _LAYER_TRANS_____________ - - #define LAYER_CONFIG \ _NONE_5____________________________________, EE_CLR, QK_RBT, QK_BOOT, ___x___, ___x___, \ TR_RTOG, TR_RMOD, _NONE_3__________________, BASELYR, _SCAG_MODS________________________, \ From 3684cb65c3c48e3f1866a32d7869ebd8bd883558 Mon Sep 17 00:00:00 2001 From: Victor Date: Wed, 17 Apr 2024 16:36:55 -0500 Subject: [PATCH 16/28] Tweaking combo settings - made mouse button combos strict press order --- users/t4corun/features/combo.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/users/t4corun/features/combo.c b/users/t4corun/features/combo.c index 94908766..ad70d2b7 100644 --- a/users/t4corun/features/combo.c +++ b/users/t4corun/features/combo.c @@ -40,6 +40,17 @@ bool get_combo_must_press_in_order(uint16_t combo_index, combo_t *combo) { * return false means they do not have to be pressed in order * */ +#if defined(MOUSEKEY_ENABLE) + case MOUSE_BUTTON1: + case MOUSE_BUTTON2: + case MOUSE_BUTTON3: + case MOUSE_BUTTON4: + case MOUSE_BUTTON5: +#endif //MOUSEKEY_ENABLE + + case KEY_ESC: + return true; + default: return false; } From 76a8efb71d506d9c41b5451e329f1ea6559bac13 Mon Sep 17 00:00:00 2001 From: Victor Date: Wed, 17 Apr 2024 23:32:27 -0500 Subject: [PATCH 17/28] Tweaking combo setting - putting escape and enter back - tweaking combo timer --- users/t4corun/config/combo_config.h | 2 +- users/t4corun/features/combo.h | 4 ---- users/t4corun/t4corun.h | 10 +++++----- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/users/t4corun/config/combo_config.h b/users/t4corun/config/combo_config.h index b154e1d5..c26fc48b 100644 --- a/users/t4corun/config/combo_config.h +++ b/users/t4corun/config/combo_config.h @@ -23,7 +23,7 @@ Explore these (there are way more) //Set common configuration for all keyboards -#define COMBO_TERM 25 +#define COMBO_TERM 35 #define COMBO_TERM_PER_COMBO #define COMBO_MUST_TAP_PER_COMBO #define EXTRA_SHORT_COMBOS diff --git a/users/t4corun/features/combo.h b/users/t4corun/features/combo.h index 98894d9e..de60ff61 100644 --- a/users/t4corun/features/combo.h +++ b/users/t4corun/features/combo.h @@ -38,9 +38,7 @@ const uint16_t PROGMEM mou_btn5_combo[] = { KC_W, KC_R, COMBO_END }; const uint16_t PROGMEM mou_drg_combo[] = { TR_MOUA, KC_S, COMBO_END }; #endif //MOUSEKEY_ENABLE -const uint16_t PROGMEM key_esc_combo[] = { KC_Q, KC_W, COMBO_END }; const uint16_t PROGMEM key_tab_combo[] = { KC_C, KC_V, COMBO_END }; -const uint16_t PROGMEM key_ent_combo[] = { KC_X, KC_V, COMBO_END }; const uint16_t PROGMEM lyr_fun_combo[] = { NUM, TR_LSFT, COMBO_END }; // right hand combos @@ -62,9 +60,7 @@ combo_t key_combos[COMBO_LENGTH] = { [MOUSE_DRGTOG] = COMBO(mou_drg_combo, TR_DRGS), #endif //MOUSEKEY_ENABLE - [KEY_ESC] = COMBO(key_esc_combo, KC_ESC), [KEY_TAB] = COMBO(key_tab_combo, KC_TAB), - [KEY_ENT] = COMBO(key_ent_combo, KC_ENT), [LYR_FUNCTION] = COMBO(lyr_fun_combo, FUNC), // right hand combos diff --git a/users/t4corun/t4corun.h b/users/t4corun/t4corun.h index dfcdd12c..70bfcce0 100644 --- a/users/t4corun/t4corun.h +++ b/users/t4corun/t4corun.h @@ -219,27 +219,27 @@ enum keycodes { #define LAYER_GAME \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_7, KC_8, KC_9, KC_ESC, \ - KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_4, KC_5, KC_6, KC_GRV, \ + KC_LCTL, KC_A, KC_S, KC_Dp, KC_F, KC_G, KC_4, KC_5, KC_6, KC_GRV, \ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_1, KC_2, KC_3, CM_TOGG, \ ___x___, KC_LSFT, KC_SPC, _BASE_R4_________________ #define LAYER_NAVIGATION \ - ___x___, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_INS, ___x___, ___x___, ___x___, ___x___, \ + KC_ESC, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_INS, ___x___, ___x___, ___x___, ___x___, \ ___x___, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, ___x___, _SCAG_MODS________________________, \ _UCCPR_L___________________________________, ___x___, KC_APP, KC_VOLD, KC_VOLU, KC_MUTE, \ - ZOOMRST, _______, ___x___, _LAYER_TRANS_____________ + ZOOMRST, _______, KC_ENT, _LAYER_TRANS_____________ #define LAYER_NUMBER \ - ___x___, SC_SNIP, SC_FILE, ___x___, TR_GRV, ___x___, KC_7, KC_8, KC_9, ___x___, \ + KC_ESC, SC_SNIP, SC_FILE, ___x___, TR_GRV, ___x___, KC_7, KC_8, KC_9, ___x___, \ _GACS_MODS________________________, TR_SCLN, ___x___, KC_4, KC_5, KC_6, KC_DOT, \ _UCCPR_L___________________________________, ___x___, KC_1, KC_2, KC_3, TR_MINS, \ _LAYER_TRANS_____________, KC_SPC, NAV_0, ___x___ #define LAYER_SYMBOL \ - ___x___, ___x___, KC_AT, KC_DLR, TR_GRV, TR_EQL, KC_HASH, KC_ASTR, ___x___, TR_DQUO, \ + KC_ESC, ___x___, KC_AT, KC_DLR, TR_GRV, TR_EQL, KC_HASH, KC_ASTR, ___x___, TR_DQUO, \ KC_AMPR, TR_LCBR, KC_RCBR, KC_PIPE, TR_SCLN, ___x___, KC_QUES, TR_LBRC, KC_RBRC, TR_SQUO, \ TR_PERC, TR_LABK, KC_RABK, KC_BSLS, KC_EXLM, ___x___, KC_SLSH, TR_LPRN, TR_DOT, TR_MINS, \ _LAYER_TRANS_____________, _LAYER_TRANS_____________ From fb3b51bacd51312fc7561aa6860eab3500fd8943 Mon Sep 17 00:00:00 2001 From: Victor Date: Wed, 17 Apr 2024 23:41:56 -0500 Subject: [PATCH 18/28] Combined mouse and function layer --- .../barbellboards/rollow/keymaps/t4corun/keymap.c | 2 -- .../charybdis/3x5/keymaps/t4corun/keymap.c | 1 - keyboards/bluebell/swoop/keymaps/t4corun/keymap.c | 2 -- keyboards/crkbd/keymaps/t4corun/keymap.c | 1 - keyboards/planck/keymaps/t4corun/keymap.c | 1 - users/t4corun/features/combo.h | 8 ++++---- users/t4corun/features/oled.c | 5 ----- users/t4corun/features/oled.h | 4 ---- users/t4corun/t4corun.h | 15 ++++----------- 9 files changed, 8 insertions(+), 31 deletions(-) diff --git a/keyboards/barbellboards/rollow/keymaps/t4corun/keymap.c b/keyboards/barbellboards/rollow/keymaps/t4corun/keymap.c index d45a7ad4..2b9473fc 100644 --- a/keyboards/barbellboards/rollow/keymaps/t4corun/keymap.c +++ b/keyboards/barbellboards/rollow/keymaps/t4corun/keymap.c @@ -26,7 +26,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_NUMBER] = ROLLOW(LAYER_NUMBER), [_SYMBOL] = ROLLOW(LAYER_SYMBOL), [_FUNCTION] = ROLLOW(LAYER_FUNCTION), - [_MOUSE] = ROLLOW(LAYER_MOUSE), [_CONFIG] = ROLLOW(LAYER_CONFIG) }; @@ -43,7 +42,6 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { [_NUMBER] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(KC_RGHT, KC_LEFT) }, [_SYMBOL] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___) }, [_FUNCTION] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(KC_DOWN, KC_UP ) }, - [_MOUSE] = { ENCODER_CCW_CW(TR_MWHD, TR_MWHU), ENCODER_CCW_CW(___x___, ___x___) }, [_CONFIG] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___) }, }; diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/t4corun/keymap.c b/keyboards/bastardkb/charybdis/3x5/keymaps/t4corun/keymap.c index 0ab681a5..2345a290 100644 --- a/keyboards/bastardkb/charybdis/3x5/keymaps/t4corun/keymap.c +++ b/keyboards/bastardkb/charybdis/3x5/keymaps/t4corun/keymap.c @@ -26,7 +26,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_NUMBER] = CNANO(LAYER_NUMBER), [_SYMBOL] = CNANO(LAYER_SYMBOL), [_FUNCTION] = CNANO(LAYER_FUNCTION), - [_MOUSE] = CNANO(LAYER_MOUSE), [_CONFIG] = CNANO(LAYER_CONFIG) }; \ No newline at end of file diff --git a/keyboards/bluebell/swoop/keymaps/t4corun/keymap.c b/keyboards/bluebell/swoop/keymaps/t4corun/keymap.c index 1a089d23..f5f000b4 100644 --- a/keyboards/bluebell/swoop/keymaps/t4corun/keymap.c +++ b/keyboards/bluebell/swoop/keymaps/t4corun/keymap.c @@ -26,7 +26,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_NUMBER] = SWOOP(LAYER_NUMBER), [_SYMBOL] = SWOOP(LAYER_SYMBOL), [_FUNCTION] = SWOOP(LAYER_FUNCTION), - [_MOUSE] = SWOOP(LAYER_MOUSE), [_CONFIG] = SWOOP(LAYER_CONFIG) }; @@ -44,7 +43,6 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { [_NUMBER] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(KC_RGHT, KC_LEFT) }, [_SYMBOL] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___) }, [_FUNCTION] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(KC_DOWN, KC_UP ) }, - [_MOUSE] = { ENCODER_CCW_CW(TR_MWHD, TR_MWHU), ENCODER_CCW_CW(___x___, ___x___) }, [_CONFIG] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___) }, }; diff --git a/keyboards/crkbd/keymaps/t4corun/keymap.c b/keyboards/crkbd/keymaps/t4corun/keymap.c index e5a4aa33..0e961767 100644 --- a/keyboards/crkbd/keymaps/t4corun/keymap.c +++ b/keyboards/crkbd/keymaps/t4corun/keymap.c @@ -26,7 +26,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_NUMBER] = CRKBD(LAYER_NUMBER), [_SYMBOL] = CRKBD(LAYER_SYMBOL), [_FUNCTION] = CRKBD(LAYER_FUNCTION), - [_MOUSE] = CRKBD(LAYER_MOUSE), [_CONFIG] = CRKBD(LAYER_CONFIG) }; \ No newline at end of file diff --git a/keyboards/planck/keymaps/t4corun/keymap.c b/keyboards/planck/keymaps/t4corun/keymap.c index 2fb1fae8..00d8c44b 100644 --- a/keyboards/planck/keymaps/t4corun/keymap.c +++ b/keyboards/planck/keymaps/t4corun/keymap.c @@ -26,7 +26,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_NUMBER] = PLANCK(LAYER_NUMBER), [_SYMBOL] = PLANCK(LAYER_SYMBOL), [_FUNCTION] = PLANCK(LAYER_FUNCTION), - [_MOUSE] = PLANCK(LAYER_MOUSE), [_CONFIG] = PLANCK(LAYER_CONFIG) }; \ No newline at end of file diff --git a/users/t4corun/features/combo.h b/users/t4corun/features/combo.h index de60ff61..e2f5ed81 100644 --- a/users/t4corun/features/combo.h +++ b/users/t4corun/features/combo.h @@ -38,13 +38,13 @@ const uint16_t PROGMEM mou_btn5_combo[] = { KC_W, KC_R, COMBO_END }; const uint16_t PROGMEM mou_drg_combo[] = { TR_MOUA, KC_S, COMBO_END }; #endif //MOUSEKEY_ENABLE -const uint16_t PROGMEM key_tab_combo[] = { KC_C, KC_V, COMBO_END }; -const uint16_t PROGMEM lyr_fun_combo[] = { NUM, TR_LSFT, COMBO_END }; +const uint16_t PROGMEM key_tab_combo[] = { KC_C, KC_V, COMBO_END }; +const uint16_t PROGMEM lyr_fun_combo[] = { NUM, TR_LSFT, COMBO_END }; // right hand combos -const uint16_t PROGMEM key_del_combo[] = { KC_M, TR_DOT, COMBO_END }; +const uint16_t PROGMEM key_del_combo[] = { TR_COMM, TR_DOT, COMBO_END }; const uint16_t PROGMEM key_bspc_combo[] = { KC_M, TR_COMM, COMBO_END }; -const uint16_t PROGMEM key_bwrd_combo[] = { TR_COMM, TR_DOT, COMBO_END }; +const uint16_t PROGMEM key_bwrd_combo[] = { KC_M, TR_DOT, COMBO_END }; const uint16_t PROGMEM lyr_cfg_combo[] = { KC_SPC, NAV, COMBO_END }; diff --git a/users/t4corun/features/oled.c b/users/t4corun/features/oled.c index e1b8fe24..5b0ec8f2 100644 --- a/users/t4corun/features/oled.c +++ b/users/t4corun/features/oled.c @@ -37,11 +37,6 @@ void render_layer_state(void) { oled_write_P(PSTR(OLED_RENDER_LAYER_NAVIGATION), get_highest_layer(layer_state) == _NAVIGATION); oled_write_P(PSTR(OLED_RENDER_LAYER_NUMBER), get_highest_layer(layer_state) == _NUMBER); oled_write_P(PSTR(OLED_RENDER_LAYER_SYMBOL), get_highest_layer(layer_state) == _SYMBOL); - -#if defined(MOUSEKEY_ENABLE) - oled_write_P(PSTR(OLED_RENDER_LAYER_MOUSE), get_highest_layer(layer_state) == _MOUSE); -#endif //MOUSEKEY_ENABLE - oled_write_P(PSTR(OLED_RENDER_LAYER_FUNCTION), get_highest_layer(layer_state) == _FUNCTION); oled_write_P(PSTR(OLED_RENDER_LAYER_CONFIG), get_highest_layer(layer_state) == _CONFIG); } diff --git a/users/t4corun/features/oled.h b/users/t4corun/features/oled.h index 273b971f..96688394 100644 --- a/users/t4corun/features/oled.h +++ b/users/t4corun/features/oled.h @@ -19,10 +19,6 @@ #define OLED_RENDER_LAYER_FUNCTION " Fun " #define OLED_RENDER_LAYER_CONFIG " Cfg " -#if defined(MOUSEKEY_ENABLE) -# define OLED_RENDER_LAYER_MOUSE " Mou " -#endif //MOUSEKEY_ENABLE - void render_crkbd_logo(void); void render_default_layer_state(void); void render_layer_state(void); diff --git a/users/t4corun/t4corun.h b/users/t4corun/t4corun.h index 70bfcce0..ed2e7f62 100644 --- a/users/t4corun/t4corun.h +++ b/users/t4corun/t4corun.h @@ -225,7 +225,7 @@ enum keycodes { #define LAYER_NAVIGATION \ - KC_ESC, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_INS, ___x___, ___x___, ___x___, ___x___, \ + KC_ESC, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_INS, KC_CAPS, KC_SCRL, ___x___, ___x___, \ ___x___, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, ___x___, _SCAG_MODS________________________, \ _UCCPR_L___________________________________, ___x___, KC_APP, KC_VOLD, KC_VOLU, KC_MUTE, \ ZOOMRST, _______, KC_ENT, _LAYER_TRANS_____________ @@ -246,19 +246,12 @@ enum keycodes { #define LAYER_FUNCTION \ - TR_DMP2, TR_DMR2, ___x___, ___x___, KC_SCRL, KC_PSCR, KC_F7, KC_F8, KC_F9, KC_F10, \ - ___x___, ___x___, ___x___, ___x___, KC_NUM, KC_CAPS, KC_F4, KC_F5, KC_F6, KC_F11, \ - _NONE_5____________________________________, KC_PAUS, KC_F1, KC_F2, KC_F3, KC_F12, \ + ___x___, ___x___, TR_MOUU, ___x___, TR_MWHU, KC_PSCR, KC_F7, KC_F8, KC_F9, KC_F10, \ + ___x___, TR_MOUL, TR_MOUD, TR_MOUR, TR_MWHD, KC_NUM, KC_F4, KC_F5, KC_F6, KC_F11, \ + TR_PDPI, TR_SDPI, ___x___, TR_DRGS, TR_SNIP, KC_PAUS, KC_F1, KC_F2, KC_F3, KC_F12, \ _LAYER_TRANS_____________, TR_DMP1, TR_DMR1, ___x___ -#define LAYER_MOUSE \ - ___x___, TR_BTN5, TR_BTN4, TR_BTN3, ___x___, TR_MWHU, ___x___, TR_MOUU, ___x___, ___x___, \ - _______, _GACS_MOUSE_MODS_________, ___x___, TR_MWHD, TR_MOUL, TR_MOUD, TR_MOUR, ___x___, \ - _NONE_3__________________, TR_DRGS, TR_SNIP, TR_SDPI, TR_PDPI, ___x___, ___x___, ___x___, \ - ___x___, TR_BTN1, TR_BTN2, _NONE_3__________________ - - #define LAYER_CONFIG \ _NONE_5____________________________________, EE_CLR, QK_RBT, QK_BOOT, ___x___, ___x___, \ TR_RTOG, TR_RMOD, _NONE_3__________________, BASELYR, _SCAG_MODS________________________, \ From fde5444ade27749d5636f556b7be02bc202fb5cc Mon Sep 17 00:00:00 2001 From: Victor Date: Wed, 17 Apr 2024 23:43:15 -0500 Subject: [PATCH 19/28] fixing typo in keymap wrapper --- users/t4corun/t4corun.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/users/t4corun/t4corun.h b/users/t4corun/t4corun.h index ed2e7f62..de204f68 100644 --- a/users/t4corun/t4corun.h +++ b/users/t4corun/t4corun.h @@ -219,7 +219,7 @@ enum keycodes { #define LAYER_GAME \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_7, KC_8, KC_9, KC_ESC, \ - KC_LCTL, KC_A, KC_S, KC_Dp, KC_F, KC_G, KC_4, KC_5, KC_6, KC_GRV, \ + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_4, KC_5, KC_6, KC_GRV, \ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_1, KC_2, KC_3, CM_TOGG, \ ___x___, KC_LSFT, KC_SPC, _BASE_R4_________________ From 31361d209e2431845b1e47d8b86ae7cd2274ac2f Mon Sep 17 00:00:00 2001 From: Victor Date: Thu, 18 Apr 2024 00:00:42 -0500 Subject: [PATCH 20/28] More combo tuning - adjusting mappings again - removed the order presses for all combo - made mouse 3,4,5 must tap --- users/t4corun/features/combo.c | 13 +++++-------- users/t4corun/features/combo.h | 28 +++++++++++++--------------- 2 files changed, 18 insertions(+), 23 deletions(-) diff --git a/users/t4corun/features/combo.c b/users/t4corun/features/combo.c index ad70d2b7..4cdb78e0 100644 --- a/users/t4corun/features/combo.c +++ b/users/t4corun/features/combo.c @@ -17,12 +17,13 @@ bool get_combo_must_tap(uint16_t index, combo_t *combo) { switch (index) { #if defined(MOUSEKEY_ENABLE) + case MOUSE_BUTTON3: + case MOUSE_BUTTON4: + case MOUSE_BUTTON5: case MOUSE_DRGTOG: #endif //MOUSEKEY_ENABLE - case KEY_ESC: case KEY_TAB: - case KEY_ENT: case KEY_BWRD: return true; @@ -40,16 +41,12 @@ bool get_combo_must_press_in_order(uint16_t combo_index, combo_t *combo) { * return false means they do not have to be pressed in order * */ -#if defined(MOUSEKEY_ENABLE) +#if defined(MOUSEKEY_ENABLE2222) case MOUSE_BUTTON1: case MOUSE_BUTTON2: - case MOUSE_BUTTON3: case MOUSE_BUTTON4: - case MOUSE_BUTTON5: -#endif //MOUSEKEY_ENABLE - - case KEY_ESC: return true; +#endif //MOUSEKEY_ENABLE default: return false; diff --git a/users/t4corun/features/combo.h b/users/t4corun/features/combo.h index e2f5ed81..1b219016 100644 --- a/users/t4corun/features/combo.h +++ b/users/t4corun/features/combo.h @@ -13,9 +13,7 @@ enum combos { MOUSE_DRGTOG, #endif //MOUSEKEY_ENABLE - KEY_ESC, KEY_TAB, - KEY_ENT, LYR_FUNCTION, // right hand combos @@ -30,22 +28,22 @@ enum combos { // left hand combos #if defined(MOUSEKEY_ENABLE) -const uint16_t PROGMEM mou_btn1_combo[] = { KC_D, KC_F, COMBO_END }; -const uint16_t PROGMEM mou_btn2_combo[] = { KC_S, KC_F, COMBO_END }; -const uint16_t PROGMEM mou_btn3_combo[] = { KC_S, KC_D, COMBO_END }; -const uint16_t PROGMEM mou_btn4_combo[] = { KC_E, KC_R, COMBO_END }; -const uint16_t PROGMEM mou_btn5_combo[] = { KC_W, KC_R, COMBO_END }; -const uint16_t PROGMEM mou_drg_combo[] = { TR_MOUA, KC_S, COMBO_END }; +const uint16_t PROGMEM mou_btn1_combo[] = { KC_D, KC_F, COMBO_END }; +const uint16_t PROGMEM mou_btn2_combo[] = { KC_S, KC_D, COMBO_END }; +const uint16_t PROGMEM mou_btn3_combo[] = { KC_S, KC_D, KC_F, COMBO_END }; +const uint16_t PROGMEM mou_btn4_combo[] = { KC_E, KC_R, COMBO_END }; +const uint16_t PROGMEM mou_btn5_combo[] = { KC_W, KC_E, COMBO_END }; +const uint16_t PROGMEM mou_drg_combo[] = { TR_MOUA, KC_S, KC_D, KC_F, COMBO_END }; #endif //MOUSEKEY_ENABLE -const uint16_t PROGMEM key_tab_combo[] = { KC_C, KC_V, COMBO_END }; -const uint16_t PROGMEM lyr_fun_combo[] = { NUM, TR_LSFT, COMBO_END }; +const uint16_t PROGMEM key_tab_combo[] = { KC_C, KC_V, COMBO_END }; +const uint16_t PROGMEM lyr_fun_combo[] = { NUM, TR_LSFT, COMBO_END }; -// right hand combos -const uint16_t PROGMEM key_del_combo[] = { TR_COMM, TR_DOT, COMBO_END }; -const uint16_t PROGMEM key_bspc_combo[] = { KC_M, TR_COMM, COMBO_END }; -const uint16_t PROGMEM key_bwrd_combo[] = { KC_M, TR_DOT, COMBO_END }; -const uint16_t PROGMEM lyr_cfg_combo[] = { KC_SPC, NAV, COMBO_END }; +// right hand combos +const uint16_t PROGMEM key_del_combo[] = { TR_COMM, TR_DOT, COMBO_END }; +const uint16_t PROGMEM key_bspc_combo[] = { KC_M, TR_COMM, COMBO_END }; +const uint16_t PROGMEM key_bwrd_combo[] = { KC_M, TR_DOT, COMBO_END }; +const uint16_t PROGMEM lyr_cfg_combo[] = { KC_SPC, NAV, COMBO_END }; combo_t key_combos[COMBO_LENGTH] = { From 2c0cfed8618ee222c9a279ff17372bfbde54ebd0 Mon Sep 17 00:00:00 2001 From: Victor Date: Thu, 18 Apr 2024 00:02:12 -0500 Subject: [PATCH 21/28] Adding enter back to game layer --- users/t4corun/t4corun.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/users/t4corun/t4corun.h b/users/t4corun/t4corun.h index de204f68..eae782a4 100644 --- a/users/t4corun/t4corun.h +++ b/users/t4corun/t4corun.h @@ -221,11 +221,11 @@ enum keycodes { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_7, KC_8, KC_9, KC_ESC, \ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_4, KC_5, KC_6, KC_GRV, \ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_1, KC_2, KC_3, CM_TOGG, \ - ___x___, KC_LSFT, KC_SPC, _BASE_R4_________________ + KC_ENT, KC_LSFT, KC_SPC, _BASE_R4_________________ #define LAYER_NAVIGATION \ - KC_ESC, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_INS, KC_CAPS, KC_SCRL, ___x___, ___x___, \ + KC_ESC, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_INS, KC_CAPS, KC_SCRL, ___x___, ___x___, \q ___x___, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, ___x___, _SCAG_MODS________________________, \ _UCCPR_L___________________________________, ___x___, KC_APP, KC_VOLD, KC_VOLU, KC_MUTE, \ ZOOMRST, _______, KC_ENT, _LAYER_TRANS_____________ From f9aa0c386634891fa7e44d0a2a8d3a64a8551749 Mon Sep 17 00:00:00 2001 From: Victor Date: Thu, 18 Apr 2024 00:04:43 -0500 Subject: [PATCH 22/28] fixed typo in wrapper defines --- users/t4corun/t4corun.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/users/t4corun/t4corun.h b/users/t4corun/t4corun.h index eae782a4..f57c469e 100644 --- a/users/t4corun/t4corun.h +++ b/users/t4corun/t4corun.h @@ -225,7 +225,7 @@ enum keycodes { #define LAYER_NAVIGATION \ - KC_ESC, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_INS, KC_CAPS, KC_SCRL, ___x___, ___x___, \q + KC_ESC, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_INS, KC_CAPS, KC_SCRL, ___x___, ___x___, \ ___x___, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, ___x___, _SCAG_MODS________________________, \ _UCCPR_L___________________________________, ___x___, KC_APP, KC_VOLD, KC_VOLU, KC_MUTE, \ ZOOMRST, _______, KC_ENT, _LAYER_TRANS_____________ From 567bbb7d25a982b2a4111b2eaaa8c2931cba42b1 Mon Sep 17 00:00:00 2001 From: Victor Date: Thu, 18 Apr 2024 20:41:02 -0500 Subject: [PATCH 23/28] cleanup and tuning - added escape and enter back in - made the mouse buttons more intuitive - moved tab to the right hand - implemented combos per layer --- users/t4corun/config/combo_config.h | 19 ++++--- users/t4corun/features/combo.c | 80 ++++++++++++++++++++--------- users/t4corun/features/combo.h | 20 +++++--- users/t4corun/t4corun.h | 14 ++--- 4 files changed, 84 insertions(+), 49 deletions(-) diff --git a/users/t4corun/config/combo_config.h b/users/t4corun/config/combo_config.h index c26fc48b..033e2d1d 100644 --- a/users/t4corun/config/combo_config.h +++ b/users/t4corun/config/combo_config.h @@ -9,27 +9,30 @@ Explore these (there are way more) */ //Clear variables we plan to use that might be set elsewhere +#undef COMBO_ONLY_FROM_LAYER +#undef EXTRA_SHORT_COMBOS + #undef COMBO_TERM #undef COMBO_TERM_PER_COMBO -#undef COMBO_MUST_TAP_PER_COMBO -#undef EXTRA_SHORT_COMBOS -#undef COMBO_ONLY_FROM_LAYER #undef COMBO_HOLD_TERM #undef COMBO_MUST_HOLD_PER_COMBO +#undef COMBO_MUST_TAP_PER_COMBO #undef COMBO_MUST_PRESS_IN_ORDER_PER_COMBO - +#undef COMBO_SHOULD_TRIGGER //Set common configuration for all keyboards +#define COMBO_ONLY_FROM_LAYER 0 //this will always setup combos based off of QWERTY layout +#define EXTRA_SHORT_COMBOS + #define COMBO_TERM 35 #define COMBO_TERM_PER_COMBO -#define COMBO_MUST_TAP_PER_COMBO -#define EXTRA_SHORT_COMBOS -#define COMBO_ONLY_FROM_LAYER 0 //this will always setup combos based off of QWERTY #define COMBO_HOLD_TERM TAPPING_TERM #define COMBO_MUST_HOLD_PER_COMBO -#define COMBO_MUST_PRESS_IN_ORDER_PER_COMBO \ No newline at end of file +#define COMBO_MUST_TAP_PER_COMBO +#define COMBO_MUST_PRESS_IN_ORDER_PER_COMBO +#define COMBO_SHOULD_TRIGGER \ No newline at end of file diff --git a/users/t4corun/features/combo.c b/users/t4corun/features/combo.c index 4cdb78e0..598590f0 100644 --- a/users/t4corun/features/combo.c +++ b/users/t4corun/features/combo.c @@ -1,14 +1,16 @@ #include "combo.h" -bool get_combo_must_hold(uint16_t index, combo_t *combo) { +uint16_t get_combo_term(uint16_t index, combo_t *combo) { + // or with combo index, i.e. its name from enum. switch (index) { - - case LYR_CONFIG: - case LYR_FUNCTION: - return true; - + /* + case CONFIGLAYER: + return COMBO_HOLD_TERM + 150; + */ + default: - return false; + return COMBO_TERM; + } } @@ -23,6 +25,8 @@ bool get_combo_must_tap(uint16_t index, combo_t *combo) { case MOUSE_DRGTOG: #endif //MOUSEKEY_ENABLE + case KEY_ESC: + case KEY_ENT: case KEY_TAB: case KEY_BWRD: return true; @@ -32,6 +36,18 @@ bool get_combo_must_tap(uint16_t index, combo_t *combo) { } } +bool get_combo_must_hold(uint16_t index, combo_t *combo) { + switch (index) { + + case LYR_CONFIG: + case LYR_FUNCTION: + return true; + + default: + return false; + } +} + bool get_combo_must_press_in_order(uint16_t combo_index, combo_t *combo) { switch (combo_index) { /* List combos here that you want to only activate if their keys @@ -41,28 +57,42 @@ bool get_combo_must_press_in_order(uint16_t combo_index, combo_t *combo) { * return false means they do not have to be pressed in order * */ -#if defined(MOUSEKEY_ENABLE2222) - case MOUSE_BUTTON1: - case MOUSE_BUTTON2: - case MOUSE_BUTTON4: - return true; -#endif //MOUSEKEY_ENABLE - default: return false; } } -uint16_t get_combo_term(uint16_t index, combo_t *combo) { - // or with combo index, i.e. its name from enum. - switch (index) { - /* - case CONFIGLAYER: - return COMBO_HOLD_TERM + 150; - */ - - default: - return COMBO_TERM; +bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode, keyrecord_t *record) { - } + // disable all combos on config layer + if ( get_highest_layer(layer_state) == _CONFIG ) { + return false; + } + + switch (combo_index) { + + case KEY_ESC: + case KEY_ENT: + case KEY_TAB: + if ( get_highest_layer(layer_state) == _NAVIGATION || + get_highest_layer(layer_state) == _SYMBOL ) { + return false; + } + break; + + case MOUSE_BUTTON1: + case MOUSE_BUTTON2: + case MOUSE_BUTTON3: + case MOUSE_BUTTON4: + case MOUSE_BUTTON5: + case MOUSE_DRGTOG: + if ( get_highest_layer(layer_state) == _NAVIGATION || + get_highest_layer(layer_state) == _NUMBER || + get_highest_layer(layer_state) == _SYMBOL ) { + return false; + } + break; + } + + return true; } \ No newline at end of file diff --git a/users/t4corun/features/combo.h b/users/t4corun/features/combo.h index 1b219016..95214280 100644 --- a/users/t4corun/features/combo.h +++ b/users/t4corun/features/combo.h @@ -13,10 +13,12 @@ enum combos { MOUSE_DRGTOG, #endif //MOUSEKEY_ENABLE - KEY_TAB, + KEY_ESC, + KEY_ENT, LYR_FUNCTION, // right hand combos + KEY_TAB, KEY_DEL, KEY_BSPC, KEY_BWRD, @@ -29,23 +31,27 @@ enum combos { // left hand combos #if defined(MOUSEKEY_ENABLE) const uint16_t PROGMEM mou_btn1_combo[] = { KC_D, KC_F, COMBO_END }; -const uint16_t PROGMEM mou_btn2_combo[] = { KC_S, KC_D, COMBO_END }; +const uint16_t PROGMEM mou_btn2_combo[] = { KC_C, KC_V, COMBO_END }; const uint16_t PROGMEM mou_btn3_combo[] = { KC_S, KC_D, KC_F, COMBO_END }; const uint16_t PROGMEM mou_btn4_combo[] = { KC_E, KC_R, COMBO_END }; -const uint16_t PROGMEM mou_btn5_combo[] = { KC_W, KC_E, COMBO_END }; -const uint16_t PROGMEM mou_drg_combo[] = { TR_MOUA, KC_S, KC_D, KC_F, COMBO_END }; +const uint16_t PROGMEM mou_btn5_combo[] = { KC_W, KC_E, KC_R, COMBO_END }; +const uint16_t PROGMEM mou_drg_combo[] = { KC_A, KC_S, KC_D, KC_F, COMBO_END }; #endif //MOUSEKEY_ENABLE -const uint16_t PROGMEM key_tab_combo[] = { KC_C, KC_V, COMBO_END }; +const uint16_t PROGMEM key_esc_combo[] = { KC_W, KC_E, COMBO_END }; +const uint16_t PROGMEM key_ent_combo[] = { KC_X, KC_C, COMBO_END }; const uint16_t PROGMEM lyr_fun_combo[] = { NUM, TR_LSFT, COMBO_END }; + // right hand combos +const uint16_t PROGMEM key_tab_combo[] = { KC_J, KC_K, COMBO_END }; const uint16_t PROGMEM key_del_combo[] = { TR_COMM, TR_DOT, COMBO_END }; const uint16_t PROGMEM key_bspc_combo[] = { KC_M, TR_COMM, COMBO_END }; const uint16_t PROGMEM key_bwrd_combo[] = { KC_M, TR_DOT, COMBO_END }; const uint16_t PROGMEM lyr_cfg_combo[] = { KC_SPC, NAV, COMBO_END }; + combo_t key_combos[COMBO_LENGTH] = { // left hand combos @@ -58,10 +64,12 @@ combo_t key_combos[COMBO_LENGTH] = { [MOUSE_DRGTOG] = COMBO(mou_drg_combo, TR_DRGS), #endif //MOUSEKEY_ENABLE - [KEY_TAB] = COMBO(key_tab_combo, KC_TAB), + [KEY_ESC] = COMBO(key_esc_combo, KC_ESC), + [KEY_ENT] = COMBO(key_ent_combo, KC_ENT), [LYR_FUNCTION] = COMBO(lyr_fun_combo, FUNC), // right hand combos + [KEY_TAB] = COMBO(key_tab_combo, KC_TAB), [KEY_DEL] = COMBO(key_del_combo, KC_DEL), [KEY_BSPC] = COMBO(key_bspc_combo, KC_BSPC), [KEY_BWRD] = COMBO(key_bwrd_combo, BACKWRD), diff --git a/users/t4corun/t4corun.h b/users/t4corun/t4corun.h index f57c469e..6460e08d 100644 --- a/users/t4corun/t4corun.h +++ b/users/t4corun/t4corun.h @@ -12,8 +12,6 @@ enum layers { _NUMBER, _SYMBOL, _FUNCTION, - _MOUSE, - _GAME_NUM, _CONFIG }; @@ -46,8 +44,6 @@ enum keycodes { #define NAV MO(_NAVIGATION) #define NAV_0 LT(_NAVIGATION, KC_0) #define NUM MO(_NUMBER) -#define CONFIG MO(_CONFIG) -#define FUNC MO(_FUNCTION) // Windows Shortcuts #define SC_COPY LCTL(KC_C) @@ -100,7 +96,6 @@ enum keycodes { #if defined(MOUSEKEY_ENABLE) -# define TR_MOUA LT(_MOUSE, KC_A) # define TR_MOUU KC_MS_U # define TR_MOUD KC_MS_D @@ -130,7 +125,6 @@ enum keycodes { # endif //KEYBOARD_bastardkb_charybdis_3x5 #else -# define TR_MOUA KC_A # define TR_MOUU ___x___ # define TR_MOUD ___x___ @@ -205,14 +199,14 @@ enum keycodes { #define LAYER_QWERTY \ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \ - TR_MOUA, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, TR_QUOT, \ + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, TR_QUOT, \ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, TR_COMM, TR_DOT, TR_MINS, \ _BASE_L4_________________, _BASE_R4_________________ #define LAYER_COLEMAK_DH \ KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, TR_QUOT, \ - TR_MOUA, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, \ + KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, \ KC_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, TR_COMM, TR_DOT, TR_MINS, \ _BASE_L4_________________, _BASE_R4_________________ @@ -232,14 +226,14 @@ enum keycodes { #define LAYER_NUMBER \ - KC_ESC, SC_SNIP, SC_FILE, ___x___, TR_GRV, ___x___, KC_7, KC_8, KC_9, ___x___, \ + ___x___, SC_SNIP, SC_FILE, ___x___, TR_GRV, ___x___, KC_7, KC_8, KC_9, ___x___, \ _GACS_MODS________________________, TR_SCLN, ___x___, KC_4, KC_5, KC_6, KC_DOT, \ _UCCPR_L___________________________________, ___x___, KC_1, KC_2, KC_3, TR_MINS, \ _LAYER_TRANS_____________, KC_SPC, NAV_0, ___x___ #define LAYER_SYMBOL \ - KC_ESC, ___x___, KC_AT, KC_DLR, TR_GRV, TR_EQL, KC_HASH, KC_ASTR, ___x___, TR_DQUO, \ + ___x___, ___x___, KC_AT, KC_DLR, TR_GRV, TR_EQL, KC_HASH, KC_ASTR, ___x___, TR_DQUO, \ KC_AMPR, TR_LCBR, KC_RCBR, KC_PIPE, TR_SCLN, ___x___, KC_QUES, TR_LBRC, KC_RBRC, TR_SQUO, \ TR_PERC, TR_LABK, KC_RABK, KC_BSLS, KC_EXLM, ___x___, KC_SLSH, TR_LPRN, TR_DOT, TR_MINS, \ _LAYER_TRANS_____________, _LAYER_TRANS_____________ From 284d15f4e88bb69c7831aad54f26d0e5bec2bf19 Mon Sep 17 00:00:00 2001 From: Victor Date: Thu, 18 Apr 2024 20:46:11 -0500 Subject: [PATCH 24/28] Accidentally cleaned up too much - had to add back the FUNC and CONFIG bindings --- users/t4corun/t4corun.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/users/t4corun/t4corun.h b/users/t4corun/t4corun.h index 6460e08d..31617dca 100644 --- a/users/t4corun/t4corun.h +++ b/users/t4corun/t4corun.h @@ -44,6 +44,8 @@ enum keycodes { #define NAV MO(_NAVIGATION) #define NAV_0 LT(_NAVIGATION, KC_0) #define NUM MO(_NUMBER) +#define FUNC MO(_FUNCTION) +#define CONFIG MO(_CONFIG) // Windows Shortcuts #define SC_COPY LCTL(KC_C) From e1fcb05c8dd4b0575c1ab67a80968b6f321ca849 Mon Sep 17 00:00:00 2001 From: Victor Date: Thu, 18 Apr 2024 23:33:26 -0500 Subject: [PATCH 25/28] Tweaked combos and did keymap-drawer.yml - Admit that I moved the combos around after messing with the visualizer - added the yaml that creates the image --- keymap-drawer.yml | 99 ++++++++++++++++++++++++++++++++++ keymap.yml | 0 users/t4corun/features/combo.h | 12 ++--- users/t4corun/t4corun.h | 2 +- 4 files changed, 106 insertions(+), 7 deletions(-) create mode 100644 keymap-drawer.yml delete mode 100644 keymap.yml diff --git a/keymap-drawer.yml b/keymap-drawer.yml new file mode 100644 index 00000000..6298163b --- /dev/null +++ b/keymap-drawer.yml @@ -0,0 +1,99 @@ +layout: + qmk_keyboard: bluebell/swoop + qmk_layout: LAYOUT_split_3x5_3 +layers: + base_QWERTY: + - [Q, W, E, R, T, Y, U, I ,O, P] + - [A, S, D, F, G, H, J, K ,L, {h: "\"", t: "'"}] + - [Z, X, C, V, B, N, M, {h: "(", t: ","} , {h: ")", t: "."}, {h: "_", t: "-"}] + - {type: ghost} + - NUM + - Shift + - Space + - NAV + - {t: Mute, type: ghost} + base_COLEMAK_DH: + - [Q, W, F, P, B, J, L, U ,Y, {h: "\"", t: "'"}] + - [A, R, S, T, G, M, N, E ,I, O] + - [Z, X, C, D, V, K, H, {h: "(", t: ","} , {h: ")", t: "."}, {h: "_", t: "-"}] + - {type: ghost} + - NUM + - Shift + - Space + - NAV + - {t: Mute, type: ghost} + base_GAME: + - [Tab, Q, W, E, R, T, "7", "8" ,"9", Esc] + - [Ctrl, A, S, D, F, G, "4", "5" ,"6", "`"] + - [Z, X, C, V, B, Alt, "1", "2" ,"3", Combo Toggle] + - {t: Enter, type: ghost} + - Shift + - Space + - Space + - {h: "NAV", t: "0"} + - {t: Mute, type: ghost} + NAV: + - [Escape, Home, ▲, End, Page Up, Insert, Caps Lock, Scroll Lock, null, null ] + - [null, ◄, ▼, ►, Page Down, null, Shift, Ctrl, Alt, Gui ] + - [Undo, Cut, Copy, Paste, Redo, null, App, Vol-, Vol+, Mute ] + - {t: Zoom Reset, type: ghost} + - NUM + - Enter + - null + - {type: held} + - {t: Mute, type: ghost} + NUM: + - [null, Win Snip, Win File, null, {h: "~", t: "`"}, null, "7", "8" ,"9", null ] + - [Gui, Alt, Ctrl, Shift, {h: ":", t: ";"}, null, "4", "5" ,"6", "."] + - [Undo, Cut, Copy, Paste, Redo, null, "1", "2" ,"3", {h: "_", t: "-"}] + - {type: ghost} + - {type: held} + - null + - Space + - {h: "NAV", t: "0"} + - {type: ghost} + SYM: + - [null, null, "@", "$", {h: "~", t: "`"}, {h: "+", t: "="}, "#", "*", null, {h: "\"\"", t: "\""}] + - ["&", {h: "{}", t: "{"}, "}", "|", {h: ":", t: ";"}, null, "?", {h: "[]", t: "]"}, "]", {h: "''", t: "'"}] + - [{h: "^", t: "%"}, {h: "<>", t: "<"}, ">", "\\", "!", null, "/", {h: "()", t: ","}, {h: ")", t: "."}, {h: "_", t: "-"}] + - {type: ghost} + - {type: held} + - null + - null + - {type: held} + - {type: ghost} + FUNCTION: + - [null, null, Mouse Up, null, Mouse Wheel Up, Print Screen, F7, F8, F9, F10] + - [null, Mouse Left, Mouse Down, Mouse Right, Mouse Wheel Down, Num Lock, F4, F5, F6, F11] + - [Pointer DPI, Sniper DPI, null, Drag Scroll Toggle, Sniper Toggle, Pause Break, F1, F2, F3, F12] + - {type: ghost} + - {type: held} + - {type: held} + - Macro Play + - Macro Record + - {type: ghost} + CONFIG: + - [null, null, null, null, null, Clear EEPROM, Reboot, Boot Loader, null, null] + - [RGB Toggle, RGB Mode, null, null, null, Base Layer Toggle, Shift, Ctrl, Alt, Gui] + - [RGB Hue, RGB Sat, RGB Vib, RGB Spd, null, null, null, null, null, null ] + - {type: ghost} + - null + - null + - {type: held} + - {type: held} + - {type: ghost} +combos: + - { p: [1, 2], k: Esc, l: [base_QWERTY] } + - { p: [2, 3], k: MB4, l: [base_QWERTY] } + - { p: [3, 4], k: MB5, l: [base_QWERTY] } + - { p: [12, 13], k: MB1, l: [base_QWERTY] } + - { p: [13, 14], k: MB3, l: [base_QWERTY] } + - { p: [11, 12], k: DrgScr Tog, l: [base_QWERTY] } + - { p: [16, 17], k: Tab, l: [base_QWERTY] } + - { p: [21, 22], k: Enter, l: [base_QWERTY] } + - { p: [22, 23], k: MB2, l: [base_QWERTY] } + - { p: [26, 27], k: Bksp, l: [base_QWERTY] } + - { p: [27, 28], k: Del, l: [base_QWERTY] } + - { p: [26, 28], k: Bwrd, l: [base_QWERTY], align: bottom, offset: 0.1 } + - { p: [31, 32], k: FUNC, l: [base_QWERTY], align: top } + - { p: [33, 34], k: CONFIG, l: [base_QWERTY], align: top } \ No newline at end of file diff --git a/keymap.yml b/keymap.yml deleted file mode 100644 index e69de29b..00000000 diff --git a/users/t4corun/features/combo.h b/users/t4corun/features/combo.h index 95214280..18aa13b1 100644 --- a/users/t4corun/features/combo.h +++ b/users/t4corun/features/combo.h @@ -30,12 +30,12 @@ enum combos { // left hand combos #if defined(MOUSEKEY_ENABLE) -const uint16_t PROGMEM mou_btn1_combo[] = { KC_D, KC_F, COMBO_END }; -const uint16_t PROGMEM mou_btn2_combo[] = { KC_C, KC_V, COMBO_END }; -const uint16_t PROGMEM mou_btn3_combo[] = { KC_S, KC_D, KC_F, COMBO_END }; -const uint16_t PROGMEM mou_btn4_combo[] = { KC_E, KC_R, COMBO_END }; -const uint16_t PROGMEM mou_btn5_combo[] = { KC_W, KC_E, KC_R, COMBO_END }; -const uint16_t PROGMEM mou_drg_combo[] = { KC_A, KC_S, KC_D, KC_F, COMBO_END }; +const uint16_t PROGMEM mou_btn1_combo[] = { KC_D, KC_F, COMBO_END }; +const uint16_t PROGMEM mou_btn2_combo[] = { KC_C, KC_V, COMBO_END }; +const uint16_t PROGMEM mou_btn3_combo[] = { KC_F, KC_G, COMBO_END }; +const uint16_t PROGMEM mou_btn4_combo[] = { KC_E, KC_R, COMBO_END }; +const uint16_t PROGMEM mou_btn5_combo[] = { KC_R, KC_T, COMBO_END }; +const uint16_t PROGMEM mou_drg_combo[] = { KC_S, KC_D, COMBO_END }; #endif //MOUSEKEY_ENABLE const uint16_t PROGMEM key_esc_combo[] = { KC_W, KC_E, COMBO_END }; diff --git a/users/t4corun/t4corun.h b/users/t4corun/t4corun.h index 31617dca..a629542d 100644 --- a/users/t4corun/t4corun.h +++ b/users/t4corun/t4corun.h @@ -217,7 +217,7 @@ enum keycodes { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_7, KC_8, KC_9, KC_ESC, \ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_4, KC_5, KC_6, KC_GRV, \ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_1, KC_2, KC_3, CM_TOGG, \ - KC_ENT, KC_LSFT, KC_SPC, _BASE_R4_________________ + KC_ENT, KC_LSFT, KC_SPC, KC_SPC, NAV_0, KC_MUTE #define LAYER_NAVIGATION \ From 33be21734fea347bf13fdbcec884c84287cc1e82 Mon Sep 17 00:00:00 2001 From: Victor Date: Sat, 20 Apr 2024 15:14:45 -0500 Subject: [PATCH 26/28] Addtional Tweaks to combos - Moved the backspace / delete combos to the top - removed contrl backspace shortcuts - Adjusted keymap.yaml --- keymap-drawer.yml | 11 ++++++----- users/t4corun/features/combo.h | 17 +++++++---------- users/t4corun/t4corun.h | 5 +---- 3 files changed, 14 insertions(+), 19 deletions(-) diff --git a/keymap-drawer.yml b/keymap-drawer.yml index 6298163b..830822c1 100644 --- a/keymap-drawer.yml +++ b/keymap-drawer.yml @@ -89,11 +89,12 @@ combos: - { p: [12, 13], k: MB1, l: [base_QWERTY] } - { p: [13, 14], k: MB3, l: [base_QWERTY] } - { p: [11, 12], k: DrgScr Tog, l: [base_QWERTY] } - - { p: [16, 17], k: Tab, l: [base_QWERTY] } + - { p: [26, 27], k: Tab, l: [base_QWERTY] } - { p: [21, 22], k: Enter, l: [base_QWERTY] } - { p: [22, 23], k: MB2, l: [base_QWERTY] } - - { p: [26, 27], k: Bksp, l: [base_QWERTY] } - - { p: [27, 28], k: Del, l: [base_QWERTY] } - - { p: [26, 28], k: Bwrd, l: [base_QWERTY], align: bottom, offset: 0.1 } + - { p: [7, 8], k: Bksp, l: [base_QWERTY] } + - { p: [6, 7], k: Del, l: [base_QWERTY] } - { p: [31, 32], k: FUNC, l: [base_QWERTY], align: top } - - { p: [33, 34], k: CONFIG, l: [base_QWERTY], align: top } \ No newline at end of file + - { p: [33, 34], k: CONFIG, l: [base_QWERTY], align: top } +draw_config: + small_pad: 6 diff --git a/users/t4corun/features/combo.h b/users/t4corun/features/combo.h index 18aa13b1..1096fc69 100644 --- a/users/t4corun/features/combo.h +++ b/users/t4corun/features/combo.h @@ -21,7 +21,6 @@ enum combos { KEY_TAB, KEY_DEL, KEY_BSPC, - KEY_BWRD, LYR_CONFIG, COMBO_LENGTH @@ -38,17 +37,16 @@ const uint16_t PROGMEM mou_btn5_combo[] = { KC_R, KC_T, COMBO_END }; const uint16_t PROGMEM mou_drg_combo[] = { KC_S, KC_D, COMBO_END }; #endif //MOUSEKEY_ENABLE -const uint16_t PROGMEM key_esc_combo[] = { KC_W, KC_E, COMBO_END }; -const uint16_t PROGMEM key_ent_combo[] = { KC_X, KC_C, COMBO_END }; -const uint16_t PROGMEM lyr_fun_combo[] = { NUM, TR_LSFT, COMBO_END }; +const uint16_t PROGMEM key_esc_combo[] = { KC_W, KC_E, COMBO_END }; +const uint16_t PROGMEM key_ent_combo[] = { KC_X, KC_C, COMBO_END }; +const uint16_t PROGMEM lyr_fun_combo[] = { NUM, TR_LSFT, COMBO_END }; // right hand combos -const uint16_t PROGMEM key_tab_combo[] = { KC_J, KC_K, COMBO_END }; -const uint16_t PROGMEM key_del_combo[] = { TR_COMM, TR_DOT, COMBO_END }; -const uint16_t PROGMEM key_bspc_combo[] = { KC_M, TR_COMM, COMBO_END }; -const uint16_t PROGMEM key_bwrd_combo[] = { KC_M, TR_DOT, COMBO_END }; -const uint16_t PROGMEM lyr_cfg_combo[] = { KC_SPC, NAV, COMBO_END }; +const uint16_t PROGMEM key_tab_combo[] = { KC_M, TR_COMM, COMBO_END }; +const uint16_t PROGMEM key_del_combo[] = { KC_U, KC_I, COMBO_END }; +const uint16_t PROGMEM key_bspc_combo[] = { KC_I, KC_O, COMBO_END }; +const uint16_t PROGMEM lyr_cfg_combo[] = { KC_SPC, NAV, COMBO_END }; @@ -72,7 +70,6 @@ combo_t key_combos[COMBO_LENGTH] = { [KEY_TAB] = COMBO(key_tab_combo, KC_TAB), [KEY_DEL] = COMBO(key_del_combo, KC_DEL), [KEY_BSPC] = COMBO(key_bspc_combo, KC_BSPC), - [KEY_BWRD] = COMBO(key_bwrd_combo, BACKWRD), [LYR_CONFIG] = COMBO(lyr_cfg_combo, CONFIG) }; diff --git a/users/t4corun/t4corun.h b/users/t4corun/t4corun.h index a629542d..eb1a9c94 100644 --- a/users/t4corun/t4corun.h +++ b/users/t4corun/t4corun.h @@ -56,14 +56,11 @@ enum keycodes { #define SC_SNIP LGUI(LSFT(KC_S)) #define SC_FILE LGUI(KC_E) -// Zoom +// Zoom for encoders #define ZOOMIN LCTL(LSFT(KC_EQL)) #define ZOOMOUT LCTL(KC_MINS) #define ZOOMRST LCTL(KC_0) -// Macros -#define BACKWRD LCTL(KC_BSPC) - /* - Any keycodes with prefix TR has behavior dependent on if the feature is enabled. - If the feature is disabled then the key is just the normal key From 21586615153c3b72923bf0feae83e259551fefdd Mon Sep 17 00:00:00 2001 From: Victor Date: Sat, 20 Apr 2024 15:33:28 -0500 Subject: [PATCH 27/28] Updated Readme and added keymap image --- README.md | 155 ++++++-------------------------------------------- my_keymap.png | Bin 0 -> 157650 bytes 2 files changed, 17 insertions(+), 138 deletions(-) create mode 100644 my_keymap.png diff --git a/README.md b/README.md index 560e3008..5a84efe5 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,22 @@ My userspace for building QMK firmware via GitHub Actions. This does not require a local build environment where files are placed within keyboard subfolders. -The custom layout optimizes for programming (SQL, Powershell, C) and minimizes holds for comfort. It started from [Manna Harbor Miryoku](https://github.com/manna-harbour/miryoku) and took heavy influence from [Jonas Hietala T-34](https://www.jonashietala.se/series/t-34/) +## Layout + +The custom layout optimizes for programming (SQL, Powershell, C) and minimizes holds for comfort. It started from [Manna Harbor Miryoku](https://github.com/manna-harbour/miryoku) and took heavy influence from [Jonas Hietala T-34](https://www.jonashietala.se/series/t-34/). The keymap designed for split 3x5, two thumbs keys, dual encoders, and combined with a Ploopy Nano trackball mouse. Design themes: + +- Releasing all keys always brings you back to base layer +- Keeping certain keys consistent on all layers for better muscle memory +- Numbers and function keys are positioned similarly +- Symbols important for powershell / writing are positioned under stronger fingers +- Game keymap that doesn't require massive game key bind changes. Tested on Resident Evil 4 Remake + +Notes: + +- Outside thumb keys are encoder clicks. Some keyboards may have extra thumb keys +- Pressing Pointer DPI and Drag Scroll Toggle will enter bootlaoder on Ploopy Nano + +![image](my_keymap.png) ## Features @@ -62,12 +77,6 @@ Enables trackball functionality on certain boards (e.g., Ploopy Nano and Bastard Note: `MOUSEKEY_ENABLE` do not need to be enabled in tandem with this to get the mouse buttons. -### Mouse Keys - -Enables mouse emulation for all boards. Required when using the Ploopy Nano as that has no mouse buttons. - -Hold `a` to enter `_MOUSE` layer. Use right side directional pad (e.g. IJKL) to move the cursor and left side thumb keys for basic mouse clicking. - ### RGB Matrix Taste the rainbow for boards with RGB LEDs and large MCU memory footprints. Enables RGB lighting effects and layer/host status indicators. Review the keyboard files to identify the key position for each LED and update the preprocessor definitions in `config\rgbmatrix_config.h` @@ -80,137 +89,7 @@ Enables keyboard status visualization. Shows currently selected layer, active mo ### Combos -Enables simultaneous pressing of key combinations to get another. Handy when there are not enough keys on the keyboard - -**Note** Framework is present but disabled during redesign - -## Layout - -This is the keymap designed for split 3x5 layout, two thumb keys on each side, and dual encoders. Emphasis on: - -- Releasing all keys always brings you back to base layer -- Outside thumb keys are encoder clicks -- Keeping certain keys consistent on all layers for better muscle memory -- Numbers and function keys are positioned similarly -- Symbols important for powershell / writing are positioned under stronger fingers -- Game keymap that doesn't require massive game key bind changes. Tested on Resident Evil 4 Remake - -Additional keys may be mapped if present. Check each keyboard's `keymap.c` for more information - -```text -╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮ -│ q │ w │ e │ r │ t │ │ y │ u │ i │ o │ p │ -├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ -│ a mou│ s │ d │ f │ g │ qwerty │ h │ j │ k │ l │ ' " │ -├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ -│ z │ x │ c │ v │ b │ │ n │ m │ , ( │ . ) │ - _ │ -╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯ - enc: mwheel │ │ num │ shft │ │ spc │ nav │ mute │ enc: volume - ╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯ - -╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮ -│ q │ w │ f │ p │ b │ │ j │ l │ u │ y │ ' " │ -├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ -│ a mou│ r │ s │ t │ g │ colemak │ m │ n │ e │ i │ o │ -├──────┼──────┼──────┼──────┼──────┤ dh ├──────┼──────┼──────┼──────┼──────┤ -│ z │ x │ c │ d │ v │ │ k │ h │ , ( │ . ) │ - _ │ -╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯ - enc: mwheel │ │ num │ shft │ │ spc │ nav │ mute │ enc: volume - ╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯ - -╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮ -│ tab │ q │ w │ e │ r │ │ │ │ │ │ │ -├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ -│ gnum │ a │ s │ d │ f │ game │ │ │ │ │ │ -├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ -│ z │ x │ c │ v │ b │ │ │ │ │ │ │ -╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯ - enc: mwheel │ │ shft │ spc │ │ spc │ nav │ mute │ enc: volume - ╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯ - -╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮ -│ esc │ home │ up │ end │ pgup │ │ ins │ │ │ │ cfg │ -├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ -│ tab │ left │ down │ rght │ pgdn │ nav │ bksp │ shft │ ctrl │ alt │ gui │ -├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ -│ undo │ cut │ copy │ pste │ redo │ │ del │ app │ vol- │ vol+ │ mute │ -╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┴──────┴──────╯ - enc: zoom │ zrst │ num │ ent │ │ │ nav │ │ enc: none - ╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯ - -Notes: -- zrst - Ctrl + 0 to Zoom Reset - -╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮ -│ esc │ snip │ file │ func │ ` ~ │ │ ent │ 7 │ 8 │ 9 │ tab │ -├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ -│ gui │ alt │ ctrl │ shft │ ; : │ numbers │ bksp │ 4 │ 5 │ 6 │ . │ -├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ -│ undo │ cut │ copy │ pste │ redo │ │ del │ 1 │ 2 │ 3 │ - _ │ -╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯ - enc: none │ │ num │ │ │ spc │ 0 nav│ │ enc: ← → - ╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯ - -╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮ -│ esc │ │ @ │ $ │ ` ~ │ │ = + │ # │ * │ │ " "" │ -├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ -│ & │ { {} │ } │ | │ ; : │ symbols │ bksp │ ? │ [ [] │ ] │ ' '' │ -├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ -│ % ^ │ < <> │ > │ \ │ ! │ │ del │ / │ , () │ . ) │ - _ │ -╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯ - enc: none │ │ num │ │ │ │ nav │ │ enc: none - ╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯ - -Notes: -- tri layer: Activate th the symbol layer by holding down symbol and navigation - -╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮ -│ mply2│ mrec2│ │ func │ │ │ pscr │ F7 │ F8 │ F9 │ F10 │ -├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ -│ │ │ │ │ scrl │ func │ caps │ F4 │ F5 │ F6 │ F11 │ -├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ -│ │ │ │ │ │ │ paus │ F1 │ F2 │ F3 │ F12 │ -╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯ - enc: none │ │ num │ │ │ mply1│ mrec1│ │ enc: ↑ ↓ - ╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯ - -╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮ -│ │ btn5 │ btn4 │ btn3 │ │ │ whup │ │ mouu │ │ │ -├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ -│ mou │ alt │ ctrl │ shft │ │ mouse │ whdn │ moul │ moud │ mour │ │ -├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ -│ │ │ │ drgs │ snip │ │ sdpi │ pdpi │ │ │ │ -╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯ - enc:mwheel │ │ btn1 │ btn2 │ │ │ │ │ enc: none - ╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯ - -Notes: -- drgs on non Charybdis Nano boards will trigger drag scrolling on Ploopy Nano -- pdpi on non Charybdis Nano boards will cycle Ploopy Nano DPI settings -- both together will enter bootlaoder on Ploopy Nano - -╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮ -│ │ esc │ ` │ g │ t │ │ │ │ │ │ │ -├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ -│ gnum │ 1 │ 2 │ 3 │ 4 │ game │ │ │ │ │ │ -├──────┼──────┼──────┼──────┼──────┤ num ├──────┼──────┼──────┼──────┼──────┤ -│ │ 5 │ 6 │ 7 │ 8 │ │ │ │ │ │ │ -╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯ - end: mwheel │ │ alt │ ctrl │ │ │ nav │ mute │ enc: volume - ╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯ - -╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮ -│ │ │ │ │ │ │ eeclr│ rboot│ boot │ │ cfg │ -├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ -│rgbtog│rgbMod│ │ │ │ config │ blyr │ shft │ ctrl │ alt │ gui │ -├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤ -│ hue+ │ sat+ │ vib+ │ spd+ │ │ │ │ │ │ │ │ -╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯ - enc: none │ │ │ │ │ │ nav │ │ enc: none - ╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯ - -notes: -- blyr - toggles between the three base layers: qwerty, colemakdh, game +Enables simultaneous pressing of key combinations to get another. Handy when there are not enough keys on the keyboard. Primarily used to implement mouse buttons and make important keys (enter, backspace, etc) available on base layer ## Target Keyboards diff --git a/my_keymap.png b/my_keymap.png new file mode 100644 index 0000000000000000000000000000000000000000..7d38f253d56c503af9d6a4c6e8a83ca248637724 GIT binary patch literal 157650 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

4k&!wB#`Q`PZw=Jr^uIH0K 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 B(4hbT literal 0 HcmV?d00001 From cb8436214cc60d97291ba46790342b0116fd245f Mon Sep 17 00:00:00 2001 From: Victor Date: Sat, 20 Apr 2024 15:38:07 -0500 Subject: [PATCH 28/28] forgot to update the combo must tap for removing back word --- users/t4corun/features/combo.c | 1 - 1 file changed, 1 deletion(-) diff --git a/users/t4corun/features/combo.c b/users/t4corun/features/combo.c index 598590f0..1d4a19b8 100644 --- a/users/t4corun/features/combo.c +++ b/users/t4corun/features/combo.c @@ -28,7 +28,6 @@ bool get_combo_must_tap(uint16_t index, combo_t *combo) { case KEY_ESC: case KEY_ENT: case KEY_TAB: - case KEY_BWRD: return true; default: