Keymap introspection for combos. (#19670)

This commit is contained in:
Nick Brassel 2023-05-15 22:27:37 +10:00 committed by GitHub
parent 433dc60686
commit 5faa23d54c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
226 changed files with 533 additions and 729 deletions

View File

@ -75,6 +75,10 @@ $(TEST)_SRC += \
tests/test_common/main.cpp \ tests/test_common/main.cpp \
$(QUANTUM_PATH)/logging/print.c $(QUANTUM_PATH)/logging/print.c
ifneq ($(strip $(INTROSPECTION_KEYMAP_C)),)
$(TEST)_DEFS += -DINTROSPECTION_KEYMAP_C=\"$(strip $(INTROSPECTION_KEYMAP_C))\"
endif
$(TEST_OBJ)/$(TEST)_SRC := $($(TEST)_SRC) $(TEST_OBJ)/$(TEST)_SRC := $($(TEST)_SRC)
$(TEST_OBJ)/$(TEST)_INC := $($(TEST)_INC) $(VPATH) $(GTEST_INC) $(TEST_OBJ)/$(TEST)_INC := $($(TEST)_INC) $(VPATH) $(GTEST_INC)
$(TEST_OBJ)/$(TEST)_DEFS := $($(TEST)_DEFS) $(TEST_OBJ)/$(TEST)_DEFS := $($(TEST)_DEFS)

View File

@ -43,7 +43,6 @@
"DOUBLE_TAP_SHIFT_TURNS_ON_CAPS_WORD": {"info_key": "caps_word.double_tap_shift_turns_on", "value_type": "bool"}, "DOUBLE_TAP_SHIFT_TURNS_ON_CAPS_WORD": {"info_key": "caps_word.double_tap_shift_turns_on", "value_type": "bool"},
// Combos // Combos
"COMBO_COUNT": {"info_key": "combo.count", "value_type": "int"},
"COMBO_TERM": {"info_key": "combo.term", "value_type": "int"}, "COMBO_TERM": {"info_key": "combo.term", "value_type": "int"},
// Dynamic Keymap // Dynamic Keymap
@ -182,9 +181,10 @@
"TAPPING_FORCE_HOLD": {"info_key": "tapping.force_hold", "value_type": "bool", "deprecated": true}, "TAPPING_FORCE_HOLD": {"info_key": "tapping.force_hold", "value_type": "bool", "deprecated": true},
"TAPPING_FORCE_HOLD_PER_KEY": {"info_key": "tapping.force_hold_per_key", "value_type": "bool", "deprecated": true}, "TAPPING_FORCE_HOLD_PER_KEY": {"info_key": "tapping.force_hold_per_key", "value_type": "bool", "deprecated": true},
"UNUSED_PINS": {"info_key": "_invalid.unused_pins", "deprecated": true}, "UNUSED_PINS": {"info_key": "_invalid.unused_pins", "deprecated": true},
"COMBO_COUNT": {"info_key": "_invalid.combo.count", "invalid": true},
// USB params, need to mark as failure when specified in config.h, rather than deprecated // USB params, need to mark as failure when specified in config.h, rather than deprecated
"DEVICE_VER": {"info_key": "usb.device_version", "value_type": "bcd_version", "deprecated": true, "replace_with": "`usb.device_version` in info.json"} "DEVICE_VER": {"info_key": "usb.device_version", "value_type": "bcd_version", "deprecated": true, "replace_with": "`usb.device_version` in info.json"},
"MANUFACTURER": {"info_key": "manufacturer", "value_type": "str", "deprecated": true, "replace_with": "`manufacturer` in info.json"}, "MANUFACTURER": {"info_key": "manufacturer", "value_type": "str", "deprecated": true, "replace_with": "`manufacturer` in info.json"},
"PRODUCT": {"info_key": "keyboard_name", "warn_duplicate": false, "value_type": "str", "deprecated": true, "replace_with": "`keyboard_name` in info.json"}, "PRODUCT": {"info_key": "keyboard_name", "warn_duplicate": false, "value_type": "str", "deprecated": true, "replace_with": "`keyboard_name` in info.json"},
"PRODUCT_ID": {"info_key": "usb.pid", "value_type": "hex", "deprecated": true, "replace_with": "`usb.pid` in info.json"}, "PRODUCT_ID": {"info_key": "usb.pid", "value_type": "hex", "deprecated": true, "replace_with": "`usb.pid` in info.json"},

View File

@ -186,8 +186,6 @@ If you define these options you will enable the associated feature, which may in
* how long before oneshot times out * how long before oneshot times out
* `#define ONESHOT_TAP_TOGGLE 2` * `#define ONESHOT_TAP_TOGGLE 2`
* how many taps before oneshot toggle is triggered * how many taps before oneshot toggle is triggered
* `#define COMBO_COUNT 2`
* Set this to the number of combos that you're using in the [Combo](feature_combo.md) feature. Or leave it undefined and programmatically set the count.
* `#define COMBO_TERM 200` * `#define COMBO_TERM 200`
* how long for the Combo keys to be detected. Defaults to `TAPPING_TERM` if not defined. * how long for the Combo keys to be detected. Defaults to `TAPPING_TERM` if not defined.
* `#define COMBO_MUST_HOLD_MODS` * `#define COMBO_MUST_HOLD_MODS`

View File

@ -4,15 +4,12 @@ The Combo feature is a chording type solution for adding custom actions. It lets
To enable this feature, you need to add `COMBO_ENABLE = yes` to your `rules.mk`. To enable this feature, you need to add `COMBO_ENABLE = yes` to your `rules.mk`.
Additionally, in your `config.h`, you'll need to specify the number of combos that you'll be using, by adding `#define COMBO_COUNT 1` (replacing 1 with the number that you're using). It is also possible to not define this and instead set the variable `COMBO_LEN` yourself. There's a trick where we don't need to think about this variable at all. More on this later.
Then, in your `keymap.c` file, you'll need to define a sequence of keys, terminated with `COMBO_END`, and a structure to list the combination of keys, and its resulting action. Then, in your `keymap.c` file, you'll need to define a sequence of keys, terminated with `COMBO_END`, and a structure to list the combination of keys, and its resulting action.
```c ```c
const uint16_t PROGMEM test_combo1[] = {KC_A, KC_B, COMBO_END}; const uint16_t PROGMEM test_combo1[] = {KC_A, KC_B, COMBO_END};
const uint16_t PROGMEM test_combo2[] = {KC_C, KC_D, COMBO_END}; const uint16_t PROGMEM test_combo2[] = {KC_C, KC_D, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
COMBO(test_combo1, KC_ESC), COMBO(test_combo1, KC_ESC),
COMBO(test_combo2, LCTL(KC_Z)), // keycodes with modifiers are possible too! COMBO(test_combo2, LCTL(KC_Z)), // keycodes with modifiers are possible too!
}; };
@ -33,7 +30,7 @@ It is possible to overlap combos. Before, with the example below both combos wou
```c ```c
const uint16_t PROGMEM test_combo1[] = {LSFT_T(KC_A), LT(1, KC_B), COMBO_END}; const uint16_t PROGMEM test_combo1[] = {LSFT_T(KC_A), LT(1, KC_B), COMBO_END};
const uint16_t PROGMEM test_combo2[] = {LSFT_T(KC_A), LT(1, KC_B), KC_C, COMBO_END}; const uint16_t PROGMEM test_combo2[] = {LSFT_T(KC_A), LT(1, KC_B), KC_C, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
COMBO(test_combo1, KC_ESC) COMBO(test_combo1, KC_ESC)
COMBO(test_combo2, KC_TAB) COMBO(test_combo2, KC_TAB)
}; };
@ -41,17 +38,15 @@ combo_t key_combos[COMBO_COUNT] = {
## Examples ## Examples
A long list of combos can be defined in an `enum` list that ends with `COMBO_LENGTH` and you can leave `COMBO_COUNT` undefined: A long list of combos can be defined in an `enum` list:
```c ```c
enum combos { enum combos {
AB_ESC, AB_ESC,
JK_TAB, JK_TAB,
QW_SFT, QW_SFT,
SD_LAYER, SD_LAYER
COMBO_LENGTH
}; };
uint16_t COMBO_LEN = COMBO_LENGTH; // remove the COMBO_COUNT define and use this instead!
const uint16_t PROGMEM ab_combo[] = {KC_A, KC_B, COMBO_END}; const uint16_t PROGMEM ab_combo[] = {KC_A, KC_B, COMBO_END};
const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END}; const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END};
@ -72,9 +67,7 @@ For a more complicated implementation, you can use the `process_combo_event` fun
enum combo_events { enum combo_events {
EM_EMAIL, EM_EMAIL,
BSPC_LSFT_CLEAR, BSPC_LSFT_CLEAR,
COMBO_LENGTH
}; };
uint16_t COMBO_LEN = COMBO_LENGTH; // remove the COMBO_COUNT define and use this instead!
const uint16_t PROGMEM email_combo[] = {KC_E, KC_M, COMBO_END}; const uint16_t PROGMEM email_combo[] = {KC_E, KC_M, COMBO_END};
const uint16_t PROGMEM clear_line_combo[] = {KC_BSPC, KC_LSFT, COMBO_END}; const uint16_t PROGMEM clear_line_combo[] = {KC_BSPC, KC_LSFT, COMBO_END};
@ -259,18 +252,6 @@ bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode
} }
``` ```
### Variable Length Combos
If you leave `COMBO_COUNT` undefined in `config.h`, it allows you to programmatically declare the size of the Combo data structure and avoid updating `COMBO_COUNT`. Instead a variable called `COMBO_LEN` has to be set. It can be set with something similar to the following in `keymap.c`: `uint16_t COMBO_LEN = ARRAY_SIZE(key_combos);` or by adding `COMBO_LENGTH` as the *last* entry in the combo enum and then `uint16_t COMBO_LEN = COMBO_LENGTH;` as such:
```c
enum myCombos {
...,
COMBO_LENGTH
};
uint16_t COMBO_LEN = COMBO_LENGTH;
```
Regardless of the method used to declare `COMBO_LEN`, this also requires to convert the `combo_t key_combos[COMBO_COUNT] = {...};` line to `combo_t key_combos[] = {...};`.
### Combo timer ### Combo timer
Normally, the timer is started on the first key press and then reset on every subsequent key press within the `COMBO_TERM`. Normally, the timer is started on the first key press and then reset on every subsequent key press within the `COMBO_TERM`.
@ -300,10 +281,8 @@ Here's an example where a combo resolves to two modifiers, and on key releases t
```c ```c
enum combos { enum combos {
AB_MODS, AB_MODS
COMBO_LENGTH
}; };
uint16_t COMBO_LEN = COMBO_LENGTH;
const uint16_t PROGMEM ab_combo[] = {KC_A, KC_B, COMBO_END}; const uint16_t PROGMEM ab_combo[] = {KC_A, KC_B, COMBO_END};
@ -415,6 +394,4 @@ SUBS(TH_THE, "the", KC_T, KC_H) // SUBS uses SEND_STRING to output the give
... ...
``` ```
Now, you can update only one place to add or alter combos. You don't even need to remember to update the `COMBO_COUNT` or the `COMBO_LEN` variables at all. Everything is taken care of. Magic!
For small to huge ready made dictionaries of combos, you can check out http://combos.gboards.ca/. For small to huge ready made dictionaries of combos, you can check out http://combos.gboards.ca/.

View File

@ -176,8 +176,6 @@ QMK での全ての利用可能な設定にはデフォルトがあります。
* ワンショットがタイムアウトするまでの時間 * ワンショットがタイムアウトするまでの時間
* `#define ONESHOT_TAP_TOGGLE 2` * `#define ONESHOT_TAP_TOGGLE 2`
* ワンショットトグルが引き起こされるまでのタップ数 * ワンショットトグルが引き起こされるまでのタップ数
* `#define COMBO_COUNT 2`
* [コンボ](ja/feature_combo.md)機能で使っているコンボの数にこれを設定します。
* `#define COMBO_TERM 200` * `#define COMBO_TERM 200`
* コンボキーが検出されるまでの時間。定義されていない場合は、デフォルトは `TAPPING_TERM` です。 * コンボキーが検出されるまでの時間。定義されていない場合は、デフォルトは `TAPPING_TERM` です。
* `#define TAP_CODE_DELAY 100` * `#define TAP_CODE_DELAY 100`

View File

@ -18,7 +18,7 @@
```c ```c
const uint16_t PROGMEM test_combo[] = {KC_A, KC_B, COMBO_END}; const uint16_t PROGMEM test_combo[] = {KC_A, KC_B, COMBO_END};
combo_t key_combos[COMBO_COUNT] = {COMBO(test_combo, KC_ESC)}; combo_t key_combos[] = {COMBO(test_combo, KC_ESC)};
``` ```
これは、A と B のキーを押した場合に、"Escape" を送信します。 これは、A と B のキーを押した場合に、"Escape" を送信します。
@ -38,7 +38,7 @@ enum combos {
const uint16_t PROGMEM ab_combo[] = {KC_A, KC_B, COMBO_END}; const uint16_t PROGMEM ab_combo[] = {KC_A, KC_B, COMBO_END};
const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END}; const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
[AB_ESC] = COMBO(ab_combo, KC_ESC), [AB_ESC] = COMBO(ab_combo, KC_ESC),
[JK_TAB] = COMBO(jk_combo, KC_TAB) [JK_TAB] = COMBO(jk_combo, KC_TAB)
}; };
@ -55,7 +55,7 @@ enum combo_events {
const uint16_t PROGMEM copy_combo[] = {KC_Z, KC_C, COMBO_END}; const uint16_t PROGMEM copy_combo[] = {KC_Z, KC_C, COMBO_END};
const uint16_t PROGMEM paste_combo[] = {KC_X, KC_V, COMBO_END}; const uint16_t PROGMEM paste_combo[] = {KC_X, KC_V, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
[ZC_COPY] = COMBO_ACTION(copy_combo), [ZC_COPY] = COMBO_ACTION(copy_combo),
[XV_PASTE] = COMBO_ACTION(paste_combo), [XV_PASTE] = COMBO_ACTION(paste_combo),
}; };

