1
0
Fork 0
forked from forks/qmk_firmware

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 \
$(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)_INC := $($(TEST)_INC) $(VPATH) $(GTEST_INC)
$(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"},
// Combos
"COMBO_COUNT": {"info_key": "combo.count", "value_type": "int"},
"COMBO_TERM": {"info_key": "combo.term", "value_type": "int"},
// Dynamic Keymap
@ -182,9 +181,10 @@
"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},
"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
"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"},
"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"},

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
* `#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_combo.md) feature. Or leave it undefined and programmatically set the count.
* `#define COMBO_TERM 200`
* how long for the Combo keys to be detected. Defaults to `TAPPING_TERM` if not defined.
* `#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`.
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.
```c
const uint16_t PROGMEM test_combo1[] = {KC_A, KC_B, 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_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
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};
combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
COMBO(test_combo1, KC_ESC)
COMBO(test_combo2, KC_TAB)
};
@ -41,17 +38,15 @@ combo_t key_combos[COMBO_COUNT] = {
## 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
enum combos {
AB_ESC,
JK_TAB,
QW_SFT,
SD_LAYER,
COMBO_LENGTH
SD_LAYER
};
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 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 {
EM_EMAIL,
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 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
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
enum combos {
AB_MODS,
COMBO_LENGTH
AB_MODS
};
uint16_t COMBO_LEN = COMBO_LENGTH;
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/.

View file

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

View file

@ -18,7 +18,7 @@
```c
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" を送信します。
@ -38,7 +38,7 @@ enum combos {
const uint16_t PROGMEM ab_combo[] = {KC_A, KC_B, 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),
[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 paste_combo[] = {KC_X, KC_V, COMBO_END};
combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
[ZC_COPY] = COMBO_ACTION(copy_combo),
[XV_PASTE] = COMBO_ACTION(paste_combo),
};

View file

@ -10,7 +10,6 @@
#ifdef COMBO_ENABLE
#define COMBO_COUNT 9
#define COMBO_TERM 20
#define COMBO_ONLY_FROM_LAYER 0
#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 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(ss_combo, RALT(KC_S)),
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) },
[_FUNCTION] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
};

View file

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

View file

@ -37,8 +37,6 @@
// how long before oneshot times out
#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 TAP_CODE_DELAY 100

View file

@ -19,7 +19,5 @@
#define RETRO_TAPPING_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 TAPPING_TERM 200 // time out for tap-hold in ms

View file

@ -99,7 +99,7 @@ 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(jk_alt, KC_LALT),
};

View file

@ -20,5 +20,4 @@
/* Add combos */
#define COMBO_COUNT 1
#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};
combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
[CTRL_PAUS_RESET] = COMBO_ACTION(reset_combo),
};

View file

@ -21,8 +21,6 @@
#define BACKLIGHT_LIMIT_VAL 255
#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 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 cut_combo[] = {KC_Z, KC_X, COMBO_END};
combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
[ZC_COPY] = COMBO_ACTION(copy_combo),
[XV_PASTE] = COMBO_ACTION(paste_combo),
[ZX_CUT] = COMBO_ACTION(cut_combo),

View file

@ -15,4 +15,3 @@
*/
#pragma once
#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 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)),
[SET] = COMBO(settings_combo, MO(_SET)),
};

View file

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

View file

@ -138,7 +138,7 @@ 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_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_TAB] = COMBO(combo_tab,KC_TAB),
[COMBO_ESC] = COMBO(combo_esc,KC_ESC),

View file

