Keymap introspection for combos. (#19670)
This commit is contained in:
parent
433dc60686
commit
5faa23d54c
226 changed files with 533 additions and 729 deletions
|
@ -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)
|
||||||
|
|
|
@ -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"},
|
||||||
|
|
|
@ -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`
|
||||||
|
|
|
@ -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/.
|
||||||
|
|
|
@ -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`
|
||||||
|
|
|
@ -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),
|
||||||
};
|
};
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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) }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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(df_tab, KC_TAB),
|
||||||
COMBO(jk_alt, KC_LALT),
|
COMBO(jk_alt, KC_LALT),
|
||||||
};
|
};
|
||||||
|
|
|
@ -20,5 +20,4 @@
|
||||||
|
|
||||||
|
|
||||||
/* Add combos */
|
/* Add combos */
|
||||||
#define COMBO_COUNT 1
|
|
||||||
#define COMBO_TERM 200
|
#define COMBO_TERM 200
|
||||||
|
|
|
@ -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),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -15,4 +15,3 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
#define ONESHOT_TIMEOUT 1000
|
#define ONESHOT_TIMEOUT 1000
|
||||||
#define COMBO_COUNT 2
|
|
||||||
|
|
|
@ -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)),
|
||||||
};
|
};
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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_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),
|
||||||
|
|
|
@ -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]);
|
|
||||||
|
|
|
@ -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),
|
||||||
};
|
};
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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};
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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};
|
||||||
|
|
||||||
|
|
|
@ -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
|
// 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 */
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
|
|
||||||
|
|
||||||
// combo
|
// combo
|
||||||
#define COMBO_COUNT 7
|
|
||||||
#define EXTRA_SHORT_COMBOS
|
#define EXTRA_SHORT_COMBOS
|
||||||
|
|
||||||
//Tapping values
|
//Tapping values
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -15,5 +15,4 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define COMBO_COUNT 8
|
|
||||||
#define COMBO_TERM 40
|
#define COMBO_TERM 40
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -15,5 +15,4 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define COMBO_COUNT 7
|
|
||||||
#define COMBO_TERM 40
|
#define COMBO_TERM 40
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -15,5 +15,4 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define COMBO_COUNT 7
|
|
||||||
#define COMBO_TERM 40
|
#define COMBO_TERM 40
|
||||||
|
|
|
@ -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),
|
||||||
|
@ -89,4 +89,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
)
|
)
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -15,5 +15,4 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define COMBO_COUNT 7
|
|
||||||
#define COMBO_TERM 40
|
#define COMBO_TERM 40
|
||||||
|
|
|
@ -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),
|
||||||
|
@ -78,4 +78,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
)
|
)
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -15,5 +15,4 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define COMBO_COUNT 5
|
|
||||||
#define COMBO_TERM 175
|
#define COMBO_TERM 175
|
||||||
|
|
|
@ -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)
|
||||||
};
|
};
|
||||||
|
|
|
@ -15,5 +15,4 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define COMBO_COUNT 5
|
|
||||||
#define COMBO_TERM 175
|
#define COMBO_TERM 175
|
||||||
|
|
|
@ -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)
|
||||||
};
|
};
|
||||||
|
|
|
@ -15,5 +15,4 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define COMBO_COUNT 5
|
|
||||||
#define COMBO_TERM 175
|
#define COMBO_TERM 175
|
||||||
|
|
|
@ -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)
|
||||||
};
|
};
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -16,5 +16,4 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
/* Combos */
|
/* Combos */
|
||||||
#define COMBO_COUNT 5
|
|
||||||
#define COMBO_TERM 50
|
#define COMBO_TERM 50
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -16,5 +16,4 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
/* Combos */
|
/* Combos */
|
||||||
#define COMBO_COUNT 5
|
|
||||||
#define COMBO_TERM 50
|
#define COMBO_TERM 50
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#define COMBO_COUNT 1
|
|
|
@ -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.
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -20,5 +20,4 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define COMBO_COUNT 3
|
|
||||||
#define COMBO_TERM 200
|
#define COMBO_TERM 200
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -15,9 +15,7 @@
|
||||||
#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
|
||||||
|
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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
|
|
|
@ -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),
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -75,8 +75,6 @@ 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 you’re using).
|
|
||||||
// modify `rules.mk` file
|
// modify `rules.mk` file
|
||||||
// by adding # COMBO_ENABLE = yes
|
// 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};
|
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),
|
||||||
};
|
};
|
|
@ -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.
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
};
|
};
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -2,6 +2,4 @@
|
||||||
|
|
||||||
#define EE_HANDS
|
#define EE_HANDS
|
||||||
|
|
||||||
|
|
||||||
#define COMBO_COUNT 10
|
|
||||||
#define COMBO_TERM 100
|
#define COMBO_TERM 100
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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
Loading…
Reference in a new issue