View File

@ -10,7 +10,6 @@
#ifdef COMBO_ENABLE #ifdef COMBO_ENABLE
#define COMBO_COUNT 9
#define COMBO_TERM 20 #define COMBO_TERM 20
#define COMBO_ONLY_FROM_LAYER 0 #define COMBO_ONLY_FROM_LAYER 0
#endif #endif

View File

@ -73,7 +73,7 @@ const uint16_t PROGMEM ent_combo[] = {HM_K, HM_L, COMBO_END};
const uint16_t PROGMEM tab_combo[] = {HM_F, HM_D, COMBO_END}; const uint16_t PROGMEM tab_combo[] = {HM_F, HM_D, COMBO_END};
const uint16_t PROGMEM esc_combo[] = {HM_D, HM_S, COMBO_END}; const uint16_t PROGMEM esc_combo[] = {HM_D, HM_S, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
COMBO(ae_combo, RALT(KC_Q)), COMBO(ae_combo, RALT(KC_Q)),
COMBO(ss_combo, RALT(KC_S)), COMBO(ss_combo, RALT(KC_S)),
COMBO(ue_combo, RALT(KC_Y)), COMBO(ue_combo, RALT(KC_Y)),
@ -298,7 +298,3 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[_NUMBERS] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, [_NUMBERS] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[_FUNCTION] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) } [_FUNCTION] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
}; };

View File

@ -19,16 +19,14 @@
#define CB(name, action, ...) C_##name, #define CB(name, action, ...) C_##name,
enum user_combos { enum user_combos {
#include "combos.def" #include "combos.def"
COMBO_LENGTH
}; };
#undef CB #undef CB
uint16_t COMBO_LEN = COMBO_LENGTH;
#define CB(name, action, ...) const uint16_t PROGMEM name##_combo[] = {__VA_ARGS__, COMBO_END}; #define CB(name, action, ...) const uint16_t PROGMEM name##_combo[] = {__VA_ARGS__, COMBO_END};
#include "combos.def" #include "combos.def"
#undef CB #undef CB
combo_t key_combos[COMBO_LENGTH] = { combo_t key_combos[] = {
#define CB(name, action, ...) COMBO(name##_combo, action), #define CB(name, action, ...) COMBO(name##_combo, action),
#include "combos.def" #include "combos.def"
#undef CB #undef CB

View File

@ -37,8 +37,6 @@
// how long before oneshot times out // how long before oneshot times out
#define ONESHOT_TAP_TOGGLE 2 #define ONESHOT_TAP_TOGGLE 2
// how many taps before oneshot toggle is triggered // how many taps before oneshot toggle is triggered
#define COMBO_COUNT 2
// Set this to the number of combos that you're using in the Combo feature.
#define COMBO_TERM 200 #define COMBO_TERM 200
// how long for the Combo keys to be detected. Defaults to TAPPING_TERM if not defined. // how long for the Combo keys to be detected. Defaults to TAPPING_TERM if not defined.
#define TAP_CODE_DELAY 100 #define TAP_CODE_DELAY 100

View File

@ -19,7 +19,5 @@
#define RETRO_TAPPING_PER_KEY #define RETRO_TAPPING_PER_KEY
#define TAPPING_TERM_PER_KEY #define TAPPING_TERM_PER_KEY
#define COMBO_COUNT 2 // number of combos used
#define COMBO_TERM 40 // time out for combos in ms #define COMBO_TERM 40 // time out for combos in ms
#define TAPPING_TERM 200 // time out for tap-hold in ms #define TAPPING_TERM 200 // time out for tap-hold in ms

View File

@ -99,14 +99,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
) )
}; };
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
COMBO(df_tab, KC_TAB), COMBO(df_tab, KC_TAB),
COMBO(jk_alt, KC_LALT), COMBO(jk_alt, KC_LALT),
}; };
layer_state_t layer_state_set_user(layer_state_t state) { layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
} }
uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
switch (keycode) { switch (keycode) {

View File

@ -20,5 +20,4 @@
/* Add combos */ /* Add combos */
#define COMBO_COUNT 1
#define COMBO_TERM 200 #define COMBO_TERM 200

View File

@ -32,7 +32,7 @@ enum combo_events {
const uint16_t PROGMEM reset_combo[] = {KC_LCTL, KC_PAUS, COMBO_END}; const uint16_t PROGMEM reset_combo[] = {KC_LCTL, KC_PAUS, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
[CTRL_PAUS_RESET] = COMBO_ACTION(reset_combo), [CTRL_PAUS_RESET] = COMBO_ACTION(reset_combo),
}; };
@ -44,4 +44,4 @@ void process_combo_event(uint16_t combo_index, bool pressed) {
} }
break; break;
} }
} }

View File

@ -21,8 +21,6 @@
#define BACKLIGHT_LIMIT_VAL 255 #define BACKLIGHT_LIMIT_VAL 255
#define BACKLIGHT_DEFAULT_LEVEL 3 #define BACKLIGHT_DEFAULT_LEVEL 3
#define COMBO_COUNT 3
#define UNICODE_SELECTED_MODES UNICODE_MODE_WINCOMPOSE, UNICODE_MODE_WINDOWS, UNICODE_MODE_MACOS, UNICODE_MODE_LINUX #define UNICODE_SELECTED_MODES UNICODE_MODE_WINCOMPOSE, UNICODE_MODE_WINDOWS, UNICODE_MODE_MACOS, UNICODE_MODE_LINUX
#define QUICK_TAP_TERM 0 #define QUICK_TAP_TERM 0

View File

@ -65,7 +65,7 @@ const uint16_t PROGMEM copy_combo[] = {KC_Z, KC_C, COMBO_END};
const uint16_t PROGMEM paste_combo[] = {KC_X, KC_V, COMBO_END}; const uint16_t PROGMEM paste_combo[] = {KC_X, KC_V, COMBO_END};
const uint16_t PROGMEM cut_combo[] = {KC_Z, KC_X, COMBO_END}; const uint16_t PROGMEM cut_combo[] = {KC_Z, KC_X, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
[ZC_COPY] = COMBO_ACTION(copy_combo), [ZC_COPY] = COMBO_ACTION(copy_combo),
[XV_PASTE] = COMBO_ACTION(paste_combo), [XV_PASTE] = COMBO_ACTION(paste_combo),
[ZX_CUT] = COMBO_ACTION(cut_combo), [ZX_CUT] = COMBO_ACTION(cut_combo),

View File

@ -15,4 +15,3 @@
*/ */
#pragma once #pragma once
#define ONESHOT_TIMEOUT 1000 #define ONESHOT_TIMEOUT 1000
#define COMBO_COUNT 2

View File

@ -33,7 +33,7 @@ enum combos {
}; };
const uint16_t PROGMEM accent_combo[] = {KC_SPC, MO(_SYM1), COMBO_END}; const uint16_t PROGMEM accent_combo[] = {KC_SPC, MO(_SYM1), COMBO_END};
const uint16_t PROGMEM settings_combo[] = {MO(_EXT), SFT_T(KC_SPC), COMBO_END}; const uint16_t PROGMEM settings_combo[] = {MO(_EXT), SFT_T(KC_SPC), COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
[ACC] = COMBO(accent_combo, MO(_ACC)), [ACC] = COMBO(accent_combo, MO(_ACC)),
[SET] = COMBO(settings_combo, MO(_SET)), [SET] = COMBO(settings_combo, MO(_SET)),
}; };
@ -78,37 +78,37 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_EXT] = LAYOUT_split_3x5_3( [_EXT] = LAYOUT_split_3x5_3(
KC_ESC, _______, _______, _______, _______, KC_PAGE_UP, KC_HOME, KC_UP, KC_END, KC_CAPS, KC_ESC, _______, _______, _______, _______, KC_PAGE_UP, KC_HOME, KC_UP, KC_END, KC_CAPS,
OS_ALT, OS_GUI, OS_SFT, OS_CTL, OS_RALT, KC_PAGE_DOWN, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DELETE, OS_ALT, OS_GUI, OS_SFT, OS_CTL, OS_RALT, KC_PAGE_DOWN, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DELETE,
UNDO, CUT, COPY, KC_TAB, PASTE, DEL_WORD, KC_BSPC, _______, _______, _______, UNDO, CUT, COPY, KC_TAB, PASTE, DEL_WORD, KC_BSPC, _______, _______, _______,
_______, _______, _______, KC_ENT, FNC, _______ _______, _______, _______, KC_ENT, FNC, _______
), ),
[_FNC] = LAYOUT_split_3x5_3( [_FNC] = LAYOUT_split_3x5_3(
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
OS_ALT, OS_GUI, OS_SFT, OS_CTL, OS_RALT, KC_F11, KC_F12, KC_PSCR, _______, _______, OS_ALT, OS_GUI, OS_SFT, OS_CTL, OS_RALT, KC_F11, KC_F12, KC_PSCR, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______
), ),
[_SYM2] = LAYOUT_split_3x5_3( [_SYM2] = LAYOUT_split_3x5_3(
IT_CIRC, IT_UNDS, IT_PND, IT_EURO, IT_HASH, _______, _______, _______, _______, _______, IT_CIRC, IT_UNDS, IT_PND, IT_EURO, IT_HASH, _______, _______, _______, _______, _______,
BACKTICK, TILDE, IT_BSLS, IT_PIPE, IT_AMPR, _______, _______, _______, _______, _______, BACKTICK, TILDE, IT_BSLS, IT_PIPE, IT_AMPR, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______
), ),
[_ACC] = LAYOUT_split_3x5_3( [_ACC] = LAYOUT_split_3x5_3(
_______, _______, _______, CEGR, _______, _______, _______, _______, _______, _______, _______, _______, _______, CEGR, _______, _______, _______, _______, _______, _______,
IT_AGRV, IT_IGRV, IT_OGRV, IT_EGRV, IT_EACU, _______, _______, _______, _______, _______, IT_AGRV, IT_IGRV, IT_OGRV, IT_EGRV, IT_EACU, _______, _______, _______, _______, _______,
_______, _______, _______, IT_UGRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, IT_UGRV, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______
), ),
[_SET] = LAYOUT_split_3x5_3( [_SET] = LAYOUT_split_3x5_3(
_______, _______, _______, RGB_RMOD, RGB_MOD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, RGB_RMOD, RGB_MOD, RGB_VAI, RGB_VAD, _______, _______, _______,
_______, _______, _______, RGB_M_B, RGB_M_P, RGB_HUI, RGB_HUD, _______, _______, _______, _______, _______, _______, RGB_M_B, RGB_M_P, RGB_HUI, RGB_HUD, _______, _______, _______,
QK_BOOT, _______, _______, RGB_M_R, RGB_TOG, RGB_SAI, RGB_SAD, _______, _______, QK_BOOT, QK_BOOT, _______, _______, RGB_M_R, RGB_TOG, RGB_SAI, RGB_SAD, _______, _______, QK_BOOT,
_______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______
), ),
// [_TEMP] = LAYOUT_split_3x5_3( // [_TEMP] = LAYOUT_split_3x5_3(
// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, // _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, // _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, // _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
// _______, _______, _______, _______, _______, _______ // _______, _______, _______, _______, _______, _______
// ), // ),
}; };

View File

@ -17,7 +17,6 @@
#pragma once #pragma once
#ifdef COMBO_ENABLE #ifdef COMBO_ENABLE
# define COMBO_COUNT 10
# define COMBO_TERM 50 # define COMBO_TERM 50
#endif #endif

View File