@ -21,5 +21,3 @@ const uint16_t PROGMEM bootloader_combo[] = {
combo_t key_combos[] = {
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
// Register the combo action
combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
[SD_LAYER_COMBO] = COMBO_ACTION(sd_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 COMBO_COUNT 2 // Number of defined combos
#define COMBO_TERM 20 // Delay for combo keys to be chained together

View file

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

View file

@ -165,11 +165,8 @@ enum combo_events {
DELQ_COMBO,
SAVEQ_COMBO,
BSPCQ_COMBO,
BSPCWQ_COMBO,
COMBO_LENGTH
BSPCWQ_COMBO
};
uint16_t COMBO_LEN = COMBO_LENGTH;
const uint16_t PROGMEM ru_combo[] = {KC_R, U_CTRL, COMBO_END};
const uint16_t PROGMEM en_combo[] = {U_CTRL, S_ALT, COMBO_END};
@ -398,4 +395,3 @@ void matrix_scan_user(void) {
#include "mod_tap_keys.h"
#undef MOD_TAP_KEY
}

View file

@ -159,11 +159,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
enum combo_events {
CAPS_COMBO,
// Other combos...
COMBO_LENGTH
CAPS_COMBO
};
uint16_t COMBO_LEN = COMBO_LENGTH;
const uint16_t PROGMEM caps_combo[] = {KC_F, KC_J, COMBO_END};

View file

@ -46,8 +46,6 @@ This is the C configuration file for the keymap
// Ref: https://beta.docs.qmk.fm/using-qmk/software-features/tap_hold#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.
// They would have be held together intentionally to trigger this.
#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.
#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 */

View file

@ -18,7 +18,7 @@ enum combos {
const uint16_t PROGMEM df_combo[] = {KC_D, KC_F, 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
[DF_DASH] = COMBO(df_combo, KC_MINS),
// For Vim, put Escape on the home row

View file

@ -15,7 +15,6 @@
// combo
#define COMBO_COUNT 7
#define EXTRA_SHORT_COMBOS
//Tapping values

View file

@ -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 ö
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(search_combo, FINDER),
COMBO(calculator_combo, CALCULATOR),

View file

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

View file

@ -15,5 +15,4 @@
*/
#pragma once
#define COMBO_COUNT 8
#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};
combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
[combo_ESC] = COMBO(esc_combo, KC_ESC),
[combo_BACK] = COMBO(bspc_combo, KC_BSPC),
[combo_TAB] = COMBO(tab_combo, KC_TAB),

View file

@ -15,5 +15,4 @@
*/
#pragma once
#define COMBO_COUNT 7
#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};
combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
[combo_ESC] = COMBO(esc_combo, KC_ESC),
[combo_BACK] = COMBO(bspc_combo, KC_BSPC),
[combo_TAB] = COMBO(tab_combo, KC_TAB),

View file

@ -15,5 +15,4 @@
*/
#pragma once
#define COMBO_COUNT 7
#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};
combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
[combo_ESC] = COMBO(esc_combo, KC_ESC),
[combo_BACK] = COMBO(bspc_combo, KC_BSPC),
[combo_TAB] = COMBO(tab_combo, KC_TAB),
@ -89,4 +89,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};

View file

@ -15,5 +15,4 @@
*/
#pragma once
#define COMBO_COUNT 7
#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};
combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
[combo_ESC] = COMBO(esc_combo, KC_ESC),
[combo_BACK] = COMBO(bspc_combo, KC_BSPC),
[combo_TAB] = COMBO(tab_combo, KC_TAB),
@ -78,4 +78,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};

View file

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

View file

@ -15,5 +15,4 @@
#pragma once
#define COMBO_COUNT 5
#define COMBO_TERM 175

View file

@ -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_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_DOWN] = COMBO(VOLUME_DN_COMBO, KC_VOLD)
};

View file

@ -15,5 +15,4 @@
#pragma once
#define COMBO_COUNT 5
#define COMBO_TERM 175

View file

@ -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_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_DOWN] = COMBO(VOLUME_DN_COMBO, KC_VOLD)
};

View file

@ -15,5 +15,4 @@
#pragma once
#define COMBO_COUNT 5
#define COMBO_TERM 175

View file

@ -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_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_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 COMBO_PDL
#define COMBO_COUNT 28
#define COMBO_TERM 100

View file

@ -16,5 +16,4 @@
#pragma once
/* Combos */
#define COMBO_COUNT 5
#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_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_NUMBAK] = COMBO(combo_numbak,KC_BSPC),
[COMBO_TAB] = COMBO(combo_tab,KC_TAB),

View file

@ -16,5 +16,4 @@
#pragma once
/* Combos */
#define COMBO_COUNT 5
#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_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_NUMBAK] = COMBO(combo_numbak,KC_BSPC),
[COMBO_TAB] = COMBO(combo_tab,KC_TAB),

View file

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

View file

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

View file

@ -17,7 +17,7 @@
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),
};

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};
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.
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
*
*
* Hidden features :
* Hidden features :
* - Left Shift is also Home on a single tap.
* - Left Ctrl is also End on a single tap.
* - Right Shift is also page-up on a single tap.

View file

@ -16,7 +16,6 @@
#pragma once
#define COMBO_TERM 50
#define COMBO_COUNT 50
#define PERMISSIVE_HOLD
#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.
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.
[L_U_PINKY_RING] = COMBO(lu_p_r_combo, KC_TAB),
[L_U_RING_MIDDLE] = COMBO(lu_r_m_combo, KC_QUES),

View file