@ -20,7 +20,7 @@
// Each layer gets a name for readability, which is then used in the keymap matrix below. // Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name. // The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them // Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers. // entirely and just use numbers.
enum centromere_layers enum centromere_layers
@ -57,7 +57,7 @@ enum centromere_layers
* | | | | | | | | * | | | | | | | |
* '-------------------------' '-----------------' * '-------------------------' '-----------------'
*/ */
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer /* Keymap 0: Basic layer
@ -97,7 +97,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_NO, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_GRV, KC_TILD, KC_TRNS, KC_TRNS, KC_BSLS, KC_NO, KC_NO, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_GRV, KC_TILD, KC_TRNS, KC_TRNS, KC_BSLS, KC_NO,
KC_NO, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_BTN2, KC_PLUS, KC_MINS, KC_SLSH, KC_ASTR, KC_QUOT, KC_NO, KC_NO, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_BTN2, KC_PLUS, KC_MINS, KC_SLSH, KC_ASTR, KC_QUOT, KC_NO,
KC_NO, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_BTN1, KC_AMPR, KC_EQL, KC_COMM, KC_DOT, KC_MINS, KC_NO, KC_NO, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_BTN1, KC_AMPR, KC_EQL, KC_COMM, KC_DOT, KC_MINS, KC_NO,
CM_TOGG, KC_SCLN, KC_EQL, KC_EQL, KC_SCLN, KC_DEL CM_TOGG, KC_SCLN, KC_EQL, KC_EQL, KC_SCLN, KC_DEL
), ),
/* Keymap 2: Pad/Function layer /* Keymap 2: Pad/Function layer
@ -115,7 +115,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_NUMB] = LAYOUT( [_NUMB] = LAYOUT(
KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NO, KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NO,
KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_VOLU, KC_NO, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_VOLU, KC_NO,
KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_VOLD, KC_NO, KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_VOLD, KC_NO,
KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT
), ),
@ -137,8 +137,8 @@ const uint16_t PROGMEM combo_less[] = {KC_H, KC_J, COMBO_END};
const uint16_t PROGMEM combo_more[] = {KC_K, KC_L, COMBO_END}; const uint16_t PROGMEM combo_more[] = {KC_K, KC_L, COMBO_END};
const uint16_t PROGMEM combo_quot[] = {KC_N, KC_M, COMBO_END}; const uint16_t PROGMEM combo_quot[] = {KC_N, KC_M, COMBO_END};
const uint16_t PROGMEM combo_dash[] = {KC_X, KC_C, COMBO_END}; const uint16_t PROGMEM combo_dash[] = {KC_X, KC_C, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
[COMBO_BSPC] = COMBO(combo_bspc,KC_BSPC), [COMBO_BSPC] = COMBO(combo_bspc,KC_BSPC),
[COMBO_TAB] = COMBO(combo_tab,KC_TAB), [COMBO_TAB] = COMBO(combo_tab,KC_TAB),
[COMBO_ESC] = COMBO(combo_esc,KC_ESC), [COMBO_ESC] = COMBO(combo_esc,KC_ESC),
@ -148,6 +148,6 @@ combo_t key_combos[COMBO_COUNT] = {
[COMBO_LESS] = COMBO(combo_less,KC_LT), [COMBO_LESS] = COMBO(combo_less,KC_LT),
[COMBO_MORE] = COMBO(combo_more,KC_GT), [COMBO_MORE] = COMBO(combo_more,KC_GT),
[COMBO_QUOT] = COMBO(combo_quot, KC_QUOT), [COMBO_QUOT] = COMBO(combo_quot, KC_QUOT),
[COMBO_DASH] = COMBO(combo_dash, KC_MINS), [COMBO_DASH] = COMBO(combo_dash, KC_MINS),
}; };
#endif #endif

View File

@ -21,5 +21,3 @@ const uint16_t PROGMEM bootloader_combo[] = {
combo_t key_combos[] = { combo_t key_combos[] = {
COMBO(bootloader_combo, QK_BOOTLOADER), COMBO(bootloader_combo, QK_BOOTLOADER),
}; };
uint16_t COMBO_LEN = sizeof(key_combos) / sizeof(key_combos[0]);

View File

@ -27,7 +27,7 @@ const uint16_t PROGMEM sd_combo[] = {KC_S, KC_D, COMBO_END}; // Combo: S + D fo
const uint16_t PROGMEM kl_combo[] = {KC_K, KC_L, COMBO_END}; // Combo: K + L for Meh modifier const uint16_t PROGMEM kl_combo[] = {KC_K, KC_L, COMBO_END}; // Combo: K + L for Meh modifier
// Register the combo action // Register the combo action
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
[SD_LAYER_COMBO] = COMBO_ACTION(sd_combo), [SD_LAYER_COMBO] = COMBO_ACTION(sd_combo),
[KL_MEH_COMBO] = COMBO_ACTION(kl_combo), [KL_MEH_COMBO] = COMBO_ACTION(kl_combo),
}; };

View File

@ -20,5 +20,4 @@
#define HOLD_ON_OTHER_KEY_PRESS_PER_KEY // Allows configuration of hold on other key press per key in keymap.c #define HOLD_ON_OTHER_KEY_PRESS_PER_KEY // Allows configuration of hold on other key press per key in keymap.c
#define COMBO_COUNT 2 // Number of defined combos
#define COMBO_TERM 20 // Delay for combo keys to be chained together #define COMBO_TERM 20 // Delay for combo keys to be chained together

View File

@ -24,7 +24,6 @@
#define TAPPING_TERM 100 #define TAPPING_TERM 100
#define COMBO_TERM 20 #define COMBO_TERM 20
#define COMBO_COUNT 1
#define PERMISSIVE_HOLD #define PERMISSIVE_HOLD

View File

@ -165,11 +165,8 @@ enum combo_events {
DELQ_COMBO, DELQ_COMBO,
SAVEQ_COMBO, SAVEQ_COMBO,
BSPCQ_COMBO, BSPCQ_COMBO,
BSPCWQ_COMBO, BSPCWQ_COMBO
COMBO_LENGTH
}; };
uint16_t COMBO_LEN = COMBO_LENGTH;
const uint16_t PROGMEM ru_combo[] = {KC_R, U_CTRL, COMBO_END}; const uint16_t PROGMEM ru_combo[] = {KC_R, U_CTRL, COMBO_END};
const uint16_t PROGMEM en_combo[] = {U_CTRL, S_ALT, COMBO_END}; const uint16_t PROGMEM en_combo[] = {U_CTRL, S_ALT, COMBO_END};
@ -216,7 +213,7 @@ combo_t key_combos[] = {
[SAVEQ_COMBO] = COMBO(saveq_combo, VIM_SAVE), [SAVEQ_COMBO] = COMBO(saveq_combo, VIM_SAVE),
[BSPCWQ_COMBO] = COMBO(bspcwq_combo, DELETE_WORD), [BSPCWQ_COMBO] = COMBO(bspcwq_combo, DELETE_WORD),
}; };
#ifdef OLED_ENABLE #ifdef OLED_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) { oled_rotation_t oled_init_user(oled_rotation_t rotation) {
@ -398,4 +395,3 @@ void matrix_scan_user(void) {
#include "mod_tap_keys.h" #include "mod_tap_keys.h"
#undef MOD_TAP_KEY #undef MOD_TAP_KEY
} }

View File

@ -30,7 +30,7 @@ enum layers {
// One shot mods // One shot mods
enum keycodes { enum keycodes {
OS_SHFT = QK_USER, OS_SHFT = QK_USER,
OS_CTRL, OS_CTRL,
OS_ALT, OS_ALT,
OS_GUI, OS_GUI,
@ -159,11 +159,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
}; };
enum combo_events { enum combo_events {
CAPS_COMBO, CAPS_COMBO
// Other combos...
COMBO_LENGTH
}; };
uint16_t COMBO_LEN = COMBO_LENGTH;
const uint16_t PROGMEM caps_combo[] = {KC_F, KC_J, COMBO_END}; const uint16_t PROGMEM caps_combo[] = {KC_F, KC_J, COMBO_END};

View File

@ -43,11 +43,9 @@ This is the C configuration file for the keymap
#define QMK_SPEAKER C6 #define QMK_SPEAKER C6
// When enabled, typing a mod-tap plus second within term will register as the mod-combo // When enabled, typing a mod-tap plus second within term will register as the mod-combo
// Ref: https://beta.docs.qmk.fm/using-qmk/software-features/tap_hold#permissive-hold // Ref: https://beta.docs.qmk.fm/using-qmk/software-features/tap_hold#permissive-hold
#define PERMISSIVE_HOLD #define PERMISSIVE_HOLD
#define COMBO_COUNT 2
// Set the COMBO_TERM so low that I won't type the keys one after each other during normal typing. // Set the COMBO_TERM so low that I won't type the keys one after each other during normal typing.
// They would have be held together intentionally to trigger this. // They would have be held together intentionally to trigger this.
#define COMBO_TERM 40 #define COMBO_TERM 40
@ -56,4 +54,3 @@ This is the C configuration file for the keymap
// I want a relatively low timeout, so if I accidentally type "Shift", I can pause just briefly and move on. // I want a relatively low timeout, so if I accidentally type "Shift", I can pause just briefly and move on.
#define ONESHOT_TAP_TOGGLE 3 /* Tapping this number of times holds the key until tapped once again. */ #define ONESHOT_TAP_TOGGLE 3 /* Tapping this number of times holds the key until tapped once again. */
#define ONESHOT_TIMEOUT 2000 /* Time (in ms) before the one shot key is released */ #define ONESHOT_TIMEOUT 2000 /* Time (in ms) before the one shot key is released */

View File

@ -18,7 +18,7 @@ enum combos {
const uint16_t PROGMEM df_combo[] = {KC_D, KC_F, COMBO_END}; const uint16_t PROGMEM df_combo[] = {KC_D, KC_F, COMBO_END};
const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END}; const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
// Add commonly used dash to home row // Add commonly used dash to home row
[DF_DASH] = COMBO(df_combo, KC_MINS), [DF_DASH] = COMBO(df_combo, KC_MINS),
// For Vim, put Escape on the home row // For Vim, put Escape on the home row
@ -43,7 +43,7 @@ enum custom_layers {
#define GUI_ENT GUI_T(KC_ENT) #define GUI_ENT GUI_T(KC_ENT)
#define LOW_TAB LT(_LOWER, KC_TAB) #define LOW_TAB LT(_LOWER, KC_TAB)
#define RSE_BSP LT(_RAISE, KC_BSPC) #define RSE_BSP LT(_RAISE, KC_BSPC)
#define OSM_SFT OSM(MOD_LSFT) #define OSM_SFT OSM(MOD_LSFT)
// For _RAISE layer // For _RAISE layer

View File

@ -15,7 +15,6 @@
// combo // combo
#define COMBO_COUNT 7
#define EXTRA_SHORT_COMBOS #define EXTRA_SHORT_COMBOS
//Tapping values //Tapping values
@ -68,7 +67,7 @@
// NOTE: the below effects are super cool but they go absolutely nuts if you manually set hsv colors (eg with layers) // NOTE: the below effects are super cool but they go absolutely nuts if you manually set hsv colors (eg with layers)
//#define ENABLE_RGB_MATRIX_TYPING_HEATMAP //#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
//#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH //#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
//#define ENABLE_RGB_MATRIX_SOLID_REACTIVE //#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
#endif #endif

View File

@ -20,7 +20,7 @@ enum custom_key_codes {
MOVE_END_LINE_TERMINAL, // move to the end of the line in the terminal MOVE_END_LINE_TERMINAL, // move to the end of the line in the terminal
/* macros */ /* macros */
PASTE_VIM, // paste in vim from system register PASTE_VIM, // paste in vim from system register
ACIRCLE, // å ACIRCLE, // å
ADOT, // ä ADOT, // ä
ODOT, // ö ODOT, // ö
COMPOSE_MACRO, // compose key for mac or linux COMPOSE_MACRO, // compose key for mac or linux
@ -44,7 +44,7 @@ enum {
#define SHOW_WINDOWS LCTL(KC_UP) //'Expose' on Mac, overview on linux. Just all the windows #define SHOW_WINDOWS LCTL(KC_UP) //'Expose' on Mac, overview on linux. Just all the windows
#define WINDOW_LEFT LCTL(LGUI(LSFT(KC_LEFT))) //custom shortcut for this feature -- make window take up 50% left screen (using gui and ctl to make it os agnostic) #define WINDOW_LEFT LCTL(LGUI(LSFT(KC_LEFT))) //custom shortcut for this feature -- make window take up 50% left screen (using gui and ctl to make it os agnostic)
#define WINDOW_RIGHT LCTL(LGUI(LSFT(KC_RIGHT))) //custom shortcut for this feature -- make window take up 50% right screen (using gui and ctl to make it os agnostic)/fully custom shortcut, using ctl and gui keys so will need them both irrespective of os #define WINDOW_RIGHT LCTL(LGUI(LSFT(KC_RIGHT))) //custom shortcut for this feature -- make window take up 50% right screen (using gui and ctl to make it os agnostic)/fully custom shortcut, using ctl and gui keys so will need them both irrespective of os
#define SHOW_APP_WINDOWS LCTL(KC_DOWN) #define SHOW_APP_WINDOWS LCTL(KC_DOWN)
#define LOCK_SCREEN LCTL(LGUI(KC_Q)) //manually set this on linux to match osx default #define LOCK_SCREEN LCTL(LGUI(KC_Q)) //manually set this on linux to match osx default
#define EURO LALT(LSFT(KC_2)) #define EURO LALT(LSFT(KC_2))
#define EMOJI_KBD LCTL(LGUI(KC_SPACE)) //manually set this on linux to match osx default, with 'emote' on linux and a custom shortcut (probably better to use compose feature) #define EMOJI_KBD LCTL(LGUI(KC_SPACE)) //manually set this on linux to match osx default, with 'emote' on linux and a custom shortcut (probably better to use compose feature)
@ -86,7 +86,7 @@ const uint16_t PROGMEM adot_combo[] = {KC_BSPC, KC_SPACE, MT(MOD_RALT,KC_L), COM
// combo - press combo+ ; to get ö // combo - press combo+ ; to get ö
const uint16_t PROGMEM odot_combo[] = {KC_BSPC, KC_SPACE, MT(MOD_LCTL,KC_SCLN),COMBO_END}; const uint16_t PROGMEM odot_combo[] = {KC_BSPC, KC_SPACE, MT(MOD_LCTL,KC_SCLN),COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
COMBO(compose_combo, COMPOSE_MACRO), COMBO(compose_combo, COMPOSE_MACRO),
COMBO(search_combo, FINDER), COMBO(search_combo, FINDER),
COMBO(calculator_combo, CALCULATOR), COMBO(calculator_combo, CALCULATOR),
@ -113,7 +113,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_NUMS] = LAYOUT_split_3x6_3( //numbers [_NUMS] = LAYOUT_split_3x6_3( //numbers
//,-----------------------------------------------------. ,-----------------------------------------------------. //,-----------------------------------------------------. ,-----------------------------------------------------.
SCREENSHOT, KC_EXCLAIM,KC_AT, KC_HASH, KC_DOLLAR,KC_PERCENT, KC_CIRCUMFLEX, KC_7, KC_8, KC_9, KC_TRANSPARENT, KC_PIPE, SCREENSHOT, KC_EXCLAIM,KC_AT, KC_HASH, KC_DOLLAR,KC_PERCENT, KC_CIRCUMFLEX, KC_7, KC_8, KC_9, KC_TRANSPARENT, KC_PIPE,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
TO(_BASE), KC_LCTL, KC_LALT, KC_RSFT, KC_LGUI,KC_PLUS, KC_EQL, KC_4, KC_5, KC_6, KC_BSLS, KC_TRANSPARENT, TO(_BASE), KC_LCTL, KC_LALT, KC_RSFT, KC_LGUI,KC_PLUS, KC_EQL, KC_4, KC_5, KC_6, KC_BSLS, KC_TRANSPARENT,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
@ -125,7 +125,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_NUM_MASK] = LAYOUT_split_3x6_3( //NUM MASK, so I can still have backspace/enter/tab etc but with the nums, arrows and formatters too [_NUM_MASK] = LAYOUT_split_3x6_3( //NUM MASK, so I can still have backspace/enter/tab etc but with the nums, arrows and formatters too
//,-----------------------------------------------------. ,-----------------------------------------------------. //,-----------------------------------------------------. ,-----------------------------------------------------.
KC_TRANSPARENT, KC_TRANSPARENT,KC_TRANSPARENT, KC_UP, KC_TRANSPARENT,KC_TRANSPARENT, KC_TRANSPARENT, KC_7, KC_8, KC_9, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,KC_TRANSPARENT, KC_UP, KC_TRANSPARENT,KC_TRANSPARENT, KC_TRANSPARENT, KC_7, KC_8, KC_9, KC_TRANSPARENT, KC_TRANSPARENT,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
TO(_BASE), KC_TRANSPARENT, KC_LEFT, KC_DOWN, KC_RIGHT,KC_TRANSPARENT, KC_TRANSPARENT, KC_4, KC_5, KC_6, KC_TRANSPARENT, KC_TRANSPARENT, TO(_BASE), KC_TRANSPARENT, KC_LEFT, KC_DOWN, KC_RIGHT,KC_TRANSPARENT, KC_TRANSPARENT, KC_4, KC_5, KC_6, KC_TRANSPARENT, KC_TRANSPARENT,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
@ -164,7 +164,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_FN_KEYS] = LAYOUT_split_3x6_3( //fn keys, terminal text navigation keys [_FN_KEYS] = LAYOUT_split_3x6_3( //fn keys, terminal text navigation keys
//,-----------------------------------------------------. ,-----------------------------------------------------. //,-----------------------------------------------------. ,-----------------------------------------------------.
KC_TRANSPARENT, KC_LCBR,KC_LBRC, KC_RBRC, KC_RCBR, MOVE_BEGIN_LINE_TERMINAL, MOVE_END_LINE_TERMINAL, KC_F7, KC_F8, KC_F9, KC_F11, KC_TRANSPARENT, KC_TRANSPARENT, KC_LCBR,KC_LBRC, KC_RBRC, KC_RCBR, MOVE_BEGIN_LINE_TERMINAL, MOVE_END_LINE_TERMINAL, KC_F7, KC_F8, KC_F9, KC_F11, KC_TRANSPARENT,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
TO(_BASE), KC_LCTL, KC_LALT, KC_RSFT, KC_LGUI, KC_TRANSPARENT, KC_TRANSPARENT, KC_F4, KC_F5, KC_F6, KC_F12, KC_TRANSPARENT, TO(_BASE), KC_LCTL, KC_LALT, KC_RSFT, KC_LGUI, KC_TRANSPARENT, KC_TRANSPARENT, KC_F4, KC_F5, KC_F6, KC_F12, KC_TRANSPARENT,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
@ -173,7 +173,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT , KC_HASH , KC_TRANSPARENT, KC_F10 KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT , KC_HASH , KC_TRANSPARENT, KC_F10
//`--------------------------' `--------------------------' //`--------------------------' `--------------------------'
) )
}; };
bool process_record_user(uint16_t keycode, keyrecord_t *record) { bool process_record_user(uint16_t keycode, keyrecord_t *record) {
@ -183,19 +183,19 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
// as of this writing, you can't do a layer tap (LT) // as of this writing, you can't do a layer tap (LT)
// and also send a shifted code, like left parens // and also send a shifted code, like left parens
// If you call such a function, it'll do the layer shift but // If you call such a function, it'll do the layer shift but
// it'll ignore the key code on tap... this is the workaround // it'll ignore the key code on tap... this is the workaround
case LT(_NUMS,KC_LPRN): // Shift to _NUMS layer on hold, but send left paren on press case LT(_NUMS,KC_LPRN): // Shift to _NUMS layer on hold, but send left paren on press
if (record->tap.count && record->event.pressed) { if (record->tap.count && record->event.pressed) {
tap_code16(KC_LPRN); tap_code16(KC_LPRN);
return false; return false;
} }
break; break;
case LT(_NUMS,KC_RPRN): // Shift to _NUMS on hold, send right parens on press case LT(_NUMS,KC_RPRN): // Shift to _NUMS on hold, send right parens on press
if (record->tap.count && record->event.pressed) { if (record->tap.count && record->event.pressed) {
tap_code16(KC_RPRN); tap_code16(KC_RPRN);
return false; return false;
} }
break; break;
@ -203,20 +203,20 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->tap.count && record->event.pressed) { if (record->tap.count && record->event.pressed) {
tap_code16(SHOW_WINDOWS); // Intercept tap function tap_code16(SHOW_WINDOWS); // Intercept tap function
} else if (record->event.pressed) { } else if (record->event.pressed) {
tap_code16(WINDOW_LEFT); // Intercept hold function tap_code16(WINDOW_LEFT); // Intercept hold function
} }
return false; return false;
break; break;
case LT(0, NUMERIC_WIN_RIGHT): case LT(0, NUMERIC_WIN_RIGHT):
if (record->tap.count && record->event.pressed) { if (record->tap.count && record->event.pressed) {
layer_on(_NUM_MASK);// Intercept tap function layer_on(_NUM_MASK);// Intercept tap function
} else if (record->event.pressed) { } else if (record->event.pressed) {
tap_code16(WINDOW_RIGHT); // Intercept hold function tap_code16(WINDOW_RIGHT); // Intercept hold function
} }
return false; return false;
break; break;
case PASTE_VIM: case PASTE_VIM:
if (record->event.pressed){ if (record->event.pressed){
SEND_STRING(SS_TAP(X_ESCAPE)"\"+pi"); SEND_STRING(SS_TAP(X_ESCAPE)"\"+pi");
@ -225,7 +225,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
break; break;
//only read the keymap config if it's one of the below cases (instead of every time) //only read the keymap config if it's one of the below cases (instead of every time)
case DEL_WORD: case DEL_WORD:
case SELECT_LEFT_WD: case SELECT_LEFT_WD:
case SELECT_RIGHT_WD: case SELECT_RIGHT_WD:
case SELECT_LEFT_LINE: case SELECT_LEFT_LINE:
@ -235,7 +235,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case MOVE_LEFT_LINE: case MOVE_LEFT_LINE:
case MOVE_RIGHT_LINE: case MOVE_RIGHT_LINE:
case PASTE_NOSTYLE: case PASTE_NOSTYLE:
case MOVE_BEGIN_LINE_TERMINAL: case MOVE_BEGIN_LINE_TERMINAL:
case MOVE_END_LINE_TERMINAL: case MOVE_END_LINE_TERMINAL:
case ACIRCLE: case ACIRCLE:
case ADOT: case ADOT:
@ -313,28 +313,28 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if(keymap_config.swap_lctl_lgui){ //Linux if(keymap_config.swap_lctl_lgui){ //Linux
tap_code16(LCTL(RSFT(KC_V))); tap_code16(LCTL(RSFT(KC_V)));
} else { //osx } else { //osx
tap_code16(LGUI(LALT(LSFT(KC_V)))); tap_code16(LGUI(LALT(LSFT(KC_V))));
} }
break; break;
case MOVE_BEGIN_LINE_TERMINAL: case MOVE_BEGIN_LINE_TERMINAL:
if(keymap_config.swap_lctl_lgui){ //Linux if(keymap_config.swap_lctl_lgui){ //Linux
tap_code16(KC_HOME); tap_code16(KC_HOME);
} else { //osx } else { //osx
tap_code16(LSFT(KC_HOME)); tap_code16(LSFT(KC_HOME));
} }
break; break;
case MOVE_END_LINE_TERMINAL: case MOVE_END_LINE_TERMINAL:
if(keymap_config.swap_lctl_lgui){ //Linux if(keymap_config.swap_lctl_lgui){ //Linux
tap_code16(KC_END); tap_code16(KC_END);
} else { //osx } else { //osx
tap_code16(LSFT(KC_END)); tap_code16(LSFT(KC_END));
} }
break; break;
case ACIRCLE: // å case ACIRCLE: // å
if(keymap_config.swap_lctl_lgui){ //Linux if(keymap_config.swap_lctl_lgui){ //Linux
SEND_STRING(SS_TAP(X_COMPOSE_KEY)"aa"); SEND_STRING(SS_TAP(X_COMPOSE_KEY)"aa");
} else { //osx } else { //osx
tap_code16(LALT(KC_A)); tap_code16(LALT(KC_A));
} }
break; break;
case ADOT: // ä case ADOT: // ä
@ -351,14 +351,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
SEND_STRING(SS_LALT("u")"o"); SEND_STRING(SS_LALT("u")"o");
} }
break; break;
case COMPOSE_MACRO: case COMPOSE_MACRO:
if(keymap_config.swap_lctl_lgui){ //Linux if(keymap_config.swap_lctl_lgui){ //Linux
tap_code16(COMPOSE_KEY); tap_code16(COMPOSE_KEY);
} else { //osx } else { //osx
tap_code16(COMPOSE_MAC); tap_code16(COMPOSE_MAC);
} }
break; break;
case SCREENSHOT: case SCREENSHOT:
if(keymap_config.swap_lctl_lgui){ //Linux if(keymap_config.swap_lctl_lgui){ //Linux
tap_code16(KC_PSCR); tap_code16(KC_PSCR);
} else { //osx } else { //osx
@ -381,7 +381,7 @@ void dance_left_finished (tap_dance_state_t *state, void *user_data) {
if(keymap_config.swap_lctl_lgui){ //Linux if(keymap_config.swap_lctl_lgui){ //Linux
tap_code16(KC_HOME); tap_code16(KC_HOME);
} else { //osx } else { //osx
tap_code16(LGUI(KC_LEFT)); tap_code16(LGUI(KC_LEFT));
} }
} else { //2 taps, make a circumflex } else { //2 taps, make a circumflex
tap_code16(KC_CIRC); tap_code16(KC_CIRC);
@ -394,7 +394,7 @@ void dance_right_finished (tap_dance_state_t *state, void *user_data) {
if(keymap_config.swap_lctl_lgui){ //Linux if(keymap_config.swap_lctl_lgui){ //Linux
tap_code16(KC_END); tap_code16(KC_END);
} else { //osx } else { //osx
tap_code16(LGUI(KC_RIGHT)); tap_code16(LGUI(KC_RIGHT));
} }
} else { //2 taps, dollar } else { //2 taps, dollar
tap_code16(KC_DOLLAR); tap_code16(KC_DOLLAR);
@ -429,7 +429,7 @@ void set_lighting_user(void) {
led_t led_state = host_keyboard_led_state(); led_t led_state = host_keyboard_led_state();
if(led_state.caps_lock){ if(led_state.caps_lock){
rgblight_sethsv_noeeprom(HSV_RED); rgblight_sethsv_noeeprom(HSV_RED);
} }
//rgblight_sethsv(HSV_OFF); //rgblight_sethsv(HSV_OFF);
break; break;
case _NUMS: case _NUMS:
@ -482,7 +482,7 @@ void oled_render_general_state(void){
else { else {
oled_write_ln_P(PSTR("OSX"), false); oled_write_ln_P(PSTR("OSX"), false);
} }
//oled_write_ln(get_u8_str(get_current_wpm(), '0'), false); //oled_write_ln(get_u8_str(get_current_wpm(), '0'), false);
/* /*
led_t led_state = host_keyboard_led_state(); led_t led_state = host_keyboard_led_state();
@ -492,7 +492,7 @@ void oled_render_general_state(void){
//Layer color has to be handled by master //Layer color has to be handled by master
// led state doesn't have to be handled by master, but // led state doesn't have to be handled by master, but
// the keyboard will freeze if you type too fast // the keyboard will freeze if you type too fast
// and have this handled on the slave side // and have this handled on the slave side
@ -541,7 +541,7 @@ void oled_render_layer_mod_state(void) {
break; break;
case _FN_KEYS: case _FN_KEYS:
oled_write_ln_P(PSTR("Fn"), false); oled_write_ln_P(PSTR("Fn"), false);
break; break;
default: default:
break; break;
} }
@ -575,7 +575,7 @@ void oled_render_layer_mod_state(void) {
bool oled_task_user(void) { bool oled_task_user(void) {
if (is_keyboard_master()) { if (is_keyboard_master()) {
oled_render_general_state(); oled_render_general_state();
} }
else { else {
oled_render_layer_mod_state(); oled_render_layer_mod_state();
} }

View File

@ -26,5 +26,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define TAPPING_TERM 200 #define TAPPING_TERM 200
#define COMBO_PDL #define COMBO_PDL
#define COMBO_COUNT 28
#define COMBO_TERM 100 #define COMBO_TERM 100

View File

@ -15,5 +15,4 @@
*/ */
#pragma once #pragma once
#define COMBO_COUNT 8
#define COMBO_TERM 40 #define COMBO_TERM 40

View File

@ -42,7 +42,7 @@ const uint16_t PROGMEM lprn_combo[] = {KC_X, KC_C, COMBO_END};
const uint16_t PROGMEM rprn_combo[] = {KC_COMM, KC_DOT, COMBO_END}; const uint16_t PROGMEM rprn_combo[] = {KC_COMM, KC_DOT, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
[combo_ESC] = COMBO(esc_combo, KC_ESC), [combo_ESC] = COMBO(esc_combo, KC_ESC),
[combo_BACK] = COMBO(bspc_combo, KC_BSPC), [combo_BACK] = COMBO(bspc_combo, KC_BSPC),
[combo_TAB] = COMBO(tab_combo, KC_TAB), [combo_TAB] = COMBO(tab_combo, KC_TAB),
@ -71,12 +71,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_HOME, KC_END, KC_PIPE, KC_BSLS, KC_DQUO, KC_QUOT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_HOME, KC_END, KC_PIPE, KC_BSLS, KC_DQUO, KC_QUOT,
xxx, xxx, xxx, xxx, KC_PGUP, KC_PGDN xxx, xxx, xxx, xxx, KC_PGUP, KC_PGDN
), ),
[_FN] = LAYOUT( [_FN] = LAYOUT(
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, KC_F11, KC_F12, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, KC_F11, KC_F12,
xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx,
xxx, xxx, xxx, xxx, xxx, xxx xxx, xxx, xxx, xxx, xxx, xxx
) )
}; };

View File

@ -15,5 +15,4 @@
*/ */
#pragma once #pragma once
#define COMBO_COUNT 7
#define COMBO_TERM 40 #define COMBO_TERM 40