@ -1,5 +1,4 @@
#pragma once
#define COMBO_TERM 100
#define COMBO_COUNT 38
#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 j_f_combo[] = {KC_F, KC_J, COMBO_END};
combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
// left hand combinations.
[Q_W] = COMBO(q_w_combo, KC_TAB),
[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
#define COMBO_TERM 100
#define COMBO_COUNT 38
#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 j_f_combo[] = {KC_F, KC_J, COMBO_END};
combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
// left hand combinations.
[Q_W] = COMBO(q_w_combo, KC_TAB),
[W_E] = COMBO(w_e_combo, KC_DQT),

View file

@ -17,5 +17,4 @@
#pragma once
#define COMBO_TERM 100
#define COMBO_COUNT 38
#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 j_f_combo[] = {KC_F, KC_J, COMBO_END};
combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
// left hand combinations.
[Q_W] = COMBO(q_w_combo, KC_TAB),
[W_E] = COMBO(w_e_combo, KC_DQT),

View file

@ -1,5 +1,4 @@
#pragma once
#define COMBO_TERM 100
#define COMBO_COUNT 38
#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 j_f_combo[] = {KC_F, KC_J, COMBO_END};
combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
// left hand combinations.
[Q_W] = COMBO(q_w_combo, KC_TAB),
[W_E] = COMBO(w_e_combo, KC_DQT),

View file

@ -1,7 +1,6 @@
#pragma once
#define COMBO_TERM 100
#define COMBO_COUNT 38
#define PERMISSIVE_HOLD
#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.
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.
[COLON_COMMA] = COMBO(colon_comma_combo, KC_TAB),
[COMMA_DOT] = COMBO(comma_dot_combo, KC_QUES),

View file

@ -1,5 +1,4 @@
#pragma once
#define COMBO_TERM 100
#define COMBO_COUNT 38
#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.
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.
[COLON_COMMA] = COMBO(colon_comma_combo, KC_TAB),
[COMMA_DOT] = COMBO(comma_dot_combo, KC_QUES),

View file

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

View file

@ -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 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),
[SLSHUP_PGUP] = COMBO(slashUp_combo, KC_PGUP),
[RALTBKSPC_DELETE] = COMBO(raltBackspace_combo, KC_DEL),

View file

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

View file

@ -15,9 +15,7 @@
#pragma once
// use 1 combo
#define COMBO_COUNT 1
#define COMBO_TERM 300
// mod taps for home row mods
#define TAPPING_TERM_PER_KEY

View file

@ -33,7 +33,7 @@ enum layer_names {
/* combos */
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] = {
/* 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

@ -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_combo6[] = {KC_B, KC_N, 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_combo2, TO(3)),
COMBO(test_combo3, KC_CAPS),

View file

@ -18,5 +18,3 @@
// place overrides here
#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 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),
[COMBO2] = COMBO_ACTION(leftDown_combo),
[COMBO3] = COMBO_ACTION(prevPlay_combo),

View file

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

View file

@ -75,8 +75,6 @@ layer_state_t layer_state_set_user(layer_state_t state) {
}
// 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
// by adding # COMBO_ENABLE = yes
@ -86,6 +84,6 @@ enum combos {
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),
};

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 ONESHOT_TIMEOUT 300 // How long before oneshot times out
// #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 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.

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 ONESHOT_TIMEOUT 300 // How long before oneshot times out
// #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 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.

View file

@ -32,8 +32,6 @@
// how long before oneshot times out
#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 TAP_CODE_DELAY 100

View file

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

View file

@ -35,14 +35,14 @@ enum custom_keycodes {
#define RAISE MO(_RAISE)
#define RAS RAISE
enum combos //match combo_count in config.h
enum combos
{
EU_ENT,
};
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),
};

View file

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

View file

@ -36,7 +36,7 @@ static long int oled_timeout = 300000;
enum combos { ESCAPE_COMBO, DELETE_COMBO };
const uint16_t PROGMEM escape_combo[] = { KC_GRV, KC_1, 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),
[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 COMBO_TERM 20
#define COMBO_COUNT 3
#define PERMISSIVE_HOLD

View file

@ -4,7 +4,6 @@
#pragma once
#ifdef COMBO_ENABLE
# define COMBO_COUNT 4
# define COMBO_TERM 50
#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_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_ent,KC_ENT), // 2
COMBO(combo_tab,KC_TAB), // 3

View file

@ -4,7 +4,6 @@
#pragma once
#ifdef COMBO_ENABLE
# define COMBO_COUNT 4
# define COMBO_TERM 50
#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_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_ent,KC_ENT), // 2
COMBO(combo_tab,KC_TAB), // 3

View file

@ -4,7 +4,6 @@
#pragma once
#ifdef COMBO_ENABLE
# define COMBO_COUNT 4
# define COMBO_TERM 50
#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_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_ent,KC_ENT), // 2
COMBO(combo_tab,KC_TAB), // 3

View file

@ -2,6 +2,4 @@
#define EE_HANDS
#define COMBO_COUNT 10
#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 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_R] = COMBO(zl_combo, KC_AT),
[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 ONESHOT_TIMEOUT 3000 // How long before oneshot times out
// #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 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.

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 ONESHOT_TIMEOUT 3000 // How long before oneshot times out
// #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 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.

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 ONESHOT_TIMEOUT 300 // How long before oneshot times out
// #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 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.

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