View File

@ -40,7 +40,7 @@ const uint16_t PROGMEM lprn_combo[] = {KC_X, KC_C, COMBO_END};
const uint16_t PROGMEM rprn_combo[] = {KC_COMM, KC_DOT, COMBO_END}; const uint16_t PROGMEM rprn_combo[] = {KC_COMM, KC_DOT, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
[combo_ESC] = COMBO(esc_combo, KC_ESC), [combo_ESC] = COMBO(esc_combo, KC_ESC),
[combo_BACK] = COMBO(bspc_combo, KC_BSPC), [combo_BACK] = COMBO(bspc_combo, KC_BSPC),
[combo_TAB] = COMBO(tab_combo, KC_TAB), [combo_TAB] = COMBO(tab_combo, KC_TAB),
@ -68,9 +68,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
), ),
[_FN] = LAYOUT_ortho_3x12( [_FN] = LAYOUT_ortho_3x12(
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx,
KC_VOLD, KC_VOLU, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_MUTE, KC_MRWD, KC_MFFD, xxx, xxx, xxx KC_VOLD, KC_VOLU, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_MUTE, KC_MRWD, KC_MFFD, xxx, xxx, xxx
) )
}; };

View File

@ -15,5 +15,4 @@
*/ */
#pragma once #pragma once
#define COMBO_COUNT 7
#define COMBO_TERM 40 #define COMBO_TERM 40

View File

@ -42,7 +42,7 @@ const uint16_t PROGMEM lprn_combo[] = {KC_X, KC_C, COMBO_END};
const uint16_t PROGMEM rprn_combo[] = {KC_COMM, KC_DOT, COMBO_END}; const uint16_t PROGMEM rprn_combo[] = {KC_COMM, KC_DOT, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
[combo_ESC] = COMBO(esc_combo, KC_ESC), [combo_ESC] = COMBO(esc_combo, KC_ESC),
[combo_BACK] = COMBO(bspc_combo, KC_BSPC), [combo_BACK] = COMBO(bspc_combo, KC_BSPC),
[combo_TAB] = COMBO(tab_combo, KC_TAB), [combo_TAB] = COMBO(tab_combo, KC_TAB),
@ -77,7 +77,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
xxx, xxx, xxx, xxx, xxx, BASE, xxx, KC_P7, KC_P8, KC_P9, KC_PPLS, xxx, xxx, xxx, xxx, xxx, BASE, xxx, KC_P7, KC_P8, KC_P9, KC_PPLS,
xxx, xxx, xxx, xxx, xxx, xxx, xxx, KC_P4, KC_P5, KC_P6, KC_PCMM, xxx, xxx, xxx, xxx, xxx, xxx, xxx, KC_P4, KC_P5, KC_P6, KC_PCMM,
xxx, xxx, xxx, xxx, xxx, xxx, xxx, KC_P1, KC_P2, KC_P3, KC_PEQL, xxx, xxx, xxx, xxx, xxx, xxx, xxx, KC_P1, KC_P2, KC_P3, KC_PEQL,
xxx, xxx, xxx, xxx, KC_P0, KC_PDOT, KC_PENT xxx, xxx, xxx, xxx, KC_P0, KC_PDOT, KC_PENT
), ),
@ -85,8 +85,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, xxx, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, xxx, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, KC_F11, KC_F12, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, KC_F11, KC_F12,
xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx,
xxx, xxx, xxx, xxx, xxx, xxx, xxx xxx, xxx, xxx, xxx, xxx, xxx, xxx
) )
}; };

View File

@ -15,5 +15,4 @@
*/ */
#pragma once #pragma once
#define COMBO_COUNT 7
#define COMBO_TERM 40 #define COMBO_TERM 40

View File

@ -41,7 +41,7 @@ const uint16_t PROGMEM lprn_combo[] = {KC_X, KC_C, COMBO_END};
const uint16_t PROGMEM rprn_combo[] = {KC_COMM, KC_DOT, COMBO_END}; const uint16_t PROGMEM rprn_combo[] = {KC_COMM, KC_DOT, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
[combo_ESC] = COMBO(esc_combo, KC_ESC), [combo_ESC] = COMBO(esc_combo, KC_ESC),
[combo_BACK] = COMBO(bspc_combo, KC_BSPC), [combo_BACK] = COMBO(bspc_combo, KC_BSPC),
[combo_TAB] = COMBO(tab_combo, KC_TAB), [combo_TAB] = COMBO(tab_combo, KC_TAB),
@ -74,8 +74,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, xxx, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, xxx, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, KC_F11, KC_F12, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, KC_F11, KC_F12,
xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx,
xxx, xxx, xxx, xxx, xxx, xxx xxx, xxx, xxx, xxx, xxx, xxx
) )
}; };

View File

@ -30,10 +30,8 @@
#undef ONESHOT_TIMEOUT #undef ONESHOT_TIMEOUT
#define ONESHOT_TIMEOUT 5000 #define ONESHOT_TIMEOUT 5000
#define COMBO_COUNT 4
#define COMBO_TERM 200 #define COMBO_TERM 200
#undef RGBLIGHT_HUE_STEP #undef RGBLIGHT_HUE_STEP
#define RGBLIGHT_HUE_STEP 24 #define RGBLIGHT_HUE_STEP 24

View File

@ -1,19 +1,18 @@
/* Copyright 2020 Austin "TuckTuckFloof" Ashmore /* Copyright 2020 Austin "TuckTuckFloof" Ashmore
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or * the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#pragma once #pragma once
#define COMBO_COUNT 5
#define COMBO_TERM 175 #define COMBO_TERM 175

View File

@ -1,16 +1,16 @@
/* Copyright 2020 Austin "TuckTuckFloof" Ashmore /* Copyright 2020 Austin "TuckTuckFloof" Ashmore
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or * the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
@ -31,7 +31,7 @@ enum WOMBO_COMBOS {
const uint16_t PROGMEM VOLUME_UP_COMBO[] = { KC_F1, KC_F2, COMBO_END }; const uint16_t PROGMEM VOLUME_UP_COMBO[] = { KC_F1, KC_F2, COMBO_END };
const uint16_t PROGMEM VOLUME_DN_COMBO[] = { KC_F3, KC_F4, COMBO_END }; const uint16_t PROGMEM VOLUME_DN_COMBO[] = { KC_F3, KC_F4, COMBO_END };
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
[VOLUME_UP] = COMBO(VOLUME_UP_COMBO, KC_VOLU), [VOLUME_UP] = COMBO(VOLUME_UP_COMBO, KC_VOLU),
[VOLUME_DOWN] = COMBO(VOLUME_DN_COMBO, KC_VOLD) [VOLUME_DOWN] = COMBO(VOLUME_DN_COMBO, KC_VOLD)
}; };

View File

@ -1,19 +1,18 @@
/* Copyright 2020 Austin "TuckTuckFloof" Ashmore /* Copyright 2020 Austin "TuckTuckFloof" Ashmore
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or * the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#pragma once #pragma once
#define COMBO_COUNT 5
#define COMBO_TERM 175 #define COMBO_TERM 175

View File

@ -1,16 +1,16 @@
/* Copyright 2020 Austin "TuckTuckFloof" Ashmore /* Copyright 2020 Austin "TuckTuckFloof" Ashmore
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or * the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
@ -31,7 +31,7 @@ enum WOMBO_COMBOS {
const uint16_t PROGMEM VOLUME_UP_COMBO[] = { KC_F1, KC_F2, COMBO_END }; const uint16_t PROGMEM VOLUME_UP_COMBO[] = { KC_F1, KC_F2, COMBO_END };
const uint16_t PROGMEM VOLUME_DN_COMBO[] = { KC_F3, KC_F4, COMBO_END }; const uint16_t PROGMEM VOLUME_DN_COMBO[] = { KC_F3, KC_F4, COMBO_END };
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
[VOLUME_UP] = COMBO(VOLUME_UP_COMBO, KC_VOLU), [VOLUME_UP] = COMBO(VOLUME_UP_COMBO, KC_VOLU),
[VOLUME_DOWN] = COMBO(VOLUME_DN_COMBO, KC_VOLD) [VOLUME_DOWN] = COMBO(VOLUME_DN_COMBO, KC_VOLD)
}; };

View File

@ -1,19 +1,18 @@
/* Copyright 2020 Austin "TuckTuckFloof" Ashmore /* Copyright 2020 Austin "TuckTuckFloof" Ashmore
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or * the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#pragma once #pragma once
#define COMBO_COUNT 5
#define COMBO_TERM 175 #define COMBO_TERM 175

View File

@ -1,16 +1,16 @@
/* Copyright 2020 Austin "TuckTuckFloof" Ashmore /* Copyright 2020 Austin "TuckTuckFloof" Ashmore
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or * the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
@ -31,7 +31,7 @@ enum WOMBO_COMBOS {
const uint16_t PROGMEM VOLUME_UP_COMBO[] = { KC_F1, KC_F2, COMBO_END }; const uint16_t PROGMEM VOLUME_UP_COMBO[] = { KC_F1, KC_F2, COMBO_END };
const uint16_t PROGMEM VOLUME_DN_COMBO[] = { KC_F3, KC_F4, COMBO_END }; const uint16_t PROGMEM VOLUME_DN_COMBO[] = { KC_F3, KC_F4, COMBO_END };
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
[VOLUME_UP] = COMBO(VOLUME_UP_COMBO, KC_VOLU), [VOLUME_UP] = COMBO(VOLUME_UP_COMBO, KC_VOLU),
[VOLUME_DOWN] = COMBO(VOLUME_DN_COMBO, KC_VOLD) [VOLUME_DOWN] = COMBO(VOLUME_DN_COMBO, KC_VOLD)
}; };

View File

@ -26,5 +26,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define TAPPING_TERM 200 #define TAPPING_TERM 200
#define COMBO_PDL #define COMBO_PDL
#define COMBO_COUNT 28
#define COMBO_TERM 100 #define COMBO_TERM 100

View File

@ -16,5 +16,4 @@
#pragma once #pragma once
/* Combos */ /* Combos */
#define COMBO_COUNT 5
#define COMBO_TERM 50 #define COMBO_TERM 50

View File

@ -63,7 +63,7 @@ const uint16_t PROGMEM combo_esc[] = {KC_N, KC_T, COMBO_END};
const uint16_t PROGMEM combo_del[] = {KC_MINS, KC_EQL, COMBO_END}; const uint16_t PROGMEM combo_del[] = {KC_MINS, KC_EQL, COMBO_END};
const uint16_t PROGMEM combo_ret[] = {KC_LGUI, KC_LALT, COMBO_END}; const uint16_t PROGMEM combo_ret[] = {KC_LGUI, KC_LALT, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
//[COMBO_BSPC] = COMBO(combo_bspc,KC_BSPC), //[COMBO_BSPC] = COMBO(combo_bspc,KC_BSPC),
[COMBO_NUMBAK] = COMBO(combo_numbak,KC_BSPC), [COMBO_NUMBAK] = COMBO(combo_numbak,KC_BSPC),
[COMBO_TAB] = COMBO(combo_tab,KC_TAB), [COMBO_TAB] = COMBO(combo_tab,KC_TAB),

View File

@ -16,5 +16,4 @@
#pragma once #pragma once
/* Combos */ /* Combos */
#define COMBO_COUNT 5
#define COMBO_TERM 50 #define COMBO_TERM 50

View File

@ -63,7 +63,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_Q, KC_W, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_J, KC_F, COMBO_END}; const uint16_t PROGMEM combo_esc[] = {KC_J, KC_F, COMBO_END};
const uint16_t PROGMEM combo_del[] = {KC_MINS, KC_EQL, COMBO_END}; const uint16_t PROGMEM combo_del[] = {KC_MINS, KC_EQL, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
//[COMBO_BSPC] = COMBO(combo_bspc,KC_BSPC), //[COMBO_BSPC] = COMBO(combo_bspc,KC_BSPC),
[COMBO_NUMBAK] = COMBO(combo_numbak,KC_BSPC), [COMBO_NUMBAK] = COMBO(combo_numbak,KC_BSPC),
[COMBO_TAB] = COMBO(combo_tab,KC_TAB), [COMBO_TAB] = COMBO(combo_tab,KC_TAB),

View File

@ -41,10 +41,7 @@
#define TOGG A_ENUM #define TOGG A_ENUM
enum combos { enum combos {
#include "combos.def" #include "combos.def"
COMBO_LENGTH
}; };
// Export length to combo module
uint16_t COMBO_LEN = COMBO_LENGTH;
// Bake combos into mem // Bake combos into mem
#undef COMB #undef COMB

View File

@ -14,7 +14,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#define COMBO_COUNT 1
#define COMBO_TERM 100 #define COMBO_TERM 100
#define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_KEYPRESSES

View File

@ -17,7 +17,7 @@
const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END}; const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
[JK_ESC] = COMBO(jk_combo, KC_ESC), [JK_ESC] = COMBO(jk_combo, KC_ESC),
}; };

View File

@ -1,3 +0,0 @@
#pragma once
#define COMBO_COUNT 1

View File

@ -15,7 +15,7 @@ enum custom_keycodes {
}; };
const uint16_t PROGMEM lock_combo[] = {KC_J, KC_K, KC_L, KC_SCLN, COMBO_END}; const uint16_t PROGMEM lock_combo[] = {KC_J, KC_K, KC_L, KC_SCLN, COMBO_END};
combo_t key_combos[COMBO_COUNT] = {COMBO(lock_combo, LGUI(KC_O))}; combo_t key_combos[] = {COMBO(lock_combo, LGUI(KC_O))};
// Define the keycodes for one qwerty layer and one Fn layer. // Define the keycodes for one qwerty layer and one Fn layer.
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* Ctrl Alt ATab Space Gui Alt Ctrl * Ctrl Alt ATab Space Gui Alt Ctrl
* *
* *
* Hidden features : * Hidden features :
* - Left Shift is also Home on a single tap. * - Left Shift is also Home on a single tap.
* - Left Ctrl is also End on a single tap. * - Left Ctrl is also End on a single tap.
* - Right Shift is also page-up on a single tap. * - Right Shift is also page-up on a single tap.

View File

@ -16,7 +16,6 @@
#pragma once #pragma once
#define COMBO_TERM 50 #define COMBO_TERM 50
#define COMBO_COUNT 50
#define PERMISSIVE_HOLD #define PERMISSIVE_HOLD
#define TAPPING_TERM 175 #define TAPPING_TERM 175
#define TAPPING_TERM 175 #define TAPPING_TERM 175

View File

@ -188,7 +188,7 @@ const uint16_t PROGMEM rl_r_m_i_combo[] = {RLR, RLM, RLI, COMBO_END};
// both hand combinations. // both hand combinations.
const uint16_t PROGMEM bl_m_m_combo[] = {LLM, RLM, COMBO_END}; const uint16_t PROGMEM bl_m_m_combo[] = {LLM, RLM, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
// left hand combinations. // left hand combinations.
[L_U_PINKY_RING] = COMBO(lu_p_r_combo, KC_TAB), [L_U_PINKY_RING] = COMBO(lu_p_r_combo, KC_TAB),
[L_U_RING_MIDDLE] = COMBO(lu_r_m_combo, KC_QUES), [L_U_RING_MIDDLE] = COMBO(lu_r_m_combo, KC_QUES),

View File

@ -1,5 +1,4 @@
#pragma once #pragma once
#define COMBO_TERM 100 #define COMBO_TERM 100
#define COMBO_COUNT 38
#define PERMISSIVE_HOLD #define PERMISSIVE_HOLD

View File

@ -105,7 +105,7 @@ const uint16_t PROGMEM z_slash_combo[] = {KC_Z, KC_SLSH, COMBO_END};
const uint16_t PROGMEM x_comma_combo[] = {KC_X, KC_COMM, COMBO_END}; const uint16_t PROGMEM x_comma_combo[] = {KC_X, KC_COMM, COMBO_END};
const uint16_t PROGMEM j_f_combo[] = {KC_F, KC_J, COMBO_END}; const uint16_t PROGMEM j_f_combo[] = {KC_F, KC_J, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
// left hand combinations. // left hand combinations.
[Q_W] = COMBO(q_w_combo, KC_TAB), [Q_W] = COMBO(q_w_combo, KC_TAB),
[W_E] = COMBO(w_e_combo, KC_DQT), [W_E] = COMBO(w_e_combo, KC_DQT),

View File

@ -20,5 +20,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once #pragma once
#define COMBO_TERM 100 #define COMBO_TERM 100
#define COMBO_COUNT 38
#define PERMISSIVE_HOLD #define PERMISSIVE_HOLD

View File

@ -105,7 +105,7 @@ const uint16_t PROGMEM z_slash_combo[] = {KC_Z, KC_SLSH, COMBO_END};
const uint16_t PROGMEM x_comma_combo[] = {KC_X, KC_COMM, COMBO_END}; const uint16_t PROGMEM x_comma_combo[] = {KC_X, KC_COMM, COMBO_END};
const uint16_t PROGMEM j_f_combo[] = {KC_F, KC_J, COMBO_END}; const uint16_t PROGMEM j_f_combo[] = {KC_F, KC_J, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
// left hand combinations. // left hand combinations.
[Q_W] = COMBO(q_w_combo, KC_TAB), [Q_W] = COMBO(q_w_combo, KC_TAB),
[W_E] = COMBO(w_e_combo, KC_DQT), [W_E] = COMBO(w_e_combo, KC_DQT),

View File

@ -17,5 +17,4 @@
#pragma once #pragma once
#define COMBO_TERM 100 #define COMBO_TERM 100
#define COMBO_COUNT 38
#define PERMISSIVE_HOLD #define PERMISSIVE_HOLD

View File

@ -105,7 +105,7 @@ const uint16_t PROGMEM z_slash_combo[] = {KC_Z, KC_SLSH, COMBO_END};
const uint16_t PROGMEM x_comma_combo[] = {KC_X, KC_COMM, COMBO_END}; const uint16_t PROGMEM x_comma_combo[] = {KC_X, KC_COMM, COMBO_END};
const uint16_t PROGMEM j_f_combo[] = {KC_F, KC_J, COMBO_END}; const uint16_t PROGMEM j_f_combo[] = {KC_F, KC_J, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
// left hand combinations. // left hand combinations.
[Q_W] = COMBO(q_w_combo, KC_TAB), [Q_W] = COMBO(q_w_combo, KC_TAB),
[W_E] = COMBO(w_e_combo, KC_DQT), [W_E] = COMBO(w_e_combo, KC_DQT),

View File

@ -1,5 +1,4 @@
#pragma once #pragma once
#define COMBO_TERM 100 #define COMBO_TERM 100
#define COMBO_COUNT 38
#define PERMISSIVE_HOLD #define PERMISSIVE_HOLD

View File

@ -105,7 +105,7 @@ const uint16_t PROGMEM z_slash_combo[] = {KC_Z, KC_SLSH, COMBO_END};
const uint16_t PROGMEM x_comma_combo[] = {KC_X, KC_COMM, COMBO_END}; const uint16_t PROGMEM x_comma_combo[] = {KC_X, KC_COMM, COMBO_END};
const uint16_t PROGMEM j_f_combo[] = {KC_F, KC_J, COMBO_END}; const uint16_t PROGMEM j_f_combo[] = {KC_F, KC_J, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
// left hand combinations. // left hand combinations.
[Q_W] = COMBO(q_w_combo, KC_TAB), [Q_W] = COMBO(q_w_combo, KC_TAB),
[W_E] = COMBO(w_e_combo, KC_DQT), [W_E] = COMBO(w_e_combo, KC_DQT),

View File

@ -1,7 +1,6 @@
#pragma once #pragma once
#define COMBO_TERM 100 #define COMBO_TERM 100
#define COMBO_COUNT 38
#define PERMISSIVE_HOLD #define PERMISSIVE_HOLD
#define LEADER_TIMEOUT 300 #define LEADER_TIMEOUT 300

View File

@ -121,7 +121,7 @@ const uint16_t PROGMEM m_b_combo[] = {KC_M, KC_B, COMBO_END};
// both hand combinations. // both hand combinations.
const uint16_t PROGMEM j_w_combo[] = {KC_J, KC_W, COMBO_END}; const uint16_t PROGMEM j_w_combo[] = {KC_J, KC_W, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
// left hand combinations. // left hand combinations.
[COLON_COMMA] = COMBO(colon_comma_combo, KC_TAB), [COLON_COMMA] = COMBO(colon_comma_combo, KC_TAB),
[COMMA_DOT] = COMBO(comma_dot_combo, KC_QUES), [COMMA_DOT] = COMBO(comma_dot_combo, KC_QUES),

View File

@ -1,5 +1,4 @@
#pragma once #pragma once
#define COMBO_TERM 100 #define COMBO_TERM 100
#define COMBO_COUNT 38
#define PERMISSIVE_HOLD #define PERMISSIVE_HOLD

View File

@ -121,7 +121,7 @@ const uint16_t PROGMEM m_b_combo[] = {KC_M, KC_B, COMBO_END};
// both hand combinations. // both hand combinations.
const uint16_t PROGMEM j_w_combo[] = {KC_J, KC_W, COMBO_END}; const uint16_t PROGMEM j_w_combo[] = {KC_J, KC_W, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
// left hand combinations. // left hand combinations.
[COLON_COMMA] = COMBO(colon_comma_combo, KC_TAB), [COLON_COMMA] = COMBO(colon_comma_combo, KC_TAB),
[COMMA_DOT] = COMBO(comma_dot_combo, KC_QUES), [COMMA_DOT] = COMBO(comma_dot_combo, KC_QUES),

View File

@ -20,5 +20,4 @@
*/ */
#pragma once #pragma once
#define COMBO_COUNT 3
#define COMBO_TERM 200 #define COMBO_TERM 200

View File

@ -29,7 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS,
_______, RGB_TOG, _______, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, KC_DEL, _______, RGB_TOG, _______, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, KC_DEL,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, BL_DOWN, BL_TOGG, BL_UP, NK_TOGG, _______, _______, _______, _______, _______, BL_UP, _______, _______, _______, BL_DOWN, BL_TOGG, BL_UP, NK_TOGG, _______, _______, _______, _______, _______, BL_UP,
_______, _______, _______, _______, _______, _______, BL_TOGG, BL_DOWN, BL_STEP _______, _______, _______, _______, _______, _______, BL_TOGG, BL_DOWN, BL_STEP
), ),
[2] = LAYOUT_ansi( [2] = LAYOUT_ansi(
@ -52,7 +52,7 @@ const uint16_t PROGMEM slashDown_combo[] = {KC_SLSH, KC_DOWN, COMBO_END};
const uint16_t PROGMEM slashUp_combo[] = {KC_SLSH, KC_UP, COMBO_END}; const uint16_t PROGMEM slashUp_combo[] = {KC_SLSH, KC_UP, COMBO_END};
const uint16_t PROGMEM raltBackspace_combo[] = {KC_RALT, KC_BSPC, COMBO_END}; const uint16_t PROGMEM raltBackspace_combo[] = {KC_RALT, KC_BSPC, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
[SLSHDN_PGDN] = COMBO(slashDown_combo, KC_PGDN), [SLSHDN_PGDN] = COMBO(slashDown_combo, KC_PGDN),
[SLSHUP_PGUP] = COMBO(slashUp_combo, KC_PGUP), [SLSHUP_PGUP] = COMBO(slashUp_combo, KC_PGUP),
[RALTBKSPC_DELETE] = COMBO(raltBackspace_combo, KC_DEL), [RALTBKSPC_DELETE] = COMBO(raltBackspace_combo, KC_DEL),

View File

@ -4,7 +4,6 @@
#define TAPPING_TERM 150 #define TAPPING_TERM 150
#define COMBO_TERM 20 #define COMBO_TERM 20
#define COMBO_COUNT 1
#define PERMISSIVE_HOLD #define PERMISSIVE_HOLD

View File

@ -1,23 +1,21 @@
/* Copyright Wong Jing Ping <@wongjingping> /* Copyright Wong Jing Ping <@wongjingping>
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or * the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
*/ */
#pragma once #pragma once
// use 1 combo // use 1 combo
#define COMBO_COUNT 1
#define COMBO_TERM 300 #define COMBO_TERM 300
// mod taps for home row mods // mod taps for home row mods
#define TAPPING_TERM_PER_KEY #define TAPPING_TERM_PER_KEY

View File

@ -33,7 +33,7 @@ enum layer_names {
/* combos */ /* combos */
const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END}; const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END};
combo_t key_combos[COMBO_COUNT] = {COMBO(jk_combo, KC_ESC)}; combo_t key_combos[] = {COMBO(jk_combo, KC_ESC)};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base */ /* Base */

View File

@ -1,19 +0,0 @@
/* Copyright 2022 Sandipratama <https://github.com/nendezkombet>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#define COMBO_COUNT 7

View File

@ -60,7 +60,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_CIRC, KC_UNDS, KC_MINS, KC_4, KC_5, KC_6, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_CIRC, KC_UNDS, KC_MINS, KC_4, KC_5, KC_6,
KC_PERC, KC_AMPR, KC_LBRC, KC_RBRC, KC_ASTR, _______, _______, KC_1, KC_2, KC_3, KC_PERC, KC_AMPR, KC_LBRC, KC_RBRC, KC_ASTR, _______, _______, KC_1, KC_2, KC_3,
TO(0), _______, KC_BSLS, KC_PIPE, _______, _______, _______, KC_EQL, KC_0, KC_BSPC TO(0), _______, KC_BSLS, KC_PIPE, _______, _______, _______, KC_EQL, KC_0, KC_BSPC
), ),
/* THIRD /* THIRD
* ,---------------------------------------------------------------------. * ,---------------------------------------------------------------------.
@ -75,10 +75,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/ */
[_THIRD] = LAYOUT_ortho_4x10( [_THIRD] = LAYOUT_ortho_4x10(
KC_INS, KC_HOME, KC_PGUP, KC_NO, SGUI(KC_S), LCTL(KC_A), KC_NO, KC_NO, KC_UP, KC_NO, KC_INS, KC_HOME, KC_PGUP, KC_NO, SGUI(KC_S), LCTL(KC_A), KC_NO, KC_NO, KC_UP, KC_NO,
KC_DEL, KC_END, KC_PGDN, KC_NO, LCTL(KC_S), LCTL(KC_C), KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_END, KC_PGDN, KC_NO, LCTL(KC_S), LCTL(KC_C), KC_NO, KC_LEFT, KC_DOWN, KC_RGHT,
KC_NO, KC_NO, KC_NO, KC_NO, LWIN(KC_E), LCTL(KC_V), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LWIN(KC_E), LCTL(KC_V), KC_NO, KC_NO, KC_NO, KC_NO,
TO(0), _______, _______, _______, _______, _______, _______, KC_VOLD, _______, KC_VOLU TO(0), _______, _______, _______, _______, _______, _______, KC_VOLD, _______, KC_VOLU
), ),
/* FOURTH /* FOURTH
* ,---------------------------------------------------------------------. * ,---------------------------------------------------------------------.
* |RGB M+| HUD | HUI | | F1 | F2 | F3 | F4 | F5 | F6 | * |RGB M+| HUD | HUI | | F1 | F2 | F3 | F4 | F5 | F6 |
@ -106,7 +106,7 @@ const uint16_t PROGMEM test_combo4[] = {KC_A, KC_S, COMBO_END};
const uint16_t PROGMEM test_combo5[] = {KC_G, KC_H, COMBO_END}; const uint16_t PROGMEM test_combo5[] = {KC_G, KC_H, COMBO_END};
const uint16_t PROGMEM test_combo6[] = {KC_B, KC_N, COMBO_END}; const uint16_t PROGMEM test_combo6[] = {KC_B, KC_N, COMBO_END};
const uint16_t PROGMEM test_combo7[] = {KC_O, KC_P, COMBO_END}; const uint16_t PROGMEM test_combo7[] = {KC_O, KC_P, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
COMBO(test_combo1, KC_ESC), COMBO(test_combo1, KC_ESC),
COMBO(test_combo2, TO(3)), COMBO(test_combo2, TO(3)),
COMBO(test_combo3, KC_CAPS), COMBO(test_combo3, KC_CAPS),

View File

@ -18,5 +18,3 @@
// place overrides here // place overrides here
#define OLED_FONT_H "keyboards/keycapsss/plaid_pad/keymaps/oled/glcdfont.c" #define OLED_FONT_H "keyboards/keycapsss/plaid_pad/keymaps/oled/glcdfont.c"
#define COMBO_COUNT 3

View File

@ -72,7 +72,7 @@ const uint16_t PROGMEM zeroDot_combo[] = {KC_P0, KC_PDOT, COMBO_END};
const uint16_t PROGMEM leftDown_combo[] = {KC_LEFT, KC_DOWN, COMBO_END}; const uint16_t PROGMEM leftDown_combo[] = {KC_LEFT, KC_DOWN, COMBO_END};
const uint16_t PROGMEM prevPlay_combo[] = {KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, COMBO_END}; const uint16_t PROGMEM prevPlay_combo[] = {KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
[COMBO1] = COMBO_ACTION(zeroDot_combo), [COMBO1] = COMBO_ACTION(zeroDot_combo),
[COMBO2] = COMBO_ACTION(leftDown_combo), [COMBO2] = COMBO_ACTION(leftDown_combo),
[COMBO3] = COMBO_ACTION(prevPlay_combo), [COMBO3] = COMBO_ACTION(prevPlay_combo),

View File

@ -24,7 +24,6 @@
#define MOUSEKEY_TIME_TO_MAX 64 #define MOUSEKEY_TIME_TO_MAX 64
// The firmware is too large! // The firmware is too large!
#define COMBO_COUNT 1 // number of combo
#define COMBO_TERM 80 // timeout period for combos to 40ms. #define COMBO_TERM 80 // timeout period for combos to 40ms.
//disable broken animations //disable broken animations

View File

@ -37,21 +37,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_Navi] = LAYOUT_planck_mit( [_Navi] = LAYOUT_planck_mit(
KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_ESC, KC_NO, KC_NO, KC_DEL, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_ESC, KC_NO, KC_NO, KC_DEL, KC_HOME, KC_PGDN, KC_PGUP, KC_END,
KC_LSFT, HOME_S, HOME_D, HOME_F, KC_TAB, KC_NO, KC_NO, KC_ENT, KC_RSFT, HOME_K, HOME_L, HOME_QU, KC_LSFT, HOME_S, HOME_D, HOME_F, KC_TAB, KC_NO, KC_NO, KC_ENT, KC_RSFT, HOME_K, HOME_L, HOME_QU,
KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_BTN1, KC_NO, KC_NO, KC_BTN2, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_BTN1, KC_NO, KC_NO, KC_BTN2, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
KC_NO, KC_NO, KC_NO, KC_NO, Lay_SPC, KC_NO, KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO KC_NO, KC_NO, KC_NO, KC_NO, Lay_SPC, KC_NO, KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO
), ),
[_Numb] = LAYOUT_planck_mit( [_Numb] = LAYOUT_planck_mit(
KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, KC_NO, KC_NO, KC_DEL, KC_NO, KC_NO, KC_NO, KC_NO, KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, KC_NO, KC_NO, KC_DEL, KC_NO, KC_NO, KC_NO, KC_NO,
KC_SCLN, KC_4, KC_5, KC_6, KC_EQL, KC_NO, KC_NO, KC_ENT, KC_RSFT, HOME_K, HOME_L, HOME_QU, KC_SCLN, KC_4, KC_5, KC_6, KC_EQL, KC_NO, KC_NO, KC_ENT, KC_RSFT, HOME_K, HOME_L, HOME_QU,
KC_GRV, KC_1, KC_2, KC_3, KC_BSLS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KR_HAEN, KC_NO, KC_GRV, KC_1, KC_2, KC_3, KC_BSLS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KR_HAEN, KC_NO,
KC_NO, KC_NO, KC_NO, KC_0, KC_MINS, KC_NO, KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO KC_NO, KC_NO, KC_NO, KC_0, KC_MINS, KC_NO, KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO
), ),
[_Func] = LAYOUT_planck_mit( [_Func] = LAYOUT_planck_mit(
KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR, KC_NO, KC_NO, QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR, KC_NO, KC_NO, QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO,
KC_F11, KC_F4, KC_F5, KC_F6, KC_SCRL, KC_NO, KC_NO, KC_CAPS, KC_RSFT, HOME_K, HOME_L, HOME_QU, KC_F11, KC_F4, KC_F5, KC_F6, KC_SCRL, KC_NO, KC_NO, KC_CAPS, KC_RSFT, HOME_K, HOME_L, HOME_QU,
KC_F10, KC_F1, KC_F2, KC_F3, KC_PAUS, KC_NO, KC_NO, KC_INS, KC_NO, KC_NO, KR_HAEN, KC_NO, KC_F10, KC_F1, KC_F2, KC_F3, KC_PAUS, KC_NO, KC_NO, KC_INS, KC_NO, KC_NO, KR_HAEN, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, Lay_SPC, KC_NO, KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO KC_NO, KC_NO, KC_NO, KC_NO, Lay_SPC, KC_NO, KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO
), ),
}; };
@ -75,10 +75,8 @@ layer_state_t layer_state_set_user(layer_state_t state) {
} }
// COMBO key for HOME ROW modifier // COMBO key for HOME ROW modifier
// modify `config.h` file
// by adding #define COMBO_COUNT 1 (replacing 1 with the number that youre using).
// modify `rules.mk` file // modify `rules.mk` file
// by adding # COMBO_ENABLE = yes // by adding # COMBO_ENABLE = yes
enum combos { enum combos {
SFT_HAN, SFT_HAN,
@ -86,6 +84,6 @@ enum combos {
const uint16_t PROGMEM sft_han_combo[] = {LSFT_T(KC_F), LT(_Func,KC_SPC), COMBO_END}; const uint16_t PROGMEM sft_han_combo[] = {LSFT_T(KC_F), LT(_Func,KC_SPC), COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
[SFT_HAN] = COMBO(sft_han_combo, KC_LNG1), [SFT_HAN] = COMBO(sft_han_combo, KC_LNG1),
}; };

View File

@ -49,7 +49,6 @@
// #define LEADER_KEY_STRICT_KEY_PROCESSING // Disables keycode filtering for Mod-Tap and Layer-Tap keycodes. Eg, if you enable this, you would need to specify MT(MOD_CTL, KC_A) if you want to use KC_A. // #define LEADER_KEY_STRICT_KEY_PROCESSING // Disables keycode filtering for Mod-Tap and Layer-Tap keycodes. Eg, if you enable this, you would need to specify MT(MOD_CTL, KC_A) if you want to use KC_A.
// #define ONESHOT_TIMEOUT 300 // How long before oneshot times out // #define ONESHOT_TIMEOUT 300 // How long before oneshot times out
// #define ONESHOT_TAP_TOGGLE 2 // How many taps before oneshot toggle is triggered // #define ONESHOT_TAP_TOGGLE 2 // How many taps before oneshot toggle is triggered
// #define COMBO_COUNT 2 // Set this to the number of combos that you're using in the Combo feature.
// #define COMBO_TERM 200 // How long for the Combo keys to be detected. Defaults to TAPPING_TERM if not defined. // #define COMBO_TERM 200 // How long for the Combo keys to be detected. Defaults to TAPPING_TERM if not defined.
// #define TAP_CODE_DELAY 100 // Sets the delay between register_code and unregister_code, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds. // #define TAP_CODE_DELAY 100 // Sets the delay between register_code and unregister_code, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds.
// #define TAP_HOLD_CAPS_DELAY 80 // Sets the delay for Tap Hold keys (LT, MT) when using KC_CAPS_LOCK keycode, as this has some special handling on MacOS. The value is in milliseconds, and defaults to 80 ms if not defined. For macOS, you may want to set this to 200 or higher. // #define TAP_HOLD_CAPS_DELAY 80 // Sets the delay for Tap Hold keys (LT, MT) when using KC_CAPS_LOCK keycode, as this has some special handling on MacOS. The value is in milliseconds, and defaults to 80 ms if not defined. For macOS, you may want to set this to 200 or higher.

View File

@ -34,7 +34,6 @@
// #define LEADER_KEY_STRICT_KEY_PROCESSING // Disables keycode filtering for Mod-Tap and Layer-Tap keycodes. Eg, if you enable this, you would need to specify MT(MOD_CTL, KC_A) if you want to use KC_A. // #define LEADER_KEY_STRICT_KEY_PROCESSING // Disables keycode filtering for Mod-Tap and Layer-Tap keycodes. Eg, if you enable this, you would need to specify MT(MOD_CTL, KC_A) if you want to use KC_A.
// #define ONESHOT_TIMEOUT 300 // How long before oneshot times out // #define ONESHOT_TIMEOUT 300 // How long before oneshot times out
// #define ONESHOT_TAP_TOGGLE 2 // How many taps before oneshot toggle is triggered // #define ONESHOT_TAP_TOGGLE 2 // How many taps before oneshot toggle is triggered
// #define COMBO_COUNT 2 // Set this to the number of combos that you're using in the Combo feature.
// #define COMBO_TERM 200 // How long for the Combo keys to be detected. Defaults to TAPPING_TERM if not defined. // #define COMBO_TERM 200 // How long for the Combo keys to be detected. Defaults to TAPPING_TERM if not defined.
// #define TAP_CODE_DELAY 100 // Sets the delay between register_code and unregister_code, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds. // #define TAP_CODE_DELAY 100 // Sets the delay between register_code and unregister_code, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds.
// #define TAP_HOLD_CAPS_DELAY 80 // Sets the delay for Tap Hold keys (LT, MT) when using KC_CAPS_LOCK keycode, as this has some special handling on MacOS. The value is in milliseconds, and defaults to 80 ms if not defined. For macOS, you may want to set this to 200 or higher. // #define TAP_HOLD_CAPS_DELAY 80 // Sets the delay for Tap Hold keys (LT, MT) when using KC_CAPS_LOCK keycode, as this has some special handling on MacOS. The value is in milliseconds, and defaults to 80 ms if not defined. For macOS, you may want to set this to 200 or higher.
@ -75,7 +74,7 @@
#define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS // Randomly changes a single key's hue and saturation #define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS // Randomly changes a single key's hue and saturation
#define DISABLE_RGB_MATRIX_HUE_BREATHING // Hue shifts up a slight ammount at the same time, then shifts back #define DISABLE_RGB_MATRIX_HUE_BREATHING // Hue shifts up a slight ammount at the same time, then shifts back
#define DISABLE_RGB_MATRIX_HUE_PENDULUM // Hue shifts up a slight ammount in a wave to the right, then back to the left #define DISABLE_RGB_MATRIX_HUE_PENDULUM // Hue shifts up a slight ammount in a wave to the right, then back to the left
#define DISABLE_RGB_MATRIX_HUE_WAVE // Hue shifts up a slight ammount and then back down in a wave to the right #define DISABLE_RGB_MATRIX_HUE_WAVE // Hue shifts up a slight ammount and then back down in a wave to the right
// =================================================== Requires RGB_MATRIX_FRAMEBUFFER_EFFECTS ============================================================= // =================================================== Requires RGB_MATRIX_FRAMEBUFFER_EFFECTS =============================================================
// #define DISABLE_RGB_MATRIX_TYPING_HEATMAP // How hot is your WPM! // #define DISABLE_RGB_MATRIX_TYPING_HEATMAP // How hot is your WPM!
#define DISABLE_RGB_MATRIX_DIGITAL_RAIN // That famous computer simulation #define DISABLE_RGB_MATRIX_DIGITAL_RAIN // That famous computer simulation

View File

@ -32,8 +32,6 @@
// how long before oneshot times out // how long before oneshot times out
#define ONESHOT_TAP_TOGGLE 2 #define ONESHOT_TAP_TOGGLE 2
// how many taps before oneshot toggle is triggered // how many taps before oneshot toggle is triggered
#define COMBO_COUNT 2
// Set this to the number of combos that you're using in the Combo feature.
#define COMBO_TERM 200 #define COMBO_TERM 200
// how long for the Combo keys to be detected. Defaults to TAPPING_TERM if not defined. // how long for the Combo keys to be detected. Defaults to TAPPING_TERM if not defined.
#define TAP_CODE_DELAY 100 #define TAP_CODE_DELAY 100

View File

@ -50,6 +50,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
} }
#endif #endif
#define COMBO_COUNT 1
#define TAPPING_TERM 220 #define TAPPING_TERM 220

View File

@ -35,14 +35,14 @@ enum custom_keycodes {
#define RAISE MO(_RAISE) #define RAISE MO(_RAISE)
#define RAS RAISE #define RAS RAISE
enum combos //match combo_count in config.h enum combos
{ {
EU_ENT, EU_ENT,
}; };
const uint16_t PROGMEM eu_combo[] = {KC_E, KC_U, COMBO_END}; const uint16_t PROGMEM eu_combo[] = {KC_E, KC_U, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
[EU_ENT] = COMBO_ACTION(eu_combo), [EU_ENT] = COMBO_ACTION(eu_combo),
}; };
@ -58,38 +58,38 @@ void process_combo_event(uint16_t combo_index, bool pressed) {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_DVORAK] = LAYOUT( [_DVORAK] = LAYOUT(
KC_ESC, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_ESC, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
KC_TAB, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_TAB, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
KC_EQL, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_BSLS, KC_EQL, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_BSLS,
XXXXXXX, KC_ENT, KC_LALT, TT(LWR), KC_LSFT, KC_LCTL, KC_BSPC, KC_SPC, TT(RAS), KC_DEL, KC_LGUI, XXXXXXX XXXXXXX, KC_ENT, KC_LALT, TT(LWR), KC_LSFT, KC_LCTL, KC_BSPC, KC_SPC, TT(RAS), KC_DEL, KC_LGUI, XXXXXXX
), ),
[_QWERTY] = LAYOUT( [_QWERTY] = LAYOUT(
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LGUI, KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LGUI,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
), ),
[_LOWER] = LAYOUT( [_LOWER] = LAYOUT(
_______, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_AMPR, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, _______, _______, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_AMPR, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, _______,
_______, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_ASTR, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, _______, _______, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_ASTR, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, _______,
_______, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_GRV, _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______, _______, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_GRV, _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______,
_______, _______, _______, _______, _______, _______, _______, KC_KP_0, _______, _______, _______, _______ //This kp_0 is blocking the space key.... may want to do something about that. _______, _______, _______, _______, _______, _______, _______, KC_KP_0, _______, _______, _______, _______ //This kp_0 is blocking the space key.... may want to do something about that.
), ),
[_RAISE] = LAYOUT( [_RAISE] = LAYOUT(
_______, KC_PSCR, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_VOLU, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, _______, KC_PSCR, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_VOLU, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX,
KC_CAPS, KC_INS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_VOLD, KC_F4, KC_F5, KC_F6, KC_F11, XXXXXXX, KC_CAPS, KC_INS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_VOLD, KC_F4, KC_F5, KC_F6, KC_F11, XXXXXXX,
_______, KC_NUM, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_F1, KC_F2, KC_F3, KC_F12, XXXXXXX, _______, KC_NUM, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_F1, KC_F2, KC_F3, KC_F12, XXXXXXX,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
), ),
[_ADJUST] = LAYOUT( [_ADJUST] = LAYOUT(
TO_DV, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, TO_DV, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
RGB_TOG, RGB_MOD, VK_TOGG, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, DVORAK, _______, _______, _______, RGB_TOG, RGB_MOD, VK_TOGG, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, DVORAK, _______, _______, _______,
RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
) )

View File

@ -33,8 +33,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#endif #endif
#define TAPPING_TERM 120 #define TAPPING_TERM 120
#ifdef COMBO_COUNT
#undef COMBO_COUNT
#endif
#define COMBO_COUNT 2
#define COMBO_TERM 20 #define COMBO_TERM 20

View File

@ -36,7 +36,7 @@ static long int oled_timeout = 300000;
enum combos { ESCAPE_COMBO, DELETE_COMBO }; enum combos { ESCAPE_COMBO, DELETE_COMBO };
const uint16_t PROGMEM escape_combo[] = { KC_GRV, KC_1, COMBO_END }; const uint16_t PROGMEM escape_combo[] = { KC_GRV, KC_1, COMBO_END };
const uint16_t PROGMEM delete_combo[] = { KC_DOT, KC_SLSH, COMBO_END }; const uint16_t PROGMEM delete_combo[] = { KC_DOT, KC_SLSH, COMBO_END };
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
[ESCAPE_COMBO] = COMBO(escape_combo, KC_ESC), [ESCAPE_COMBO] = COMBO(escape_combo, KC_ESC),
[DELETE_COMBO] = COMBO(delete_combo, KC_DEL) [DELETE_COMBO] = COMBO(delete_combo, KC_DEL)
}; };

View File

@ -29,7 +29,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define EE_HANDS // #define EE_HANDS
#define COMBO_TERM 20 #define COMBO_TERM 20
#define COMBO_COUNT 3
#define PERMISSIVE_HOLD #define PERMISSIVE_HOLD

View File

@ -4,7 +4,6 @@
#pragma once #pragma once
#ifdef COMBO_ENABLE #ifdef COMBO_ENABLE
# define COMBO_COUNT 4
# define COMBO_TERM 50 # define COMBO_TERM 50
#endif #endif

View File

@ -28,7 +28,7 @@ const uint16_t PROGMEM combo_ent[] = {ALT_D, GUI_F, COMBO_END};
const uint16_t PROGMEM combo_tab[] = {KC_C, KC_V, COMBO_END}; const uint16_t PROGMEM combo_tab[] = {KC_C, KC_V, COMBO_END};
const uint16_t PROGMEM combo_del[] = {KC_M, KC_COMM, COMBO_END}; const uint16_t PROGMEM combo_del[] = {KC_M, KC_COMM, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
COMBO(combo_bspc,KC_BSPC), // 1 COMBO(combo_bspc,KC_BSPC), // 1
COMBO(combo_ent,KC_ENT), // 2 COMBO(combo_ent,KC_ENT), // 2
COMBO(combo_tab,KC_TAB), // 3 COMBO(combo_tab,KC_TAB), // 3
@ -61,4 +61,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_TRNS,
QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
) )
}; };

View File

@ -4,7 +4,6 @@
#pragma once #pragma once
#ifdef COMBO_ENABLE #ifdef COMBO_ENABLE
# define COMBO_COUNT 4
# define COMBO_TERM 50 # define COMBO_TERM 50
#endif #endif

View File

@ -29,7 +29,7 @@ const uint16_t PROGMEM combo_ent[] = {ALT_D, GUI_F, COMBO_END};
const uint16_t PROGMEM combo_tab[] = {KC_C, KC_V, COMBO_END}; const uint16_t PROGMEM combo_tab[] = {KC_C, KC_V, COMBO_END};
const uint16_t PROGMEM combo_del[] = {KC_M, KC_COMM, COMBO_END}; const uint16_t PROGMEM combo_del[] = {KC_M, KC_COMM, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
COMBO(combo_bspc,KC_BSPC), // 1 COMBO(combo_bspc,KC_BSPC), // 1
COMBO(combo_ent,KC_ENT), // 2 COMBO(combo_ent,KC_ENT), // 2
COMBO(combo_tab,KC_TAB), // 3 COMBO(combo_tab,KC_TAB), // 3
@ -62,4 +62,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_TRNS,
QK_BOOT QK_BOOT
) )
}; };

View File

@ -4,7 +4,6 @@
#pragma once #pragma once
#ifdef COMBO_ENABLE #ifdef COMBO_ENABLE
# define COMBO_COUNT 4
# define COMBO_TERM 50 # define COMBO_TERM 50
#endif #endif

View File

@ -28,7 +28,7 @@ const uint16_t PROGMEM combo_ent[] = {ALT_D, GUI_F, COMBO_END};
const uint16_t PROGMEM combo_tab[] = {KC_C, KC_V, COMBO_END}; const uint16_t PROGMEM combo_tab[] = {KC_C, KC_V, COMBO_END};
const uint16_t PROGMEM combo_del[] = {KC_M, KC_COMM, COMBO_END}; const uint16_t PROGMEM combo_del[] = {KC_M, KC_COMM, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
COMBO(combo_bspc,KC_BSPC), // 1 COMBO(combo_bspc,KC_BSPC), // 1
COMBO(combo_ent,KC_ENT), // 2 COMBO(combo_ent,KC_ENT), // 2
COMBO(combo_tab,KC_TAB), // 3 COMBO(combo_tab,KC_TAB), // 3
@ -61,4 +61,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_TRNS,
QK_BOOT, KC_TRNS, KC_TRNS QK_BOOT, KC_TRNS, KC_TRNS
) )
}; };

View File

@ -2,6 +2,4 @@
#define EE_HANDS #define EE_HANDS
#define COMBO_COUNT 10
#define COMBO_TERM 100 #define COMBO_TERM 100

View File

@ -32,7 +32,7 @@ const uint16_t PROGMEM kz_combo[] = {KC_K, KC_Z, COMBO_END};
const uint16_t PROGMEM dm_combo[] = {KC_D, KC_M, COMBO_END}; const uint16_t PROGMEM dm_combo[] = {KC_D, KC_M, COMBO_END};
const uint16_t PROGMEM bx_combo[] = {KC_B, KC_X, COMBO_END}; const uint16_t PROGMEM bx_combo[] = {KC_B, KC_X, COMBO_END};
combo_t key_combos[COMBO_COUNT] = { combo_t key_combos[] = {
[TOP_L] = COMBO(fk_combo, KC_ESC), [TOP_L] = COMBO(fk_combo, KC_ESC),
[TOP_R] = COMBO(zl_combo, KC_AT), [TOP_R] = COMBO(zl_combo, KC_AT),
[MID_L] = COMBO(hd_combo, KC_TAB), [MID_L] = COMBO(hd_combo, KC_TAB),

View File

@ -37,7 +37,6 @@
// #define LEADER_KEY_STRICT_KEY_PROCESSING // Disables keycode filtering for Mod-Tap and Layer-Tap keycodes. Eg, if you enable this, you would need to specify MT(MOD_CTL, KC_A) if you want to use KC_A. // #define LEADER_KEY_STRICT_KEY_PROCESSING // Disables keycode filtering for Mod-Tap and Layer-Tap keycodes. Eg, if you enable this, you would need to specify MT(MOD_CTL, KC_A) if you want to use KC_A.
// #define ONESHOT_TIMEOUT 3000 // How long before oneshot times out // #define ONESHOT_TIMEOUT 3000 // How long before oneshot times out
// #define ONESHOT_TAP_TOGGLE 2 // How many taps before oneshot toggle is triggered // #define ONESHOT_TAP_TOGGLE 2 // How many taps before oneshot toggle is triggered
// #define COMBO_COUNT 2 // Set this to the number of combos that you're using in the Combo feature.
// #define COMBO_TERM 200 // How long for the Combo keys to be detected. Defaults to TAPPING_TERM if not defined. // #define COMBO_TERM 200 // How long for the Combo keys to be detected. Defaults to TAPPING_TERM if not defined.
// #define TAP_CODE_DELAY 100 // Sets the delay between register_code and unregister_code, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds. // #define TAP_CODE_DELAY 100 // Sets the delay between register_code and unregister_code, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds.
#define TAP_CODE_DELAY 25 // Sets the delay between register_code and unregister_code, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds. #define TAP_CODE_DELAY 25 // Sets the delay between register_code and unregister_code, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds.

View File

@ -50,7 +50,6 @@
// #define LEADER_KEY_STRICT_KEY_PROCESSING // Disables keycode filtering for Mod-Tap and Layer-Tap keycodes. Eg, if you enable this, you would need to specify MT(MOD_CTL, KC_A) if you want to use KC_A. // #define LEADER_KEY_STRICT_KEY_PROCESSING // Disables keycode filtering for Mod-Tap and Layer-Tap keycodes. Eg, if you enable this, you would need to specify MT(MOD_CTL, KC_A) if you want to use KC_A.
// #define ONESHOT_TIMEOUT 3000 // How long before oneshot times out // #define ONESHOT_TIMEOUT 3000 // How long before oneshot times out
// #define ONESHOT_TAP_TOGGLE 2 // How many taps before oneshot toggle is triggered // #define ONESHOT_TAP_TOGGLE 2 // How many taps before oneshot toggle is triggered
// #define COMBO_COUNT 2 // Set this to the number of combos that you're using in the Combo feature.
// #define COMBO_TERM 200 // How long for the Combo keys to be detected. Defaults to TAPPING_TERM if not defined. // #define COMBO_TERM 200 // How long for the Combo keys to be detected. Defaults to TAPPING_TERM if not defined.
// #define TAP_CODE_DELAY 100 // Sets the delay between register_code and unregister_code, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds. // #define TAP_CODE_DELAY 100 // Sets the delay between register_code and unregister_code, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds.
// #define TAP_HOLD_CAPS_DELAY 80 // Sets the delay for Tap Hold keys (LT, MT) when using KC_CAPS_LOCK keycode, as this has some special handling on MacOS. The value is in milliseconds, and defaults to 80 ms if not defined. For macOS, you may want to set this to 200 or higher. // #define TAP_HOLD_CAPS_DELAY 80 // Sets the delay for Tap Hold keys (LT, MT) when using KC_CAPS_LOCK keycode, as this has some special handling on MacOS. The value is in milliseconds, and defaults to 80 ms if not defined. For macOS, you may want to set this to 200 or higher.

View File

@ -34,7 +34,6 @@
// #define LEADER_KEY_STRICT_KEY_PROCESSING // Disables keycode filtering for Mod-Tap and Layer-Tap keycodes. Eg, if you enable this, you would need to specify MT(MOD_CTL, KC_A) if you want to use KC_A. // #define LEADER_KEY_STRICT_KEY_PROCESSING // Disables keycode filtering for Mod-Tap and Layer-Tap keycodes. Eg, if you enable this, you would need to specify MT(MOD_CTL, KC_A) if you want to use KC_A.
// #define ONESHOT_TIMEOUT 300 // How long before oneshot times out // #define ONESHOT_TIMEOUT 300 // How long before oneshot times out
// #define ONESHOT_TAP_TOGGLE 2 // How many taps before oneshot toggle is triggered // #define ONESHOT_TAP_TOGGLE 2 // How many taps before oneshot toggle is triggered
// #define COMBO_COUNT 2 // Set this to the number of combos that you're using in the Combo feature.
// #define COMBO_TERM 200 // How long for the Combo keys to be detected. Defaults to TAPPING_TERM if not defined. // #define COMBO_TERM 200 // How long for the Combo keys to be detected. Defaults to TAPPING_TERM if not defined.
// #define TAP_CODE_DELAY 100 // Sets the delay between register_code and unregister_code, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds. // #define TAP_CODE_DELAY 100 // Sets the delay between register_code and unregister_code, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds.
// #define TAP_HOLD_CAPS_DELAY 80 // Sets the delay for Tap Hold keys (LT, MT) when using KC_CAPS_LOCK keycode, as this has some special handling on MacOS. The value is in milliseconds, and defaults to 80 ms if not defined. For macOS, you may want to set this to 200 or higher. // #define TAP_HOLD_CAPS_DELAY 80 // Sets the delay for Tap Hold keys (LT, MT) when using KC_CAPS_LOCK keycode, as this has some special handling on MacOS. The value is in milliseconds, and defaults to 80 ms if not defined. For macOS, you may want to set this to 200 or higher.

Some files were not shown because too many files have changed in this diff Show More