~ruther/qmk_firmware

5faa23d54ca1e3ab83097f2a07922f48800616e6 — Nick Brassel 2 years ago 433dc60
Keymap introspection for combos. (#19670)

226 files changed, 533 insertions(+), 729 deletions(-)

M builddefs/build_test.mk
M data/mappings/info_config.hjson
M docs/config_options.md
M docs/feature_combo.md
M docs/ja/config_options.md
M docs/ja/feature_combo.md
M keyboards/0xcb/splaytoraid/keymaps/pi/config.h
M keyboards/0xcb/splaytoraid/keymaps/pi/keymap.c
M keyboards/3w6/keymaps/helltm/combos.h
M keyboards/40percentclub/gherkin/keymaps/stevexyz/config.h
M keyboards/40percentclub/nori/keymaps/wings_36key/config.h
M keyboards/40percentclub/nori/keymaps/wings_36key/keymap.c
M keyboards/ashpil/modelm_usbc/keymaps/ashpil/config.h
M keyboards/ashpil/modelm_usbc/keymaps/ashpil/keymap.c
M keyboards/b_sides/rev41lp/keymaps/namnlos/config.h
M keyboards/b_sides/rev41lp/keymaps/namnlos/keymap.c
M keyboards/bluebell/swoop/keymaps/kyek/config.h
M keyboards/bluebell/swoop/keymaps/kyek/keymap.c
M keyboards/centromere/keymaps/mini_bom/config.h
M keyboards/centromere/keymaps/mini_bom/keymap.c
M keyboards/chord/zero/keymaps/default/keymap.c
M keyboards/converter/usb_usb/keymaps/chriskopher/combo.c
M keyboards/converter/usb_usb/keymaps/chriskopher/config.h
M keyboards/converter/usb_usb/keymaps/narze/config.h
M keyboards/crkbd/keymaps/antosha417/keymap.c
M keyboards/crkbd/keymaps/cameronjlarsen/keymap.c
M keyboards/crkbd/keymaps/markstos/config.h
M keyboards/crkbd/keymaps/markstos/keymap.c
M keyboards/crkbd/keymaps/nimishgautam/config.h
M keyboards/crkbd/keymaps/nimishgautam/keymap.c
M keyboards/crkbd/keymaps/pdl/config.h
M keyboards/drhigsby/dubba175/keymaps/default/config.h
M keyboards/drhigsby/dubba175/keymaps/default/keymap.c
M keyboards/drhigsby/ogurec/keymaps/default/config.h
M keyboards/drhigsby/ogurec/keymaps/default/keymap.c
M keyboards/drhigsby/packrat/keymaps/3uc/config.h
M keyboards/drhigsby/packrat/keymaps/3uc/keymap.c
M keyboards/drhigsby/packrat/keymaps/default/config.h
M keyboards/drhigsby/packrat/keymaps/default/keymap.c
M keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h
M keyboards/eu_isolation/keymaps/bigspace/config.h
M keyboards/eu_isolation/keymaps/bigspace/keymap.c
M keyboards/eu_isolation/keymaps/default/config.h
M keyboards/eu_isolation/keymaps/default/keymap.c
M keyboards/eu_isolation/keymaps/mit/config.h
M keyboards/eu_isolation/keymaps/mit/keymap.c
M keyboards/foostan/cornelius/keymaps/pdl/config.h
M keyboards/free_willy/keymaps/colemak/config.h
M keyboards/free_willy/keymaps/colemak/keymap.c
M keyboards/free_willy/keymaps/default/config.h
M keyboards/free_willy/keymaps/default/keymap.c
M keyboards/gboards/g/keymap_combo.h
M keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/config.h
M keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/keymap.c
D keyboards/handwired/aek64/keymaps/4sstylz/config.h
M keyboards/handwired/aek64/keymaps/4sstylz/keymap.c
M keyboards/ibnuda/alicia_cook/keymaps/rick/config.h
M keyboards/ibnuda/alicia_cook/keymaps/rick/keymap.c
M keyboards/ibnuda/squiggle/keymaps/default/config.h
M keyboards/ibnuda/squiggle/keymaps/default/keymap.c
M keyboards/ibnuda/squiggle/keymaps/default38/config.h
M keyboards/ibnuda/squiggle/keymaps/default38/keymap.c
M keyboards/ibnuda/squiggle/keymaps/defaultfull/config.h
M keyboards/ibnuda/squiggle/keymaps/defaultfull/keymap.c
M keyboards/ibnuda/squiggle/keymaps/defaultminidox/config.h
M keyboards/ibnuda/squiggle/keymaps/defaultminidox/keymap.c
M keyboards/ibnuda/squiggle/keymaps/rick-complicated/config.h
M keyboards/ibnuda/squiggle/keymaps/rick-complicated/keymap.c
M keyboards/ibnuda/squiggle/keymaps/rick/config.h
M keyboards/ibnuda/squiggle/keymaps/rick/keymap.c
M keyboards/idobao/id80/v2/ansi/keymaps/msf/config.h
M keyboards/idobao/id80/v2/ansi/keymaps/msf/keymap.c
M keyboards/input_club/ergodox_infinity/keymaps/narze/config.h
M keyboards/k34/keymaps/default/config.h
M keyboards/k34/keymaps/default/keymap.c
D keyboards/keebformom/keymaps/default/config.h
M keyboards/keebformom/keymaps/default/keymap.c
M keyboards/keycapsss/plaid_pad/keymaps/oled/config.h
M keyboards/keycapsss/plaid_pad/keymaps/oled/keymap.c
M keyboards/kprepublic/bm40hsrgb/keymaps/34keys/config.h
M keyboards/kprepublic/bm40hsrgb/keymaps/34keys/keymap.c
M keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/config.h
M keyboards/kprepublic/bm80hsrgb/keymaps/peepeetee/config.h
M keyboards/kprepublic/jj40/keymaps/stevexyz/config.h
M keyboards/lets_split/keymaps/shaymdev/config.h
M keyboards/lets_split/keymaps/shaymdev/keymap.c
M keyboards/lily58/keymaps/muuko/config.h
M keyboards/lily58/keymaps/muuko/keymap.c
M keyboards/lily58/keymaps/narze/config.h
M keyboards/makenova/omega/omega4/keymaps/default/config.h
M keyboards/makenova/omega/omega4/keymaps/default/keymap.c
M keyboards/makenova/omega/omega4/keymaps/default_10u_bar/config.h
M keyboards/makenova/omega/omega4/keymaps/default_10u_bar/keymap.c
M keyboards/makenova/omega/omega4/keymaps/default_6u_bar/config.h
M keyboards/makenova/omega/omega4/keymaps/default_6u_bar/keymap.c
M keyboards/maple_computing/minidox/keymaps/rsthd_combos/config.h
M keyboards/maple_computing/minidox/keymaps/rsthd_combos/keymap.c
M keyboards/massdrop/alt/keymaps/b_/config.h
M keyboards/massdrop/alt/keymaps/pregame/config.h
M keyboards/massdrop/ctrl/keymaps/endgame/config.h
M keyboards/massdrop/ctrl/keymaps/matthewrobo/config.h
M keyboards/massdrop/ctrl/keymaps/xanimos/config.h
M keyboards/maxr1998/pulse4k/config.h
M keyboards/maxr1998/pulse4k/keymaps/default/keymap.c
M keyboards/maxr1998/pulse4k/keymaps/maxr1998/keymap.c
M keyboards/nimrod/keymaps/default/config.h
M keyboards/nimrod/keymaps/default/keymap.c
M keyboards/nimrod/keymaps/default_center_space/config.h
M keyboards/nimrod/keymaps/default_center_space/keymap.c
M keyboards/nimrod/keymaps/default_left_space/config.h
M keyboards/nimrod/keymaps/default_left_space/keymap.c
M keyboards/nimrod/keymaps/default_right_space/config.h
M keyboards/nimrod/keymaps/default_right_space/keymap.c
M keyboards/nimrod/keymaps/default_split_space/config.h
M keyboards/nimrod/keymaps/default_split_space/keymap.c
M keyboards/orthodox/keymaps/shaymdev/config.h
M keyboards/orthodox/keymaps/shaymdev/keymap.c
M keyboards/pierce/keymaps/durken1/config.h
M keyboards/pierce/keymaps/durken1/keymap.c
M keyboards/planck/keymaps/antosha417/keymap.c
M keyboards/planck/keymaps/ariccb/keymap.c
M keyboards/planck/keymaps/dvz/config.h
M keyboards/planck/keymaps/dvz/keymap.c
M keyboards/planck/keymaps/narze/config.h
M keyboards/planck/keymaps/rootiest/config.h
M keyboards/planck/keymaps/rootiest/keymap.c
M keyboards/preonic/keymaps/brauner/keymap.c
M keyboards/program_yoink/ortho/keymaps/default/config.h
M keyboards/program_yoink/ortho/keymaps/default/keymap.c
M keyboards/program_yoink/ortho/keymaps/ortho_split/config.h
M keyboards/program_yoink/ortho/keymaps/ortho_split/keymap.c
M keyboards/program_yoink/staggered/keymaps/default/config.h
M keyboards/program_yoink/staggered/keymaps/default/keymap.c
M keyboards/program_yoink/staggered/keymaps/split_bar/config.h
M keyboards/program_yoink/staggered/keymaps/split_bar/keymap.c
M keyboards/projectcain/relic/keymaps/default/config.h
M keyboards/projectcain/relic/keymaps/default/keymap.c
M keyboards/projectcain/vault35/keymaps/default/config.h
M keyboards/projectcain/vault35/keymaps/default/keymap.c
M keyboards/projectcain/vault45/keymaps/default/config.h
M keyboards/projectcain/vault45/keymaps/default/keymap.c
M keyboards/q4z/keymaps/default/config.h
M keyboards/q4z/keymaps/default/keymap.c
M keyboards/q4z/keymaps/rjboone/config.h
M keyboards/q4z/keymaps/rjboone/keymap.c
M keyboards/qpockets/eggman/keymaps/default/config.h
M keyboards/qpockets/eggman/keymaps/default/keymap.c
M keyboards/qpockets/space_space/rev1/keymaps/big_space/config.h
M keyboards/qpockets/space_space/rev1/keymaps/big_space/keymap.c
M keyboards/qpockets/space_space/rev1/keymaps/default/config.h
M keyboards/qpockets/space_space/rev1/keymaps/default/keymap.c
M keyboards/qpockets/space_space/rev2/keymaps/big_space/config.h
M keyboards/qpockets/space_space/rev2/keymaps/big_space/keymap.c
M keyboards/qpockets/space_space/rev2/keymaps/default/config.h
M keyboards/qpockets/space_space/rev2/keymaps/default/keymap.c
M keyboards/qpockets/space_space/rev2/keymaps/qpockets/config.h
M keyboards/qpockets/space_space/rev2/keymaps/qpockets/keymap.c
M keyboards/qpockets/wanten/keymaps/2u_bars/config.h
M keyboards/qpockets/wanten/keymaps/2u_bars/keymap.c
M keyboards/qpockets/wanten/keymaps/625_bar/config.h
M keyboards/qpockets/wanten/keymaps/625_bar/keymap.c
M keyboards/qpockets/wanten/keymaps/default/config.h
M keyboards/qpockets/wanten/keymaps/default/keymap.c
M keyboards/rgbkb/zen/rev1/keymaps/cwebster2/config.h
M keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/combo.c
M keyboards/splitkb/kyria/keymaps/cameronjlarsen/keymap.c
M keyboards/splitkb/kyria/keymaps/cwebster2/config.h
M keyboards/splitkb/kyria/keymaps/cwebster2/keymap.c
M keyboards/synapse/keymaps/7u_space/config.h
M keyboards/synapse/keymaps/7u_space/keymap.c
M keyboards/synapse/keymaps/default/config.h
M keyboards/synapse/keymaps/default/keymap.c
M keyboards/tominabox1/adalyn/keymaps/default/config.h
M keyboards/tominabox1/adalyn/keymaps/default/keymap.c
M keyboards/tominabox1/le_chiffre/keymaps/default/config.h
M keyboards/tominabox1/le_chiffre/keymaps/default/keymap.c
M keyboards/tominabox1/qaz/keymaps/default/config.h
M keyboards/tominabox1/qaz/keymaps/default/keymap.c
M keyboards/tominabox1/qaz/keymaps/default_big_space/config.h
M keyboards/tominabox1/qaz/keymaps/default_big_space/keymap.c
M keyboards/tominabox1/underscore33/rev1/keymaps/default/config.h
M keyboards/tominabox1/underscore33/rev1/keymaps/default/keymap.c
M keyboards/tominabox1/underscore33/rev1/keymaps/default_big_space/config.h
M keyboards/tominabox1/underscore33/rev1/keymaps/default_big_space/keymap.c
M keyboards/tominabox1/underscore33/rev2/keymaps/default/config.h
M keyboards/tominabox1/underscore33/rev2/keymaps/default/keymap.c
M keyboards/tominabox1/underscore33/rev2/keymaps/default_big_space/config.h
M keyboards/tominabox1/underscore33/rev2/keymaps/default_big_space/keymap.c
M keyboards/xiudi/xd75/keymaps/4sstylz/config.h
M keyboards/xiudi/xd75/keymaps/4sstylz/keymap.c
M keyboards/ymdk/melody96/keymaps/dvz/config.h
M keyboards/ymdk/melody96/keymaps/dvz/keymap.c
M quantum/keymap_introspection.c
M quantum/keymap_introspection.h
M quantum/process_keycode/process_combo.c
M quantum/process_keycode/process_combo.h
M tests/caps_word/caps_word_combo/test.mk
M tests/caps_word/caps_word_combo/test_caps_word_combo.cpp
A tests/caps_word/caps_word_combo/test_combos.c
M tests/combo/test.mk
M tests/combo/test_combo.cpp
A tests/combo/test_combos.c
M tests/test_common/keycode_util.hpp
M users/art/funcs/string_funcs.c
M users/danielo515/combo.c
M users/danielo515/config.h
M users/ericgebhart/extensions/keymap_combo.h
M users/ibnuda/combo.h
M users/ibnuda/config.h
M users/issmirnov/config.h
M users/issmirnov/issmirnov.c
M users/kuchosauronad0/combo.h
M users/kuchosauronad0/config.h
M users/manna-harbour_miryoku/config.h
M users/manna-harbour_miryoku/manna-harbour_miryoku.c
M users/muppetjones/config.h
M users/muppetjones/features/combos.c
M users/narze/superduper.c
M users/ninjonas/combos.c
M users/ninjonas/config.h
M users/pdl/pdl.c
M users/talljoe/config.h
M users/uqs/uqs.c
M users/yet-another-developer/combo.h
M users/yet-another-developer/config.h
M users/zigotica/combos.c
M builddefs/build_test.mk => builddefs/build_test.mk +4 -0
@@ 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)

M data/mappings/info_config.hjson => data/mappings/info_config.hjson +2 -2
@@ 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"},

M docs/config_options.md => docs/config_options.md +0 -2
@@ 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`

M docs/feature_combo.md => docs/feature_combo.md +5 -28
@@ 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/.

M docs/ja/config_options.md => docs/ja/config_options.md +0 -2
@@ 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`

M docs/ja/feature_combo.md => docs/ja/feature_combo.md +3 -3
@@ 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),
};

M keyboards/0xcb/splaytoraid/keymaps/pi/config.h => keyboards/0xcb/splaytoraid/keymaps/pi/config.h +0 -1
@@ 10,7 10,6 @@


#ifdef COMBO_ENABLE
    #define COMBO_COUNT 9
    #define COMBO_TERM 20
    #define COMBO_ONLY_FROM_LAYER 0
#endif

M keyboards/0xcb/splaytoraid/keymaps/pi/keymap.c => keyboards/0xcb/splaytoraid/keymaps/pi/keymap.c +1 -5
@@ 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) }
};





M keyboards/3w6/keymaps/helltm/combos.h => keyboards/3w6/keymaps/helltm/combos.h +1 -3
@@ 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

M keyboards/40percentclub/gherkin/keymaps/stevexyz/config.h => keyboards/40percentclub/gherkin/keymaps/stevexyz/config.h +0 -2
@@ 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

M keyboards/40percentclub/nori/keymaps/wings_36key/config.h => keyboards/40percentclub/nori/keymaps/wings_36key/config.h +0 -2
@@ 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


M keyboards/40percentclub/nori/keymaps/wings_36key/keymap.c => keyboards/40percentclub/nori/keymaps/wings_36key/keymap.c +2 -2
@@ 99,14 99,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  COMBO(df_tab, KC_TAB),
  COMBO(jk_alt, KC_LALT),
};

layer_state_t layer_state_set_user(layer_state_t state) {
  return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}        
}

uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {

M keyboards/ashpil/modelm_usbc/keymaps/ashpil/config.h => keyboards/ashpil/modelm_usbc/keymaps/ashpil/config.h +0 -1
@@ 20,5 20,4 @@


/* Add combos */
#define COMBO_COUNT 1
#define COMBO_TERM 200

M keyboards/ashpil/modelm_usbc/keymaps/ashpil/keymap.c => keyboards/ashpil/modelm_usbc/keymaps/ashpil/keymap.c +2 -2
@@ 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),
};



@@ 44,4 44,4 @@ void process_combo_event(uint16_t combo_index, bool pressed) {
      }
      break;
  }
}
\ No newline at end of file
}

M keyboards/b_sides/rev41lp/keymaps/namnlos/config.h => keyboards/b_sides/rev41lp/keymaps/namnlos/config.h +0 -2
@@ 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

M keyboards/b_sides/rev41lp/keymaps/namnlos/keymap.c => keyboards/b_sides/rev41lp/keymaps/namnlos/keymap.c +1 -1
@@ 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),

M keyboards/bluebell/swoop/keymaps/kyek/config.h => keyboards/bluebell/swoop/keymaps/kyek/config.h +0 -1
@@ 15,4 15,3 @@
 */
#pragma once
#define ONESHOT_TIMEOUT 1000
#define COMBO_COUNT 2

M keyboards/bluebell/swoop/keymaps/kyek/keymap.c => keyboards/bluebell/swoop/keymaps/kyek/keymap.c +17 -17
@@ 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)),
};


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

M keyboards/centromere/keymaps/mini_bom/config.h => keyboards/centromere/keymaps/mini_bom/config.h +0 -1
@@ 17,7 17,6 @@
#pragma once

#ifdef COMBO_ENABLE
#    define COMBO_COUNT 10
#    define COMBO_TERM 50
#endif


M keyboards/centromere/keymaps/mini_bom/keymap.c => keyboards/centromere/keymaps/mini_bom/keymap.c +7 -7
@@ 20,7 20,7 @@
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.  
// entirely and just use numbers.


enum centromere_layers


@@ 57,7 57,7 @@ enum centromere_layers
 *  |        |       |        |           |        |    |   |
 *  '-------------------------'           '-----------------'
 */
 

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

/* Keymap 0: Basic layer


@@ 97,7 97,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 KC_NO, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE,        KC_GRV, KC_TILD, KC_TRNS, KC_TRNS, KC_BSLS, KC_NO,
 KC_NO, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_BTN2,       KC_PLUS, KC_MINS, KC_SLSH, KC_ASTR, KC_QUOT, KC_NO,
 KC_NO, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_BTN1,      KC_AMPR, KC_EQL, KC_COMM, KC_DOT, KC_MINS, KC_NO,
 CM_TOGG, KC_SCLN, KC_EQL, KC_EQL, KC_SCLN, KC_DEL 
 CM_TOGG, KC_SCLN, KC_EQL, KC_EQL, KC_SCLN, KC_DEL
  ),

    /* Keymap 2: Pad/Function layer


@@ 115,7 115,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_NUMB] = LAYOUT(
     KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5,           KC_6, KC_7, KC_8, KC_9, KC_0, KC_NO,
     KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,      KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_VOLU, KC_NO,
     KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,     KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_VOLD, KC_NO, 
     KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,     KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_VOLD, KC_NO,
     KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT
     ),



@@ 137,8 137,8 @@ const uint16_t PROGMEM combo_less[] = {KC_H, KC_J, COMBO_END};
const uint16_t PROGMEM combo_more[] = {KC_K, KC_L, COMBO_END};
const uint16_t PROGMEM combo_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),


@@ 148,6 148,6 @@ combo_t key_combos[COMBO_COUNT] = {
    [COMBO_LESS] = COMBO(combo_less,KC_LT),
    [COMBO_MORE] = COMBO(combo_more,KC_GT),
    [COMBO_QUOT] = COMBO(combo_quot, KC_QUOT),
    [COMBO_DASH] = COMBO(combo_dash, KC_MINS),  
    [COMBO_DASH] = COMBO(combo_dash, KC_MINS),
};
#endif

M keyboards/chord/zero/keymaps/default/keymap.c => keyboards/chord/zero/keymaps/default/keymap.c +0 -2
@@ 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]);

M keyboards/converter/usb_usb/keymaps/chriskopher/combo.c => keyboards/converter/usb_usb/keymaps/chriskopher/combo.c +1 -1
@@ 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),
};

M keyboards/converter/usb_usb/keymaps/chriskopher/config.h => keyboards/converter/usb_usb/keymaps/chriskopher/config.h +0 -1
@@ 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

M keyboards/converter/usb_usb/keymaps/narze/config.h => keyboards/converter/usb_usb/keymaps/narze/config.h +0 -1
@@ 24,7 24,6 @@
#define TAPPING_TERM 100

#define COMBO_TERM 20
#define COMBO_COUNT 1

#define PERMISSIVE_HOLD


M keyboards/crkbd/keymaps/antosha417/keymap.c => keyboards/crkbd/keymaps/antosha417/keymap.c +2 -6
@@ 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};


@@ 216,7 213,7 @@ combo_t key_combos[] = {
    [SAVEQ_COMBO] = COMBO(saveq_combo, VIM_SAVE),
    [BSPCWQ_COMBO] = COMBO(bspcwq_combo, DELETE_WORD),
};
 


#ifdef OLED_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) {


@@ 398,4 395,3 @@ void matrix_scan_user(void) {
  #include "mod_tap_keys.h"
  #undef MOD_TAP_KEY
}


M keyboards/crkbd/keymaps/cameronjlarsen/keymap.c => keyboards/crkbd/keymaps/cameronjlarsen/keymap.c +2 -5
@@ 30,7 30,7 @@ enum layers {

// One shot mods
enum keycodes {
    OS_SHFT = QK_USER,    
    OS_SHFT = QK_USER,
    OS_CTRL,
    OS_ALT,
    OS_GUI,


@@ 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};


M keyboards/crkbd/keymaps/markstos/config.h => keyboards/crkbd/keymaps/markstos/config.h +1 -4
@@ 43,11 43,9 @@ This is the C configuration file for the keymap
#define QMK_SPEAKER C6

// When enabled, typing a mod-tap plus second within term will register as the mod-combo
// Ref: https://beta.docs.qmk.fm/using-qmk/software-features/tap_hold#permissive-hold 
// Ref: https://beta.docs.qmk.fm/using-qmk/software-features/tap_hold#permissive-hold
#define PERMISSIVE_HOLD

#define 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 */


M keyboards/crkbd/keymaps/markstos/keymap.c => keyboards/crkbd/keymaps/markstos/keymap.c +2 -2
@@ 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


@@ 43,7 43,7 @@ enum custom_layers {
#define GUI_ENT  GUI_T(KC_ENT)
#define LOW_TAB  LT(_LOWER, KC_TAB)
#define RSE_BSP  LT(_RAISE, KC_BSPC)
#define OSM_SFT  OSM(MOD_LSFT) 
#define OSM_SFT  OSM(MOD_LSFT)


// For _RAISE layer

M keyboards/crkbd/keymaps/nimishgautam/config.h => keyboards/crkbd/keymaps/nimishgautam/config.h +1 -2
@@ 15,7 15,6 @@


// combo
#define COMBO_COUNT 7
#define EXTRA_SHORT_COMBOS

//Tapping values


@@ 68,7 67,7 @@
    // NOTE: the below effects are super cool but they go absolutely nuts if you manually set hsv colors (eg with layers)

    //#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
    //#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH 
    //#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
    //#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
#endif


M keyboards/crkbd/keymaps/nimishgautam/keymap.c => keyboards/crkbd/keymaps/nimishgautam/keymap.c +32 -32
@@ 20,7 20,7 @@ enum custom_key_codes {
    MOVE_END_LINE_TERMINAL, // move to the end of the line in the terminal
    /* macros */
    PASTE_VIM, // paste in vim from system register
    ACIRCLE, // å 
    ACIRCLE, // å
    ADOT, // ä
    ODOT, // ö
    COMPOSE_MACRO, // compose key for mac or linux


@@ 44,7 44,7 @@ enum {
#define SHOW_WINDOWS    LCTL(KC_UP) //'Expose' on Mac, overview on linux. Just all the windows
#define WINDOW_LEFT LCTL(LGUI(LSFT(KC_LEFT))) //custom shortcut for this feature -- make window take up 50% left screen (using gui and ctl to make it os agnostic)
#define WINDOW_RIGHT LCTL(LGUI(LSFT(KC_RIGHT))) //custom shortcut for this feature -- make window take up 50% right screen (using gui and ctl to make it os agnostic)/fully custom shortcut, using ctl and gui keys so will need them both irrespective of os
#define SHOW_APP_WINDOWS LCTL(KC_DOWN) 
#define SHOW_APP_WINDOWS LCTL(KC_DOWN)
#define LOCK_SCREEN     LCTL(LGUI(KC_Q)) //manually set this on linux to match osx default
#define EURO            LALT(LSFT(KC_2))
#define EMOJI_KBD       LCTL(LGUI(KC_SPACE)) //manually set this on linux to match osx default, with 'emote' on linux and a custom shortcut (probably better to use compose feature)


@@ 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),


@@ 113,7 113,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

  [_NUMS] = LAYOUT_split_3x6_3( //numbers
  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
     SCREENSHOT,   KC_EXCLAIM,KC_AT, KC_HASH, KC_DOLLAR,KC_PERCENT,            KC_CIRCUMFLEX,    KC_7,    KC_8,    KC_9,    KC_TRANSPARENT, KC_PIPE, 
     SCREENSHOT,   KC_EXCLAIM,KC_AT, KC_HASH, KC_DOLLAR,KC_PERCENT,            KC_CIRCUMFLEX,    KC_7,    KC_8,    KC_9,    KC_TRANSPARENT, KC_PIPE,
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
      TO(_BASE), KC_LCTL, KC_LALT, KC_RSFT, KC_LGUI,KC_PLUS,                    KC_EQL, KC_4,  KC_5,  KC_6,  KC_BSLS, KC_TRANSPARENT,
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|


@@ 125,7 125,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

     [_NUM_MASK] = LAYOUT_split_3x6_3( //NUM MASK, so I can still have backspace/enter/tab etc but with the nums, arrows and formatters too
  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
     KC_TRANSPARENT, KC_TRANSPARENT,KC_TRANSPARENT, KC_UP, KC_TRANSPARENT,KC_TRANSPARENT,      KC_TRANSPARENT, KC_7,    KC_8,    KC_9, KC_TRANSPARENT, KC_TRANSPARENT, 
     KC_TRANSPARENT, KC_TRANSPARENT,KC_TRANSPARENT, KC_UP, KC_TRANSPARENT,KC_TRANSPARENT,      KC_TRANSPARENT, KC_7,    KC_8,    KC_9, KC_TRANSPARENT, KC_TRANSPARENT,
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
      TO(_BASE), KC_TRANSPARENT, KC_LEFT, KC_DOWN, KC_RIGHT,KC_TRANSPARENT,         KC_TRANSPARENT, KC_4,  KC_5,  KC_6, KC_TRANSPARENT, KC_TRANSPARENT,
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|


@@ 164,7 164,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

   [_FN_KEYS] = LAYOUT_split_3x6_3( //fn keys, terminal text navigation keys
  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
     KC_TRANSPARENT, KC_LCBR,KC_LBRC, KC_RBRC, KC_RCBR, MOVE_BEGIN_LINE_TERMINAL,                           MOVE_END_LINE_TERMINAL, KC_F7,    KC_F8,    KC_F9,    KC_F11, KC_TRANSPARENT, 
     KC_TRANSPARENT, KC_LCBR,KC_LBRC, KC_RBRC, KC_RCBR, MOVE_BEGIN_LINE_TERMINAL,                           MOVE_END_LINE_TERMINAL, KC_F7,    KC_F8,    KC_F9,    KC_F11, KC_TRANSPARENT,
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
      TO(_BASE), KC_LCTL, KC_LALT, KC_RSFT, KC_LGUI, KC_TRANSPARENT,                                               KC_TRANSPARENT, KC_F4,  KC_F5,  KC_F6,  KC_F12, KC_TRANSPARENT,
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|


@@ 173,7 173,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
                                          KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT , KC_HASH  ,  KC_TRANSPARENT, KC_F10
                                      //`--------------------------'  `--------------------------'
  )
  

};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {


@@ 183,19 183,19 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {

    // as of this writing, you can't do a layer tap (LT)
    // and also send a shifted code, like left parens
    // If you call such a function, it'll do the layer shift but 
    // If you call such a function, it'll do the layer shift but
    // it'll ignore the key code on tap... this is the workaround
 

    case LT(_NUMS,KC_LPRN): // Shift to _NUMS layer on hold, but send left paren on press
        if (record->tap.count && record->event.pressed) {
            tap_code16(KC_LPRN); 
            return false; 
            tap_code16(KC_LPRN);
            return false;
        }
    break;
    case LT(_NUMS,KC_RPRN): // Shift to _NUMS on hold, send right parens on press
        if (record->tap.count && record->event.pressed) {
            tap_code16(KC_RPRN); 
            return false; 
            tap_code16(KC_RPRN);
            return false;
        }
    break;



@@ 203,20 203,20 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
            if (record->tap.count && record->event.pressed) {
                tap_code16(SHOW_WINDOWS); // Intercept tap function
            } else if (record->event.pressed) {
                tap_code16(WINDOW_LEFT); // Intercept hold function 
                tap_code16(WINDOW_LEFT); // Intercept hold function
            }
        return false;
        break;
    

    case LT(0, NUMERIC_WIN_RIGHT):
            if (record->tap.count && record->event.pressed) {
                layer_on(_NUM_MASK);// Intercept tap function
            } else if (record->event.pressed) {
                tap_code16(WINDOW_RIGHT); // Intercept hold function 
                tap_code16(WINDOW_RIGHT); // Intercept hold function
            }
        return false;
        break;
    

    case PASTE_VIM:
        if (record->event.pressed){
            SEND_STRING(SS_TAP(X_ESCAPE)"\"+pi");


@@ 225,7 225,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
        break;

    //only read the keymap config if it's one of the below cases (instead of every time)
    case DEL_WORD: 
    case DEL_WORD:
    case SELECT_LEFT_WD:
    case SELECT_RIGHT_WD:
    case SELECT_LEFT_LINE:


@@ 235,7 235,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    case MOVE_LEFT_LINE:
    case MOVE_RIGHT_LINE:
    case PASTE_NOSTYLE:
    case MOVE_BEGIN_LINE_TERMINAL:     
    case MOVE_BEGIN_LINE_TERMINAL:
    case MOVE_END_LINE_TERMINAL:
    case ACIRCLE:
    case ADOT:


@@ 313,28 313,28 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
                    if(keymap_config.swap_lctl_lgui){ //Linux
                        tap_code16(LCTL(RSFT(KC_V)));
                    } else { //osx
                        tap_code16(LGUI(LALT(LSFT(KC_V)))); 
                        tap_code16(LGUI(LALT(LSFT(KC_V))));
                    }
                break;
                case MOVE_BEGIN_LINE_TERMINAL:
                    if(keymap_config.swap_lctl_lgui){ //Linux
                        tap_code16(KC_HOME);
                    } else { //osx
                        tap_code16(LSFT(KC_HOME)); 
                        tap_code16(LSFT(KC_HOME));
                    }
                break;
                case MOVE_END_LINE_TERMINAL:
                    if(keymap_config.swap_lctl_lgui){ //Linux
                        tap_code16(KC_END);
                    } else { //osx
                        tap_code16(LSFT(KC_END)); 
                        tap_code16(LSFT(KC_END));
                    }
                break;
                case ACIRCLE: // å
                    if(keymap_config.swap_lctl_lgui){ //Linux
                        SEND_STRING(SS_TAP(X_COMPOSE_KEY)"aa");
                    } else { //osx
                        tap_code16(LALT(KC_A)); 
                        tap_code16(LALT(KC_A));
                    }
                break;
                case ADOT: // ä


@@ 351,14 351,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
                        SEND_STRING(SS_LALT("u")"o");
                    }
                break;
                case COMPOSE_MACRO: 
                case COMPOSE_MACRO:
                    if(keymap_config.swap_lctl_lgui){ //Linux
                        tap_code16(COMPOSE_KEY);
                    } else { //osx
                        tap_code16(COMPOSE_MAC);
                    }
                break;
                case SCREENSHOT: 
                case SCREENSHOT:
                    if(keymap_config.swap_lctl_lgui){ //Linux
                        tap_code16(KC_PSCR);
                    } else { //osx


@@ 381,7 381,7 @@ void dance_left_finished (tap_dance_state_t *state, void *user_data) {
    if(keymap_config.swap_lctl_lgui){ //Linux
        tap_code16(KC_HOME);
    } else { //osx
    tap_code16(LGUI(KC_LEFT));              
    tap_code16(LGUI(KC_LEFT));
    }
  } else { //2 taps, make a circumflex
    tap_code16(KC_CIRC);


@@ 394,7 394,7 @@ void dance_right_finished (tap_dance_state_t *state, void *user_data) {
    if(keymap_config.swap_lctl_lgui){ //Linux
        tap_code16(KC_END);
    } else { //osx
    tap_code16(LGUI(KC_RIGHT));              
    tap_code16(LGUI(KC_RIGHT));
    }
  } else { //2 taps, dollar
    tap_code16(KC_DOLLAR);


@@ 429,7 429,7 @@ void set_lighting_user(void) {
            led_t led_state = host_keyboard_led_state();
            if(led_state.caps_lock){
                rgblight_sethsv_noeeprom(HSV_RED);
            } 
            }
            //rgblight_sethsv(HSV_OFF);
        break;
        case _NUMS:


@@ 482,7 482,7 @@ void oled_render_general_state(void){
    else {
        oled_write_ln_P(PSTR("OSX"), false);
    }
    

    //oled_write_ln(get_u8_str(get_current_wpm(), '0'), false);
    /*
    led_t led_state = host_keyboard_led_state();


@@ 492,7 492,7 @@ void oled_render_general_state(void){
    //Layer color has to be handled by master


    // led state doesn't have to be handled by master, but 
    // led state doesn't have to be handled by master, but
    // the keyboard will freeze if you type too fast
    // and have this handled on the slave side



@@ 541,7 541,7 @@ void oled_render_layer_mod_state(void) {
            break;
        case _FN_KEYS:
            oled_write_ln_P(PSTR("Fn"), false);
            break;   
            break;
        default:
            break;
    }


@@ 575,7 575,7 @@ void oled_render_layer_mod_state(void) {
bool oled_task_user(void) {
    if (is_keyboard_master()) {
        oled_render_general_state();
    }  
    }
    else {
        oled_render_layer_mod_state();
    }

M keyboards/crkbd/keymaps/pdl/config.h => keyboards/crkbd/keymaps/pdl/config.h +0 -1
@@ 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

M keyboards/drhigsby/dubba175/keymaps/default/config.h => keyboards/drhigsby/dubba175/keymaps/default/config.h +0 -1
@@ 15,5 15,4 @@
 */
#pragma once

#define COMBO_COUNT 8
#define COMBO_TERM 40

M keyboards/drhigsby/dubba175/keymaps/default/keymap.c => keyboards/drhigsby/dubba175/keymaps/default/keymap.c +4 -4
@@ 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),


@@ 71,12 71,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_HOME, KC_END, KC_PIPE, KC_BSLS, KC_DQUO, KC_QUOT,
                xxx, xxx, xxx, xxx, KC_PGUP, KC_PGDN
  ),
     

    [_FN] = LAYOUT(
        KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
        xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, KC_F11, KC_F12,
        xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, 
                xxx, xxx, xxx, xxx, xxx, xxx        
        xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx,
                xxx, xxx, xxx, xxx, xxx, xxx
  )

};

M keyboards/drhigsby/ogurec/keymaps/default/config.h => keyboards/drhigsby/ogurec/keymaps/default/config.h +0 -1
@@ 15,5 15,4 @@
 */
#pragma once

#define COMBO_COUNT 7
#define COMBO_TERM 40

M keyboards/drhigsby/ogurec/keymaps/default/keymap.c => keyboards/drhigsby/ogurec/keymaps/default/keymap.c +3 -3
@@ 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),


@@ 68,9 68,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  ),

    [_FN] = LAYOUT_ortho_3x12(
        KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, 
        KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
        xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx,
        KC_VOLD, KC_VOLU, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_MUTE, KC_MRWD, KC_MFFD, xxx, xxx, xxx       
        KC_VOLD, KC_VOLU, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_MUTE, KC_MRWD, KC_MFFD, xxx, xxx, xxx
  )

};

M keyboards/drhigsby/packrat/keymaps/3uc/config.h => keyboards/drhigsby/packrat/keymaps/3uc/config.h +0 -1
@@ 15,5 15,4 @@
 */
#pragma once

#define COMBO_COUNT 7
#define COMBO_TERM 40

M keyboards/drhigsby/packrat/keymaps/3uc/keymap.c => keyboards/drhigsby/packrat/keymaps/3uc/keymap.c +3 -4
@@ 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),


@@ 77,7 77,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        xxx, xxx, xxx, xxx, xxx,                    BASE,           xxx, KC_P7, KC_P8, KC_P9, KC_PPLS,
        xxx, xxx, xxx, xxx, xxx,                    xxx,           xxx, KC_P4, KC_P5, KC_P6, KC_PCMM,
        xxx, xxx, xxx, xxx, xxx,                    xxx,           xxx, KC_P1, KC_P2, KC_P3, KC_PEQL,
                  xxx, xxx, xxx,                    xxx,           KC_P0, KC_PDOT, KC_PENT  
                  xxx, xxx, xxx,                    xxx,           KC_P0, KC_PDOT, KC_PENT

  ),



@@ 85,8 85,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,          xxx,           KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
        xxx, xxx, xxx, xxx, xxx,                    xxx,           xxx, xxx, xxx, KC_F11, KC_F12,
        xxx, xxx, xxx, xxx, xxx,                    xxx,           xxx, xxx, xxx, xxx, xxx,
                  xxx, xxx, xxx,                    xxx,           xxx, xxx, xxx       
                  xxx, xxx, xxx,                    xxx,           xxx, xxx, xxx
  )

};


M keyboards/drhigsby/packrat/keymaps/default/config.h => keyboards/drhigsby/packrat/keymaps/default/config.h +0 -1
@@ 15,5 15,4 @@
 */
#pragma once

#define COMBO_COUNT 7
#define COMBO_TERM 40

M keyboards/drhigsby/packrat/keymaps/default/keymap.c => keyboards/drhigsby/packrat/keymaps/default/keymap.c +2 -3
@@ 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),


@@ 74,8 74,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,           xxx,           KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
        xxx, xxx, xxx, xxx, xxx,                     xxx,           xxx, xxx, xxx, KC_F11, KC_F12,
        xxx, xxx, xxx, xxx, xxx,                     xxx,           xxx, xxx, xxx, xxx, xxx,
        xxx, xxx, xxx,                                              xxx, xxx, xxx       
        xxx, xxx, xxx,                                              xxx, xxx, xxx
  )

};


M keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h => keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h +0 -2
@@ 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


M keyboards/eu_isolation/keymaps/bigspace/config.h => keyboards/eu_isolation/keymaps/bigspace/config.h +13 -14
@@ 1,19 1,18 @@
/* Copyright 2020 Austin "TuckTuckFloof" Ashmore
* 
* 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/>. 
*/ 
*
* 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 5
#define COMBO_TERM 175

M keyboards/eu_isolation/keymaps/bigspace/keymap.c => keyboards/eu_isolation/keymaps/bigspace/keymap.c +13 -13
@@ 1,16 1,16 @@
/* Copyright 2020 Austin "TuckTuckFloof" Ashmore
* 
* 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/>. 
*
* 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/>.
*/

#include QMK_KEYBOARD_H


@@ 31,7 31,7 @@ enum WOMBO_COMBOS {
const uint16_t PROGMEM VOLUME_UP_COMBO[] = { KC_F1, KC_F2, COMBO_END };
const uint16_t PROGMEM VOLUME_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)
};

M keyboards/eu_isolation/keymaps/default/config.h => keyboards/eu_isolation/keymaps/default/config.h +10 -11
@@ 1,19 1,18 @@
/* Copyright 2020 Austin "TuckTuckFloof" Ashmore
*
* 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 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/>. 
* 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 5
#define COMBO_TERM 175

M keyboards/eu_isolation/keymaps/default/keymap.c => keyboards/eu_isolation/keymaps/default/keymap.c +11 -11
@@ 1,16 1,16 @@
/* Copyright 2020 Austin "TuckTuckFloof" Ashmore
*
* 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 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/>. 
* 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/>.
*/

#include QMK_KEYBOARD_H


@@ 31,7 31,7 @@ enum WOMBO_COMBOS {
const uint16_t PROGMEM VOLUME_UP_COMBO[] = { KC_F1, KC_F2, COMBO_END };
const uint16_t PROGMEM VOLUME_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)
};

M keyboards/eu_isolation/keymaps/mit/config.h => keyboards/eu_isolation/keymaps/mit/config.h +10 -11
@@ 1,19 1,18 @@
/* Copyright 2020 Austin "TuckTuckFloof" Ashmore
*
* 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 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/>. 
* 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 5
#define COMBO_TERM 175

M keyboards/eu_isolation/keymaps/mit/keymap.c => keyboards/eu_isolation/keymaps/mit/keymap.c +11 -11
@@ 1,16 1,16 @@
/* Copyright 2020 Austin "TuckTuckFloof" Ashmore
*
* 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 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/>. 
* 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/>.
*/

#include QMK_KEYBOARD_H


@@ 31,7 31,7 @@ enum WOMBO_COMBOS {
const uint16_t PROGMEM VOLUME_UP_COMBO[] = { KC_F1, KC_F2, COMBO_END };
const uint16_t PROGMEM VOLUME_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)
};

M keyboards/foostan/cornelius/keymaps/pdl/config.h => keyboards/foostan/cornelius/keymaps/pdl/config.h +0 -1
@@ 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

M keyboards/free_willy/keymaps/colemak/config.h => keyboards/free_willy/keymaps/colemak/config.h +0 -1
@@ 16,5 16,4 @@
#pragma once

/* Combos */
#define COMBO_COUNT 5
#define COMBO_TERM 50

M keyboards/free_willy/keymaps/colemak/keymap.c => keyboards/free_willy/keymaps/colemak/keymap.c +1 -1
@@ 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),

M keyboards/free_willy/keymaps/default/config.h => keyboards/free_willy/keymaps/default/config.h +0 -1
@@ 16,5 16,4 @@
#pragma once

/* Combos */
#define COMBO_COUNT 5
#define COMBO_TERM 50

M keyboards/free_willy/keymaps/default/keymap.c => keyboards/free_willy/keymaps/default/keymap.c +1 -1
@@ 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),

M keyboards/gboards/g/keymap_combo.h => keyboards/gboards/g/keymap_combo.h +0 -3
@@ 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

M keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/config.h => keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/config.h +0 -1
@@ 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

M keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/keymap.c => keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/keymap.c +1 -1
@@ 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),
};


D keyboards/handwired/aek64/keymaps/4sstylz/config.h => keyboards/handwired/aek64/keymaps/4sstylz/config.h +0 -3
@@ 1,3 0,0 @@
#pragma once

#define COMBO_COUNT 1

M keyboards/handwired/aek64/keymaps/4sstylz/keymap.c => keyboards/handwired/aek64/keymaps/4sstylz/keymap.c +2 -2
@@ 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.

M keyboards/ibnuda/alicia_cook/keymaps/rick/config.h => keyboards/ibnuda/alicia_cook/keymaps/rick/config.h +0 -1
@@ 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

M keyboards/ibnuda/alicia_cook/keymaps/rick/keymap.c => keyboards/ibnuda/alicia_cook/keymaps/rick/keymap.c +1 -1
@@ 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),

M keyboards/ibnuda/squiggle/keymaps/default/config.h => keyboards/ibnuda/squiggle/keymaps/default/config.h +0 -1
@@ 1,5 1,4 @@
#pragma once

#define COMBO_TERM 100
#define COMBO_COUNT 38
#define PERMISSIVE_HOLD

M keyboards/ibnuda/squiggle/keymaps/default/keymap.c => keyboards/ibnuda/squiggle/keymaps/default/keymap.c +1 -1
@@ 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),

M keyboards/ibnuda/squiggle/keymaps/default38/config.h => keyboards/ibnuda/squiggle/keymaps/default38/config.h +0 -1
@@ 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

M keyboards/ibnuda/squiggle/keymaps/default38/keymap.c => keyboards/ibnuda/squiggle/keymaps/default38/keymap.c +1 -1
@@ 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),

M keyboards/ibnuda/squiggle/keymaps/defaultfull/config.h => keyboards/ibnuda/squiggle/keymaps/defaultfull/config.h +0 -1
@@ 17,5 17,4 @@
#pragma once

#define COMBO_TERM 100
#define COMBO_COUNT 38
#define PERMISSIVE_HOLD

M keyboards/ibnuda/squiggle/keymaps/defaultfull/keymap.c => keyboards/ibnuda/squiggle/keymaps/defaultfull/keymap.c +1 -1
@@ 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),

M keyboards/ibnuda/squiggle/keymaps/defaultminidox/config.h => keyboards/ibnuda/squiggle/keymaps/defaultminidox/config.h +0 -1
@@ 1,5 1,4 @@
#pragma once

#define COMBO_TERM 100
#define COMBO_COUNT 38
#define PERMISSIVE_HOLD

M keyboards/ibnuda/squiggle/keymaps/defaultminidox/keymap.c => keyboards/ibnuda/squiggle/keymaps/defaultminidox/keymap.c +1 -1
@@ 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),

M keyboards/ibnuda/squiggle/keymaps/rick-complicated/config.h => keyboards/ibnuda/squiggle/keymaps/rick-complicated/config.h +0 -1
@@ 1,7 1,6 @@
#pragma once

#define COMBO_TERM 100
#define COMBO_COUNT 38
#define PERMISSIVE_HOLD

#define LEADER_TIMEOUT 300

M keyboards/ibnuda/squiggle/keymaps/rick-complicated/keymap.c => keyboards/ibnuda/squiggle/keymaps/rick-complicated/keymap.c +1 -1
@@ 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),

M keyboards/ibnuda/squiggle/keymaps/rick/config.h => keyboards/ibnuda/squiggle/keymaps/rick/config.h +0 -1
@@ 1,5 1,4 @@
#pragma once

#define COMBO_TERM 100
#define COMBO_COUNT 38
#define PERMISSIVE_HOLD

M keyboards/ibnuda/squiggle/keymaps/rick/keymap.c => keyboards/ibnuda/squiggle/keymaps/rick/keymap.c +1 -1
@@ 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),

M keyboards/idobao/id80/v2/ansi/keymaps/msf/config.h => keyboards/idobao/id80/v2/ansi/keymaps/msf/config.h +0 -1
@@ 20,5 20,4 @@
*/
#pragma once

#define COMBO_COUNT 3
#define COMBO_TERM 200

M keyboards/idobao/id80/v2/ansi/keymaps/msf/keymap.c => keyboards/idobao/id80/v2/ansi/keymaps/msf/keymap.c +2 -2
@@ 29,7 29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,            KC_INS,
        _______,     RGB_TOG, _______, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______,        KC_DEL,
        _______,       _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
        _______,            _______, _______, BL_DOWN, BL_TOGG, BL_UP,   NK_TOGG, _______, _______, _______, _______, _______,          BL_UP, 
        _______,            _______, _______, BL_DOWN, BL_TOGG, BL_UP,   NK_TOGG, _______, _______, _______, _______, _______,          BL_UP,
        _______,   _______,   _______,                      _______,                              _______,     _______,        BL_TOGG, BL_DOWN, BL_STEP
    ),
    [2] = LAYOUT_ansi(


@@ 52,7 52,7 @@ const uint16_t PROGMEM slashDown_combo[] = {KC_SLSH, KC_DOWN, COMBO_END};
const uint16_t PROGMEM slashUp_combo[] = {KC_SLSH, KC_UP, COMBO_END};
const uint16_t PROGMEM 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),

M keyboards/input_club/ergodox_infinity/keymaps/narze/config.h => keyboards/input_club/ergodox_infinity/keymaps/narze/config.h +0 -1
@@ 4,7 4,6 @@
#define TAPPING_TERM 150

#define COMBO_TERM 20
#define COMBO_COUNT 1

#define PERMISSIVE_HOLD


M keyboards/k34/keymaps/default/config.h => keyboards/k34/keymaps/default/config.h +11 -13
@@ 1,23 1,21 @@
 /* Copyright Wong Jing Ping <@wongjingping>
  *  
  * 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. 
  * 
  *
  * 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.
  *
  */

#pragma once

// use 1 combo
#define COMBO_COUNT 1
#define COMBO_TERM 300

// mod taps for home row mods
#define TAPPING_TERM_PER_KEY


M keyboards/k34/keymaps/default/keymap.c => keyboards/k34/keymaps/default/keymap.c +1 -1
@@ 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 */

D keyboards/keebformom/keymaps/default/config.h => keyboards/keebformom/keymaps/default/config.h +0 -19
@@ 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

M keyboards/keebformom/keymaps/default/keymap.c => keyboards/keebformom/keymaps/default/keymap.c +4 -4
@@ 60,7 60,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  KC_HASH,    KC_DLR,    KC_LPRN,    KC_RPRN,   KC_CIRC,   KC_UNDS,     KC_MINS,    KC_4,       KC_5,       KC_6,
  KC_PERC,    KC_AMPR,   KC_LBRC,    KC_RBRC,   KC_ASTR,   _______,    _______,     KC_1,       KC_2,       KC_3,
  TO(0),      _______,   KC_BSLS,    KC_PIPE,   _______,   _______,    _______,     KC_EQL,     KC_0,       KC_BSPC
),              
),

/* THIRD
 * ,---------------------------------------------------------------------.


@@ 75,10 75,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 */
[_THIRD] = LAYOUT_ortho_4x10(
  KC_INS,  KC_HOME, KC_PGUP, KC_NO,    SGUI(KC_S),   LCTL(KC_A),   KC_NO,    KC_NO,   KC_UP,   KC_NO,
  KC_DEL,  KC_END,  KC_PGDN, KC_NO,    LCTL(KC_S),   LCTL(KC_C),   KC_NO,    KC_LEFT, KC_DOWN, KC_RGHT, 
  KC_DEL,  KC_END,  KC_PGDN, KC_NO,    LCTL(KC_S),   LCTL(KC_C),   KC_NO,    KC_LEFT, KC_DOWN, KC_RGHT,
  KC_NO,   KC_NO,   KC_NO,   KC_NO,    LWIN(KC_E),   LCTL(KC_V),   KC_NO,    KC_NO,   KC_NO,   KC_NO,
  TO(0),   _______, _______, _______,  _______,      _______,      _______,  KC_VOLD, _______, KC_VOLU
),    
),
/* FOURTH
 * ,---------------------------------------------------------------------.
 * |RGB M+|  HUD |  HUI |      |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |


@@ 106,7 106,7 @@ const uint16_t PROGMEM test_combo4[] = {KC_A, KC_S, COMBO_END};
const uint16_t PROGMEM test_combo5[] = {KC_G, KC_H, COMBO_END};
const uint16_t PROGMEM test_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),

M keyboards/keycapsss/plaid_pad/keymaps/oled/config.h => keyboards/keycapsss/plaid_pad/keymaps/oled/config.h +0 -2
@@ 18,5 18,3 @@

// place overrides here
#define OLED_FONT_H "keyboards/keycapsss/plaid_pad/keymaps/oled/glcdfont.c"

#define COMBO_COUNT 3

M keyboards/keycapsss/plaid_pad/keymaps/oled/keymap.c => keyboards/keycapsss/plaid_pad/keymaps/oled/keymap.c +1 -1
@@ 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),

M keyboards/kprepublic/bm40hsrgb/keymaps/34keys/config.h => keyboards/kprepublic/bm40hsrgb/keymaps/34keys/config.h +0 -1
@@ 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

M keyboards/kprepublic/bm40hsrgb/keymaps/34keys/keymap.c => keyboards/kprepublic/bm40hsrgb/keymaps/34keys/keymap.c +7 -9
@@ 37,21 37,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [_Navi] = LAYOUT_planck_mit(
      KC_WH_L,    KC_WH_D,   KC_WH_U,        KC_WH_R,        KC_ESC,    KC_NO, KC_NO,       KC_DEL,   KC_HOME,  KC_PGDN,   KC_PGUP,      KC_END,
      KC_LSFT,     HOME_S,    HOME_D,         HOME_F,        KC_TAB,    KC_NO, KC_NO,       KC_ENT,    KC_RSFT,   HOME_K,    HOME_L,     HOME_QU,
      KC_MS_L,    KC_MS_D,   KC_MS_U,        KC_MS_R,       KC_BTN1,    KC_NO, KC_NO,      KC_BTN2,   KC_LEFT,  KC_DOWN,     KC_UP,     KC_RGHT,    
      KC_MS_L,    KC_MS_D,   KC_MS_U,        KC_MS_R,       KC_BTN1,    KC_NO, KC_NO,      KC_BTN2,   KC_LEFT,  KC_DOWN,     KC_UP,     KC_RGHT,
        KC_NO,      KC_NO,     KC_NO,          KC_NO,       Lay_SPC,        KC_NO,         KC_BSPC,     KC_NO,    KC_NO,     KC_NO,       KC_NO
      ),  
      ),
  [_Numb] = LAYOUT_planck_mit(
      KC_LBRC,        KC_7,     KC_8,          KC_9,        KC_RBRC,    KC_NO, KC_NO,      KC_DEL,      KC_NO,     KC_NO,     KC_NO,       KC_NO,
      KC_SCLN,        KC_4,     KC_5,          KC_6,         KC_EQL,    KC_NO, KC_NO,      KC_ENT,     KC_RSFT,    HOME_K,    HOME_L,     HOME_QU,
       KC_GRV,        KC_1,     KC_2,          KC_3,        KC_BSLS,    KC_NO, KC_NO,       KC_NO,      KC_NO,     KC_NO,   KR_HAEN,       KC_NO,
        KC_NO,       KC_NO,     KC_NO,         KC_0,        KC_MINS,        KC_NO,        KC_BSPC,      KC_NO,     KC_NO,     KC_NO,       KC_NO
      ),  
      ),
  [_Func] = LAYOUT_planck_mit(
      KC_F12,     KC_F7,     KC_F8,           KC_F9,       KC_PSCR,    KC_NO, KC_NO,        QK_BOOT,    KC_NO,     KC_NO,     KC_NO,     KC_NO,
      KC_F11,     KC_F4,     KC_F5,           KC_F6,       KC_SCRL,    KC_NO, KC_NO,      KC_CAPS,     KC_RSFT,    HOME_K,    HOME_L,   HOME_QU,
      KC_F10,     KC_F1,     KC_F2,           KC_F3,       KC_PAUS,    KC_NO, KC_NO,       KC_INS,      KC_NO,     KC_NO,   KR_HAEN,     KC_NO,
      KC_NO,       KC_NO,     KC_NO,          KC_NO,       Lay_SPC,         KC_NO,        KC_BSPC,      KC_NO,     KC_NO,     KC_NO,     KC_NO
      ), 
      ),
};




@@ 75,10 75,8 @@ 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 you’re using).
// modify `rules.mk` file
// by adding # COMBO_ENABLE = yes 
// by adding # COMBO_ENABLE = yes

enum combos {
  SFT_HAN,


@@ 86,6 84,6 @@ enum combos {

const uint16_t PROGMEM sft_han_combo[] = {LSFT_T(KC_F), LT(_Func,KC_SPC), COMBO_END};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [SFT_HAN] = COMBO(sft_han_combo, KC_LNG1),
};
\ No newline at end of file
};

M keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/config.h => keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/config.h +0 -1
@@ 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.

M keyboards/kprepublic/bm80hsrgb/keymaps/peepeetee/config.h => keyboards/kprepublic/bm80hsrgb/keymaps/peepeetee/config.h +1 -2
@@ 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.


@@ 75,7 74,7 @@
#define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS           // Randomly changes a single key's hue and saturation
#define DISABLE_RGB_MATRIX_HUE_BREATHING                 // Hue shifts up a slight ammount at the same time, then shifts back
#define DISABLE_RGB_MATRIX_HUE_PENDULUM                  // Hue shifts up a slight ammount in a wave to the right, then back to the left
#define DISABLE_RGB_MATRIX_HUE_WAVE                      // Hue shifts up a slight ammount and then back down in a wave to the right 
#define DISABLE_RGB_MATRIX_HUE_WAVE                      // Hue shifts up a slight ammount and then back down in a wave to the right
// =================================================== Requires RGB_MATRIX_FRAMEBUFFER_EFFECTS =============================================================
// #define DISABLE_RGB_MATRIX_TYPING_HEATMAP                // How hot is your WPM!
#define DISABLE_RGB_MATRIX_DIGITAL_RAIN                  // That famous computer simulation

M keyboards/kprepublic/jj40/keymaps/stevexyz/config.h => keyboards/kprepublic/jj40/keymaps/stevexyz/config.h +0 -2
@@ 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

M keyboards/lets_split/keymaps/shaymdev/config.h => keyboards/lets_split/keymaps/shaymdev/config.h +0 -2
@@ 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

M keyboards/lets_split/keymaps/shaymdev/keymap.c => keyboards/lets_split/keymaps/shaymdev/keymap.c +19 -19
@@ 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),
};



@@ 58,38 58,38 @@ void process_combo_event(uint16_t combo_index, bool pressed) {

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

[_DVORAK] = LAYOUT( 
  KC_ESC,  KC_QUOT, KC_COMM, KC_DOT, KC_P,    KC_Y,        KC_F,    KC_G,   KC_C,  KC_R,   KC_L,    KC_SLSH, 
  KC_TAB,  KC_A,    KC_O,    KC_E,   KC_U,    KC_I,        KC_D,    KC_H,   KC_T,  KC_N,   KC_S,    KC_MINS, 
  KC_EQL,  KC_SCLN, KC_Q,    KC_J,   KC_K,    KC_X,        KC_B,    KC_M,   KC_W,  KC_V,   KC_Z,    KC_BSLS, 
  XXXXXXX, KC_ENT,  KC_LALT, TT(LWR), KC_LSFT, KC_LCTL,		 KC_BSPC, KC_SPC, TT(RAS), KC_DEL, KC_LGUI, XXXXXXX  
[_DVORAK] = LAYOUT(
  KC_ESC,  KC_QUOT, KC_COMM, KC_DOT, KC_P,    KC_Y,        KC_F,    KC_G,   KC_C,  KC_R,   KC_L,    KC_SLSH,
  KC_TAB,  KC_A,    KC_O,    KC_E,   KC_U,    KC_I,        KC_D,    KC_H,   KC_T,  KC_N,   KC_S,    KC_MINS,
  KC_EQL,  KC_SCLN, KC_Q,    KC_J,   KC_K,    KC_X,        KC_B,    KC_M,   KC_W,  KC_V,   KC_Z,    KC_BSLS,
  XXXXXXX, KC_ENT,  KC_LALT, TT(LWR), KC_LSFT, KC_LCTL,		 KC_BSPC, KC_SPC, TT(RAS), KC_DEL, KC_LGUI, XXXXXXX
),

[_QWERTY] = LAYOUT( 
  KC_ESC,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    	  KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC, 
  KC_TAB,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    	  KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, 
[_QWERTY] = LAYOUT(
  KC_ESC,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    	  KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
  KC_TAB,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    	  KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
  KC_LCTL, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    	  KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_LGUI,
  _______, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, _______
),

[_LOWER] = LAYOUT( 
  _______, KC_EXLM, KC_AT,   KC_LCBR, KC_RCBR, KC_AMPR,     _______, KC_P7,   KC_P8, KC_P9, KC_PMNS, _______, 
  _______, KC_HASH, KC_DLR,  KC_LPRN, KC_RPRN, KC_ASTR, 		_______, KC_P4,   KC_P5, KC_P6, KC_PPLS, _______, 
  _______, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_GRV,			_______, KC_P1,   KC_P2, KC_P3, KC_PENT, _______, 
[_LOWER] = LAYOUT(
  _______, KC_EXLM, KC_AT,   KC_LCBR, KC_RCBR, KC_AMPR,     _______, KC_P7,   KC_P8, KC_P9, KC_PMNS, _______,
  _______, KC_HASH, KC_DLR,  KC_LPRN, KC_RPRN, KC_ASTR, 		_______, KC_P4,   KC_P5, KC_P6, KC_PPLS, _______,
  _______, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_GRV,			_______, KC_P1,   KC_P2, KC_P3, KC_PENT, _______,
  _______, _______, _______, _______, _______, _______,     _______, KC_KP_0, _______, _______, _______, _______ //This kp_0 is blocking the space key.... may want to do something about that.
),

[_RAISE] = LAYOUT( 
[_RAISE] = LAYOUT(
  _______, KC_PSCR, KC_HOME, KC_UP,   KC_END,  KC_PGUP,  		KC_VOLU, KC_F7,   KC_F8,   KC_F9,   KC_F10,  XXXXXXX,
  KC_CAPS, KC_INS,  KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN,  	 	KC_VOLD, KC_F4,   KC_F5,   KC_F6,   KC_F11,  XXXXXXX,
  _______, KC_NUM,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  	 	KC_MUTE, KC_F1,   KC_F2,   KC_F3,   KC_F12,  XXXXXXX,
  _______, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, _______
),

[_ADJUST] =  LAYOUT( 
    TO_DV, QK_BOOT, _______, _______, _______, _______, 		_______, _______, _______, _______, _______, KC_DEL,  
  RGB_TOG, RGB_MOD, VK_TOGG, AU_ON,   AU_OFF,  AG_NORM, 		AG_SWAP,  QWERTY,  DVORAK, _______, _______, _______, 
  RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, 		_______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, 
[_ADJUST] =  LAYOUT(
    TO_DV, QK_BOOT, _______, _______, _______, _______, 		_______, _______, _______, _______, _______, KC_DEL,
  RGB_TOG, RGB_MOD, VK_TOGG, AU_ON,   AU_OFF,  AG_NORM, 		AG_SWAP,  QWERTY,  DVORAK, _______, _______, _______,
  RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, 		_______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY,
  _______, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, _______
)


M keyboards/lily58/keymaps/muuko/config.h => keyboards/lily58/keymaps/muuko/config.h +0 -4
@@ 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

M keyboards/lily58/keymaps/muuko/keymap.c => keyboards/lily58/keymaps/muuko/keymap.c +1 -1
@@ 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)
};

M keyboards/lily58/keymaps/narze/config.h => keyboards/lily58/keymaps/narze/config.h +0 -1
@@ 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


M keyboards/makenova/omega/omega4/keymaps/default/config.h => keyboards/makenova/omega/omega4/keymaps/default/config.h +0 -1
@@ 4,7 4,6 @@
#pragma once

#ifdef COMBO_ENABLE
#    define COMBO_COUNT 4
#    define COMBO_TERM 50
#endif


M keyboards/makenova/omega/omega4/keymaps/default/keymap.c => keyboards/makenova/omega/omega4/keymaps/default/keymap.c +2 -2
@@ 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


@@ 61,4 61,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU,  KC_TRNS,
    QK_BOOT,   KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS
    )
};
\ No newline at end of file
};

M keyboards/makenova/omega/omega4/keymaps/default_10u_bar/config.h => keyboards/makenova/omega/omega4/keymaps/default_10u_bar/config.h +0 -1
@@ 4,7 4,6 @@
#pragma once

#ifdef COMBO_ENABLE
#    define COMBO_COUNT 4
#    define COMBO_TERM 50
#endif


M keyboards/makenova/omega/omega4/keymaps/default_10u_bar/keymap.c => keyboards/makenova/omega/omega4/keymaps/default_10u_bar/keymap.c +2 -2
@@ 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


@@ 62,4 62,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU,  KC_TRNS,
    QK_BOOT
    )
};
\ No newline at end of file
};

M keyboards/makenova/omega/omega4/keymaps/default_6u_bar/config.h => keyboards/makenova/omega/omega4/keymaps/default_6u_bar/config.h +0 -1
@@ 4,7 4,6 @@
#pragma once

#ifdef COMBO_ENABLE
#    define COMBO_COUNT 4
#    define COMBO_TERM 50
#endif


M keyboards/makenova/omega/omega4/keymaps/default_6u_bar/keymap.c => keyboards/makenova/omega/omega4/keymaps/default_6u_bar/keymap.c +2 -2
@@ 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


@@ 61,4 61,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU,  KC_TRNS,
    QK_BOOT,   KC_TRNS, KC_TRNS
    )
};
\ No newline at end of file
};

M keyboards/maple_computing/minidox/keymaps/rsthd_combos/config.h => keyboards/maple_computing/minidox/keymaps/rsthd_combos/config.h +0 -2
@@ 2,6 2,4 @@

#define EE_HANDS


#define COMBO_COUNT 10
#define COMBO_TERM 100

M keyboards/maple_computing/minidox/keymaps/rsthd_combos/keymap.c => keyboards/maple_computing/minidox/keymaps/rsthd_combos/keymap.c +1 -1
@@ 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),

M keyboards/massdrop/alt/keymaps/b_/config.h => keyboards/massdrop/alt/keymaps/b_/config.h +0 -1
@@ 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.

M keyboards/massdrop/alt/keymaps/pregame/config.h => keyboards/massdrop/alt/keymaps/pregame/config.h +0 -1
@@ 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.

M keyboards/massdrop/ctrl/keymaps/endgame/config.h => keyboards/massdrop/ctrl/keymaps/endgame/config.h +0 -1
@@ 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.

M keyboards/massdrop/ctrl/keymaps/matthewrobo/config.h => keyboards/massdrop/ctrl/keymaps/matthewrobo/config.h +0 -1
@@ 52,7 52,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
// #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.

M keyboards/massdrop/ctrl/keymaps/xanimos/config.h => keyboards/massdrop/ctrl/keymaps/xanimos/config.h +0 -1
@@ 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 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.

M keyboards/maxr1998/pulse4k/config.h => keyboards/maxr1998/pulse4k/config.h +0 -1
@@ 18,7 18,6 @@
#pragma once

/* Combo setup */
#define COMBO_COUNT 1
#define COMBO_TERM 150

/* RGB LED Setup */

M keyboards/maxr1998/pulse4k/keymaps/default/keymap.c => keyboards/maxr1998/pulse4k/keymaps/default/keymap.c +1 -1
@@ 34,7 34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    )
};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
    [LED_ADJUST] = COMBO_ACTION(led_adjust_combo)
};


M keyboards/maxr1998/pulse4k/keymaps/maxr1998/keymap.c => keyboards/maxr1998/pulse4k/keymaps/maxr1998/keymap.c +1 -1
@@ 34,7 34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    )
};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
    [LED_ADJUST] = COMBO_ACTION(led_adjust_combo)
};


M keyboards/nimrod/keymaps/default/config.h => keyboards/nimrod/keymaps/default/config.h +0 -1
@@ 16,6 16,5 @@
#pragma once

#ifdef COMBO_ENABLE
#    define COMBO_COUNT 3
#    define COMBO_TERM 150
#endif

M keyboards/nimrod/keymaps/default/keymap.c => keyboards/nimrod/keymaps/default/keymap.c +1 -1
@@ 51,7 51,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_Q, KC_W, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_E, KC_W, 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_TAB] = COMBO(combo_tab,KC_TAB),
  [COMBO_ESC] = COMBO(combo_esc,KC_ESC),
  [COMBO_DEL] = COMBO(combo_del,KC_DEL),

M keyboards/nimrod/keymaps/default_center_space/config.h => keyboards/nimrod/keymaps/default_center_space/config.h +0 -1
@@ 16,6 16,5 @@
#pragma once

#ifdef COMBO_ENABLE
#    define COMBO_COUNT 3
#    define COMBO_TERM 150
#endif

M keyboards/nimrod/keymaps/default_center_space/keymap.c => keyboards/nimrod/keymaps/default_center_space/keymap.c +1 -1
@@ 59,7 59,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_Q, KC_W, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_E, KC_W, 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_TAB] = COMBO(combo_tab,KC_TAB),
  [COMBO_ESC] = COMBO(combo_esc,KC_ESC),
  [COMBO_DEL] = COMBO(combo_del,KC_DEL),

M keyboards/nimrod/keymaps/default_left_space/config.h => keyboards/nimrod/keymaps/default_left_space/config.h +0 -1
@@ 16,6 16,5 @@
#pragma once

#ifdef COMBO_ENABLE
#    define COMBO_COUNT 3
#    define COMBO_TERM 150
#endif

M keyboards/nimrod/keymaps/default_left_space/keymap.c => keyboards/nimrod/keymaps/default_left_space/keymap.c +1 -1
@@ 59,7 59,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_Q, KC_W, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_E, KC_W, 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_TAB] = COMBO(combo_tab,KC_TAB),
  [COMBO_ESC] = COMBO(combo_esc,KC_ESC),
  [COMBO_DEL] = COMBO(combo_del,KC_DEL),

M keyboards/nimrod/keymaps/default_right_space/config.h => keyboards/nimrod/keymaps/default_right_space/config.h +0 -1
@@ 16,6 16,5 @@
#pragma once

#ifdef COMBO_ENABLE
#    define COMBO_COUNT 3
#    define COMBO_TERM 150
#endif

M keyboards/nimrod/keymaps/default_right_space/keymap.c => keyboards/nimrod/keymaps/default_right_space/keymap.c +1 -1
@@ 59,7 59,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_Q, KC_W, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_E, KC_W, 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_TAB] = COMBO(combo_tab,KC_TAB),
  [COMBO_ESC] = COMBO(combo_esc,KC_ESC),
  [COMBO_DEL] = COMBO(combo_del,KC_DEL),

M keyboards/nimrod/keymaps/default_split_space/config.h => keyboards/nimrod/keymaps/default_split_space/config.h +0 -1
@@ 16,6 16,5 @@
#pragma once

#ifdef COMBO_ENABLE
#    define COMBO_COUNT 5
#    define COMBO_TERM 150
#endif

M keyboards/nimrod/keymaps/default_split_space/keymap.c => keyboards/nimrod/keymaps/default_split_space/keymap.c +1 -1
@@ 69,7 69,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_Q, KC_W, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_E, KC_W, 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),

M keyboards/orthodox/keymaps/shaymdev/config.h => keyboards/orthodox/keymaps/shaymdev/config.h +0 -2
@@ 48,6 48,4 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
                                }
#endif

#define COMBO_COUNT 1

#define TAPPING_TERM 220

M keyboards/orthodox/keymaps/shaymdev/keymap.c => keyboards/orthodox/keymaps/shaymdev/keymap.c +19 -19
@@ 21,7 21,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.

#include QMK_KEYBOARD_H

enum orthodox_layers 
enum orthodox_layers
{
	_DVORAK,
	_QWERTY,


@@ 30,14 30,14 @@ enum orthodox_layers
	_ADJUST,
};

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



@@ 66,33 66,33 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {


[_DVORAK] = LAYOUT(
  KC_ESC,  KC_QUOT, KC_COMM, KC_DOT, KC_P,    KC_Y,                                                                            KC_F,    KC_G,   KC_C,  KC_R,   KC_L,    KC_SLSH, 
  KC_TAB, GUI_T(KC_A), ALT_T(KC_O), KC_E, KC_U,  KC_I, KC_ENT,             KC_LALT,         KC_DEL,                 KC_LGUI,   KC_D,    KC_H,   KC_T,  KC_N,   KC_S,    KC_MINS, 
  KC_EQL,  KC_SCLN, KC_Q,    KC_J,   KC_K,    KC_X,    TT(LOWER), KC_LSFT, KC_LCTL,         KC_BSPC, ALT_T(KC_SPC), TT(RAISE), KC_B,    KC_M,   KC_W,  KC_V,   KC_Z,    KC_BSLS 
  KC_ESC,  KC_QUOT, KC_COMM, KC_DOT, KC_P,    KC_Y,                                                                            KC_F,    KC_G,   KC_C,  KC_R,   KC_L,    KC_SLSH,
  KC_TAB, GUI_T(KC_A), ALT_T(KC_O), KC_E, KC_U,  KC_I, KC_ENT,             KC_LALT,         KC_DEL,                 KC_LGUI,   KC_D,    KC_H,   KC_T,  KC_N,   KC_S,    KC_MINS,
  KC_EQL,  KC_SCLN, KC_Q,    KC_J,   KC_K,    KC_X,    TT(LOWER), KC_LSFT, KC_LCTL,         KC_BSPC, ALT_T(KC_SPC), TT(RAISE), KC_B,    KC_M,   KC_W,  KC_V,   KC_Z,    KC_BSLS
),

[_QWERTY] = LAYOUT( 
  KC_ESC,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                                                                    KC_Y,  KC_U,  KC_I,    KC_O,    KC_P,    KC_BSPC, 
  KC_TAB,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    _______,          _______,          _______,           _______, KC_H,  KC_J,  KC_K,    KC_L,    KC_SCLN, KC_QUOT, 
  KC_LCTL, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    _______, _______, _______,          _______, _______,  _______, KC_N,  KC_M,  KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT 
[_QWERTY] = LAYOUT(
  KC_ESC,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                                                                    KC_Y,  KC_U,  KC_I,    KC_O,    KC_P,    KC_BSPC,
  KC_TAB,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    _______,          _______,          _______,           _______, KC_H,  KC_J,  KC_K,    KC_L,    KC_SCLN, KC_QUOT,
  KC_LCTL, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    _______, _______, _______,          _______, _______,  _______, KC_N,  KC_M,  KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT
),

[_LOWER] = LAYOUT( 
  _______, KC_EXLM, KC_AT,   KC_LCBR, KC_RCBR, KC_AMPR,                                                                _______, KC_P7, KC_P8, KC_P9, KC_PMNS, _______, 
  _______, KC_HASH, KC_DLR,  KC_LPRN, KC_RPRN, KC_ASTR, _______,          _______,          _______,          _______, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, _______, 
  _______, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_GRV,	_______, _______, _______,          _______, _______, KC_KP_0, _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______ 
[_LOWER] = LAYOUT(
  _______, KC_EXLM, KC_AT,   KC_LCBR, KC_RCBR, KC_AMPR,                                                                _______, KC_P7, KC_P8, KC_P9, KC_PMNS, _______,
  _______, KC_HASH, KC_DLR,  KC_LPRN, KC_RPRN, KC_ASTR, _______,          _______,          _______,          _______, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, _______,
  _______, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_GRV,	_______, _______, _______,          _______, _______, KC_KP_0, _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______
),

[_RAISE] = LAYOUT( 
[_RAISE] = LAYOUT(
  _______, KC_PSCR, KC_HOME, KC_UP,   KC_END,  KC_PGUP,                                                                KC_VOLU, KC_F7, KC_F8,  KC_F9,  KC_F10,  XXXXXXX,
  KC_CAPS, KC_INS,  KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN,  _______,          _______,         _______,          _______, KC_VOLD, KC_F4, KC_F5,  KC_F6,  KC_F11,  XXXXXXX,
  _______, KC_NUM,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  _______, _______, _______,         _______, _______, _______, KC_MUTE, KC_F1, KC_F2,  KC_F3,  KC_F12,  XXXXXXX
),

[_ADJUST] =  LAYOUT( 
    TO_DV, QK_BOOT, _______, _______, _______, _______,                                                                _______, _______, _______, _______, _______, KC_SLEP,  
  RGB_TOG, RGB_MOD, VK_TOGG,  AU_ON,   AU_OFF,  AG_NORM, _______,          _______,          _______,          _______, AG_SWAP,  QWERTY,  DVORAK, _______, _______, _______, 
  RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______,          _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY  
[_ADJUST] =  LAYOUT(
    TO_DV, QK_BOOT, _______, _______, _______, _______,                                                                _______, _______, _______, _______, _______, KC_SLEP,
  RGB_TOG, RGB_MOD, VK_TOGG,  AU_ON,   AU_OFF,  AG_NORM, _______,          _______,          _______,          _______, AG_SWAP,  QWERTY,  DVORAK, _______, _______, _______,
  RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______,          _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
)



M keyboards/pierce/keymaps/durken1/config.h => keyboards/pierce/keymaps/durken1/config.h +0 -1
@@ 25,7 25,6 @@
#define PERMISSIVE_HOLD

// Combo settings
#define COMBO_COUNT 3
#define COMBO_TERM 35

#ifdef PS2_DRIVER_USART

M keyboards/pierce/keymaps/durken1/keymap.c => keyboards/pierce/keymaps/durken1/keymap.c +11 -11
@@ 17,25 17,25 @@
#include QMK_KEYBOARD_H
#include "keymap_swedish.h"

enum layers { 
    BASE, 
    MBO, 
    SYM, 
    NUM, 
enum layers {
    BASE,
    MBO,
    SYM,
    NUM,
    FN
};

enum combos { 
    WF_ARNG, 
    EI_ADIA, 
    UK_ODIA 
enum combos {
    WF_ARNG,
    EI_ADIA,
    UK_ODIA
};

#if defined PS2_MOUSE_ENABLE
#include "ps2_mouse.h"
#endif

#if defined AUTO_BUTTONS && defined PS2_MOUSE_ENABLE 
#if defined AUTO_BUTTONS && defined PS2_MOUSE_ENABLE

static uint16_t auto_buttons_timer;
extern int tp_buttons; // mousekey button state set in action.c and used in ps2_mouse.c


@@ 82,7 82,7 @@ const uint16_t PROGMEM arng_combo[] = {ALT_R, SFT_S, COMBO_END};
const uint16_t PROGMEM adia_combo[] = {SFT_E, ALT_I, COMBO_END};
const uint16_t PROGMEM odia_combo[] = {SE_U, SE_K, COMBO_END};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
	[WF_ARNG] = COMBO(arng_combo, SE_ARNG),
	[EI_ADIA] = COMBO(adia_combo, SE_ADIA),
	[UK_ODIA] = COMBO(odia_combo, SE_ODIA)

M keyboards/planck/keymaps/antosha417/keymap.c => keyboards/planck/keymaps/antosha417/keymap.c +1 -6
@@ 397,11 397,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};


@@ 448,5 445,3 @@ combo_t key_combos[] = {
    [SAVEQ_COMBO] = COMBO(saveq_combo, VIM_SAVE),
    [BSPCWQ_COMBO] = COMBO(bspcwq_combo, A(KC_BSPC)),
};



M keyboards/planck/keymaps/ariccb/keymap.c => keyboards/planck/keymaps/ariccb/keymap.c +1 -3
@@ 511,10 511,8 @@ enum combo_events {
  CSS_STYLE,
  HTML_GENERIC_TAG,
  CTLRGHT,
  CTLLEFT,
  COMBO_LENGTH
  CTLLEFT
};
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_work_combo[] = {KC_E, KC_K, COMBO_END};

M keyboards/planck/keymaps/dvz/config.h => keyboards/planck/keymaps/dvz/config.h +0 -2
@@ 50,8 50,6 @@
// Most tactile encoders have detents every 4 stages
#define ENCODER_RESOLUTION 4

#define COMBO_COUNT 4

#ifdef AUDIO_ENABLE
    #define DAC_SAMPLE_MAX 65535/2
#endif

M keyboards/planck/keymaps/dvz/keymap.c => keyboards/planck/keymaps/dvz/keymap.c +1 -1
@@ 30,7 30,7 @@ const uint16_t PROGMEM oe_combo[] = {KC_O, KC_E, COMBO_END};
const uint16_t PROGMEM ue_combo[] = {KC_U, KC_E, COMBO_END};
const uint16_t PROGMEM sz_combo[] = {KC_S, DE_Z, COMBO_END};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [AE] = COMBO(ae_combo, DE_AE),
  [OE] = COMBO(oe_combo, DE_OE),
  [UE] = COMBO(ue_combo, DE_UE),

M keyboards/planck/keymaps/narze/config.h => keyboards/planck/keymaps/narze/config.h +0 -1
@@ 24,7 24,6 @@
#define TAPPING_TERM 100

#define COMBO_TERM 20
#define COMBO_COUNT 1

#define PERMISSIVE_HOLD


M keyboards/planck/keymaps/rootiest/config.h => keyboards/planck/keymaps/rootiest/config.h +0 -1
@@ 111,7 111,6 @@
/*
 * COMBO-KEY options
 */
#define COMBO_COUNT 2
#define COMBO_TERM 300
/*
 * MACRO per-key options

M keyboards/planck/keymaps/rootiest/keymap.c => keyboards/planck/keymaps/rootiest/keymap.c +1 -1
@@ 168,7 168,7 @@ enum combo_events { ZC_COPY, XV_PASTE };
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),
};

M keyboards/preonic/keymaps/brauner/keymap.c => keyboards/preonic/keymaps/brauner/keymap.c +1 -4
@@ 56,17 56,14 @@ enum combos {
    COMBO_LBRC_RBRC, /* [|] */
    COMBO_LCBR_RCBR, /* {|} */
    COMBO_LT_GT,     /* <|> */
    COMBO_MAX,
};

uint16_t COMBO_LEN = COMBO_MAX;

const uint16_t PROGMEM combo_lprn_rprn[] = {KC_LPRN, KC_RPRN, COMBO_END};
const uint16_t PROGMEM combo_lbrc_rbrc[] = {KC_LBRC, KC_RBRC, COMBO_END};
const uint16_t PROGMEM combo_lcbr_rcbr[] = {KC_LCBR, KC_RCBR, COMBO_END};
const uint16_t PROGMEM combo_lt_gt[]     = {KC_LT, KC_GT, COMBO_END};

combo_t key_combos[COMBO_MAX] = {
combo_t key_combos[] = {
    [COMBO_LPRN_RPRN] = COMBO_ACTION(combo_lprn_rprn),
    [COMBO_LBRC_RBRC] = COMBO_ACTION(combo_lbrc_rbrc),
    [COMBO_LCBR_RCBR] = COMBO_ACTION(combo_lcbr_rcbr),

M keyboards/program_yoink/ortho/keymaps/default/config.h => keyboards/program_yoink/ortho/keymaps/default/config.h +1 -2
@@ 20,6 20,5 @@
#define TAPPING_TERM 200

#ifdef COMBO_ENABLE
#    define COMBO_COUNT 10
#    define COMBO_TERM 60
#endif 
\ No newline at end of file
#endif

M keyboards/program_yoink/ortho/keymaps/default/keymap.c => keyboards/program_yoink/ortho/keymaps/default/keymap.c +1 -1
@@ 66,7 66,7 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
const uint16_t PROGMEM combo_ent[] = {KC_DOT, KC_SLSH, COMBO_END};


combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [COMBO_ENT] = COMBO(combo_ent,KC_ENT),

};

M keyboards/program_yoink/ortho/keymaps/ortho_split/config.h => keyboards/program_yoink/ortho/keymaps/ortho_split/config.h +1 -2
@@ 20,6 20,5 @@
#define TAPPING_TERM 200

#ifdef COMBO_ENABLE
#    define COMBO_COUNT 10
#    define COMBO_TERM 60
#endif 
\ No newline at end of file
#endif

M keyboards/program_yoink/ortho/keymaps/ortho_split/keymap.c => keyboards/program_yoink/ortho/keymaps/ortho_split/keymap.c +1 -1
@@ 66,7 66,7 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
const uint16_t PROGMEM combo_ent[] = {KC_K, KC_L, COMBO_END};


combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [COMBO_ENT] = COMBO(combo_ent,KC_ENT),

};

M keyboards/program_yoink/staggered/keymaps/default/config.h => keyboards/program_yoink/staggered/keymaps/default/config.h +1 -2
@@ 20,6 20,5 @@
#define TAPPING_TERM 200

#ifdef COMBO_ENABLE
#    define COMBO_COUNT 10
#    define COMBO_TERM 200
#endif 
\ No newline at end of file
#endif

M keyboards/program_yoink/staggered/keymaps/default/keymap.c => keyboards/program_yoink/staggered/keymaps/default/keymap.c +1 -1
@@ 68,7 68,7 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
const uint16_t PROGMEM combo_slsh[] = {MT(MOD_RSFT, KC_DOT), KC_COMM, COMBO_END};


combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [COMBO_SLSH] = COMBO(combo_slsh,KC_SLSH),

};

M keyboards/program_yoink/staggered/keymaps/split_bar/config.h => keyboards/program_yoink/staggered/keymaps/split_bar/config.h +1 -2
@@ 20,6 20,5 @@
#define TAPPING_TERM 200

#ifdef COMBO_ENABLE
#    define COMBO_COUNT 10
#    define COMBO_TERM 200
#endif 
#endif

M keyboards/program_yoink/staggered/keymaps/split_bar/keymap.c => keyboards/program_yoink/staggered/keymaps/split_bar/keymap.c +1 -1
@@ 66,7 66,7 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
const uint16_t PROGMEM combo_slsh[] = {MT(MOD_RSFT, KC_DOT), KC_COMM, COMBO_END};


combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [COMBO_SLSH] = COMBO(combo_slsh,KC_SLSH),

};

M keyboards/projectcain/relic/keymaps/default/config.h => keyboards/projectcain/relic/keymaps/default/config.h +0 -1
@@ 17,7 17,6 @@
#pragma once

#define ENCODER_RESOLUTION 2
#define COMBO_COUNT 6
#define COMBO_TERM 50
#define QUICK_TAP_TERM 0
#define DISABLE_LEADER

M keyboards/projectcain/relic/keymaps/default/keymap.c => keyboards/projectcain/relic/keymaps/default/keymap.c +8 -8
@@ 25,22 25,22 @@ enum layers{
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [BASE] = LAYOUT_all(
    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
    KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_QUOTE,   
     KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,  
    KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_QUOTE,
     KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,
      MO(1), KC_LCTL,       MO(1), SFT_T(KC_BSPC), KC_SPACE, KC_SPACE, MO(2),      KC_LALT, MO(2)
  ),

  [NUM] = LAYOUT_all(
    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_KP_SLASH,    KC_7,    KC_8,    KC_9,    KC_MINUS,    KC_BSPC,
    KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_KP_ASTERISK,    KC_4,    KC_5,    KC_6,    KC_PLUS,   
     SC_LCPO,    KC_X,    KC_C,    KC_V,    KC_B,    KC_0,    KC_1,    KC_2, KC_3,  SC_RCPC,  
    KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_KP_ASTERISK,    KC_4,    KC_5,    KC_6,    KC_PLUS,
     SC_LCPO,    KC_X,    KC_C,    KC_V,    KC_B,    KC_0,    KC_1,    KC_2, KC_3,  SC_RCPC,
         MO(1), KC_LCTL,       KC_TRNS,  SFT_T(KC_BSPC), KC_TRNS,  KC_SPACE,  KC_TRNS,       KC_LALT, MO(2)
  ),
  

  [SYM] = LAYOUT_all(
    S(KC_GRV),    KC_GRV,    KC_TRNS,    S(KC_BSLS),    KC_BSLS,    KC_TRNS,    S(KC_MINS),    KC_EQL,    KC_TRNS,    C(KC_W),    QK_BOOT,
    S(KC_1),    S(KC_2),    S(KC_3),    S(KC_4),    S(KC_5),    S(KC_6),    S(KC_7),    S(KC_8),    KC_SCLN,    S(KC_SCLN),   
     S(KC_LBRC),    KC_LBRC,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_RBRC,    S(KC_RBRC),  
    S(KC_1),    S(KC_2),    S(KC_3),    S(KC_4),    S(KC_5),    S(KC_6),    S(KC_7),    S(KC_8),    KC_SCLN,    S(KC_SCLN),
     S(KC_LBRC),    KC_LBRC,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_RBRC,    S(KC_RBRC),
         MO(1), KC_LCTL,    KC_TRNS,  SFT_T(KC_BSPC),  KC_TRNS, KC_SPACE,  KC_TRNS,         KC_LALT, MO(2)
  ),



@@ 64,7 64,7 @@ const uint16_t PROGMEM qw_combo[] = {KC_Q, KC_W, COMBO_END};
const uint16_t PROGMEM as_combo[] = {KC_A, KC_S, COMBO_END};
const uint16_t PROGMEM fj_combo[] = {KC_F, KC_J, COMBO_END};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [KL_SLSH] = COMBO(kl_combo, S(KC_SLSH)),
  [JK_MINUS] = COMBO(jk_combo, KC_MINUS),
  [LQUOTE_ENTER] = COMBO(lquote_combo, KC_ENTER),

M keyboards/projectcain/vault35/keymaps/default/config.h => keyboards/projectcain/vault35/keymaps/default/config.h +0 -1
@@ 16,6 16,5 @@

#pragma once

#define COMBO_COUNT 2
#define COMBO_TERM 50
#define QUICK_TAP_TERM 0

M keyboards/projectcain/vault35/keymaps/default/keymap.c => keyboards/projectcain/vault35/keymaps/default/keymap.c +24 -24
@@ 1,18 1,18 @@

 /* Copyright 2021 projectcain 
  * 
  * 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/>. 
 /* Copyright 2021 projectcain
  *
  * 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/>.
  */

#include QMK_KEYBOARD_H


@@ 28,24 28,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [BASE] = LAYOUT_split_4space(

    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
    KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_QUOTE,          
    KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,         
    KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_QUOTE,
    KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,
         LALT(KC_TAB),      MO(1), SFT_T(KC_BSPC),  KC_SPACE,       MO(2), QK_BOOT
  ),

  [NUM] = LAYOUT_split_4space(

      KC_PGUP,    KC_HOME,    KC_UP,    KC_END,    KC_WBAK,    KC_PSLS,    KC_7,    KC_8,    KC_9,    KC_PMNS,    KC_DEL,   
     KC_PGDN,    KC_LEFT,    KC_DOWN,    KC_RGHT,    KC_WFWD,    KC_PAST,    KC_4,    KC_5,    KC_6,    KC_PPLS,            
      KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_0,    KC_1,    KC_2,    KC_3,    KC_PDOT,           
      KC_PGUP,    KC_HOME,    KC_UP,    KC_END,    KC_WBAK,    KC_PSLS,    KC_7,    KC_8,    KC_9,    KC_PMNS,    KC_DEL,
     KC_PGDN,    KC_LEFT,    KC_DOWN,    KC_RGHT,    KC_WFWD,    KC_PAST,    KC_4,    KC_5,    KC_6,    KC_PPLS,
      KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_0,    KC_1,    KC_2,    KC_3,    KC_PDOT,
           KC_TRNS,            KC_TRNS,  KC_TRNS,      KC_TRNS,         RALT(KC_F4), RALT(KC_F4)
  ),
  

  [SYM] = LAYOUT_split_4space(

         S(KC_GRV),    KC_GRV,    KC_BSLS,    S(KC_BSLS),    KC_TRNS,    KC_TRNS,    S(KC_MINS),    KC_EQL,    KC_TRNS,    C(KC_W),    C(KC_T),   
     S(KC_1),    S(KC_2),    S(KC_3),    S(KC_4),    S(KC_5),    S(KC_6),    S(KC_7),    S(KC_8),    KC_SCLN,    S(KC_SCLN),         
        KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,            
         S(KC_GRV),    KC_GRV,    KC_BSLS,    S(KC_BSLS),    KC_TRNS,    KC_TRNS,    S(KC_MINS),    KC_EQL,    KC_TRNS,    C(KC_W),    C(KC_T),
     S(KC_1),    S(KC_2),    S(KC_3),    S(KC_4),    S(KC_5),    S(KC_6),    S(KC_7),    S(KC_8),    KC_SCLN,    S(KC_SCLN),
        KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,
            KC_TRNS,           KC_TRNS,   KC_TRNS,      KC_TRNS,        KC_NUM,    KC_TRNS
  ),



@@ 60,7 60,7 @@ enum combos {
const uint16_t PROGMEM kl_combo[] = {KC_K, KC_L, COMBO_END};
const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [KL_SLSH] = COMBO(kl_combo, S(KC_SLSH)),
  [JK_MINUS] = COMBO(jk_combo, KC_MINUS)
};

M keyboards/projectcain/vault45/keymaps/default/config.h => keyboards/projectcain/vault45/keymaps/default/config.h +15 -16
@@ 1,21 1,20 @@
 /* Copyright 2021 projectcain 
	  * 
	  * 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/>. 
	  */ 
 /* Copyright 2021 projectcain
	  *
	  * 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 2
#define COMBO_TERM 50
#define QUICK_TAP_TERM 0

M keyboards/projectcain/vault45/keymaps/default/keymap.c => keyboards/projectcain/vault45/keymaps/default/keymap.c +13 -13
@@ 1,14 1,14 @@
 /* Copyright 2021 projectcain 
  * 
  * 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. 
 /* Copyright 2021 projectcain
  *
  * 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.
  * */

#include QMK_KEYBOARD_H


@@ 34,7 34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    KC_LBRC,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_0,    KC_1,    KC_2,    KC_3,    KC_PDOT,             KC_RBRC,
        KC_PSCR,     KC_TRNS,            KC_TRNS,  KC_TRNS,       KC_TRNS,  S(KC_RCTL),        RALT(KC_F4), RALT(KC_F4)
  ),
  

  [SYM] = LAYOUT_split_4space(
    RGB_TOG,      S(KC_GRV),    KC_GRV,    KC_BSLS,    S(KC_BSLS),    KC_TRNS,    KC_TRNS,    S(KC_MINS),    KC_EQL,    KC_TRNS,    C(KC_W),    C(KC_T),   KC_TRNS,
    KC_TRNS,    S(KC_1),    S(KC_2),    S(KC_3),    S(KC_4),    S(KC_5),    S(KC_6),    S(KC_7),    S(KC_8),    KC_SCLN,    S(KC_SCLN),          KC_TRNS,


@@ 53,7 53,7 @@ enum combos {
const uint16_t PROGMEM kl_combo[] = {KC_K, KC_L, COMBO_END};
const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [KL_SLSH] = COMBO(kl_combo, S(KC_SLSH)),
  [JK_MINUS] = COMBO(jk_combo, KC_MINUS)
};

M keyboards/q4z/keymaps/default/config.h => keyboards/q4z/keymaps/default/config.h +0 -1
@@ 16,6 16,5 @@
#pragma once

#ifdef COMBO_ENABLE
#define COMBO_COUNT 5
#define COMBO_TERM 200
#endif

M keyboards/q4z/keymaps/default/keymap.c => keyboards/q4z/keymaps/default/keymap.c +1 -1
@@ 74,7 74,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_A, KC_S, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_Q, KC_W, 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),

M keyboards/q4z/keymaps/rjboone/config.h => keyboards/q4z/keymaps/rjboone/config.h +0 -2
@@ 18,6 18,4 @@
#undef TAPPING_TERM
#define TAPPING_TERM 300

#undef COMBO_COUNT
#define COMBO_COUNT 5
#define COMBO_TERM 50

M keyboards/q4z/keymaps/rjboone/keymap.c => keyboards/q4z/keymaps/rjboone/keymap.c +1 -1
@@ 80,7 80,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_A, KC_S, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_Q, KC_W, 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),

M keyboards/qpockets/eggman/keymaps/default/config.h => keyboards/qpockets/eggman/keymaps/default/config.h +1 -2
@@ 21,6 21,5 @@

/*Combos*/
#ifdef COMBO_ENABLE
#    define COMBO_COUNT 5
#    define COMBO_TERM 50
#endif 
#endif

M keyboards/qpockets/eggman/keymaps/default/keymap.c => keyboards/qpockets/eggman/keymaps/default/keymap.c +1 -1
@@ 84,7 84,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_S, KC_D, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_T, KC_Y, COMBO_END};
const uint16_t PROGMEM combo_del[] = {KC_Q, KC_W, COMBO_END};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [COMBO_BSPC] = COMBO(combo_bspc,KC_BSPC),
  [COMBO_ENT] = COMBO(combo_ent,KC_ENT),
  [COMBO_TAB] = COMBO(combo_tab,KC_TAB),

M keyboards/qpockets/space_space/rev1/keymaps/big_space/config.h => keyboards/qpockets/space_space/rev1/keymaps/big_space/config.h +1 -2
@@ 21,6 21,5 @@

/*Combos*/
#ifdef COMBO_ENABLE
#    define COMBO_COUNT 5
#    define COMBO_TERM 50
#endif 
\ No newline at end of file
#endif

M keyboards/qpockets/space_space/rev1/keymaps/big_space/keymap.c => keyboards/qpockets/space_space/rev1/keymaps/big_space/keymap.c +1 -1
@@ 120,7 120,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_S, KC_D, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_T, KC_Y, COMBO_END};
const uint16_t PROGMEM combo_del[] = {KC_Q, KC_W, COMBO_END};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [COMBO_BSPC] = COMBO(combo_bspc,KC_BSPC),
  [COMBO_ENT] = COMBO(combo_ent,KC_ENT),
  [COMBO_TAB] = COMBO(combo_tab,KC_TAB),

M keyboards/qpockets/space_space/rev1/keymaps/default/config.h => keyboards/qpockets/space_space/rev1/keymaps/default/config.h +1 -2
@@ 21,6 21,5 @@

/*Combos*/
#ifdef COMBO_ENABLE
#    define COMBO_COUNT 5
#    define COMBO_TERM 50
#endif 
\ No newline at end of file
#endif

M keyboards/qpockets/space_space/rev1/keymaps/default/keymap.c => keyboards/qpockets/space_space/rev1/keymaps/default/keymap.c +1 -1
@@ 122,7 122,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_S, KC_D, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_T, KC_Y, COMBO_END};
const uint16_t PROGMEM combo_del[] = {KC_Q, KC_W, COMBO_END};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [COMBO_BSPC] = COMBO(combo_bspc,KC_BSPC),
  [COMBO_ENT] = COMBO(combo_ent,KC_ENT),
  [COMBO_TAB] = COMBO(combo_tab,KC_TAB),

M keyboards/qpockets/space_space/rev2/keymaps/big_space/config.h => keyboards/qpockets/space_space/rev2/keymaps/big_space/config.h +1 -2
@@ 21,6 21,5 @@

/*Combos*/
#ifdef COMBO_ENABLE
#    define COMBO_COUNT 5
#    define COMBO_TERM 50
#endif 
\ No newline at end of file
#endif

M keyboards/qpockets/space_space/rev2/keymaps/big_space/keymap.c => keyboards/qpockets/space_space/rev2/keymaps/big_space/keymap.c +4 -4
@@ 13,7 13,7 @@
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 

#include QMK_KEYBOARD_H

enum layers{


@@ 52,14 52,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_TRNS, KC_6,    KC_7,    KC_8,    KC_9,     KC_0,
    KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_TRNS, KC_CIRC, KC_AMPR, KC_ASTR, KC_EQUAL, KC_MINS,
    KC_PIPE, KC_BSLS, KC_LPRN, KC_LBRC, KC_SCLN, KC_TRNS, KC_COLN, KC_RBRC, KC_RPRN, KC_PLUS,  KC_UNDS,
                    KC_TRNS,      KC_TRNS,      KC_TRNS 
                    KC_TRNS,      KC_TRNS,      KC_TRNS
  ),

  [_NAV] = LAYOUT_big_space(
    KC_HOME, KC_UP,   KC_END,   KC_PGUP, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC,
    KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TAB,
    KC_MPRV, KC_MPLY, KC_MNXT,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_ENT,
                    KC_TRNS,   KC_TRNS,   KC_TRNS 
                    KC_TRNS,   KC_TRNS,   KC_TRNS
  ),
};



@@ 71,7 71,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_S, KC_D, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_T, KC_Y, COMBO_END};
const uint16_t PROGMEM combo_del[] = {KC_Q, KC_W, COMBO_END};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [COMBO_BSPC] = COMBO(combo_bspc,KC_BSPC),
  [COMBO_ENT] = COMBO(combo_ent,KC_ENT),
  [COMBO_TAB] = COMBO(combo_tab,KC_TAB),

M keyboards/qpockets/space_space/rev2/keymaps/default/config.h => keyboards/qpockets/space_space/rev2/keymaps/default/config.h +1 -2
@@ 21,6 21,5 @@

/*Combos*/
#ifdef COMBO_ENABLE
#    define COMBO_COUNT 5
#    define COMBO_TERM 50
#endif 
\ No newline at end of file
#endif

M keyboards/qpockets/space_space/rev2/keymaps/default/keymap.c => keyboards/qpockets/space_space/rev2/keymaps/default/keymap.c +4 -4
@@ 13,7 13,7 @@
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 

#include QMK_KEYBOARD_H

enum layers{


@@ 46,14 46,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_TRNS, KC_6,    KC_7,    KC_8,    KC_9,     KC_0,
    KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_TRNS, KC_CIRC, KC_AMPR, KC_ASTR, KC_EQUAL, KC_MINS,
    KC_PIPE, KC_BSLS, KC_LPRN, KC_LBRC, KC_SCLN, KC_TRNS, KC_COLN, KC_RBRC, KC_RPRN, KC_PLUS,  KC_UNDS,
                    KC_TRNS,    KC_TRNS,   KC_TRNS,    KC_TRNS,      KC_TRNS,    KC_TRNS 
                    KC_TRNS,    KC_TRNS,   KC_TRNS,    KC_TRNS,      KC_TRNS,    KC_TRNS
  ),

  [_NAV] = LAYOUT_default(
    KC_TRNS, KC_HOME, KC_UP,   KC_END,   KC_PGUP,  QK_BOOT,   KC_F1, KC_F2,  KC_F3,  KC_F4,  KC_BSPC,
    KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGDN,  KC_TRNS, KC_F4, KC_F5,  KC_F6,  KC_F7,  KC_TAB,
    KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT,  KC_TRNS,  KC_LCAP, KC_F9, KC_F10, KC_F11, KC_F12, KC_ENT,
                    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS 
                    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS
  ),
};



@@ 67,7 67,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_S, KC_D, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_T, KC_Y, COMBO_END};
const uint16_t PROGMEM combo_del[] = {KC_Q, KC_W, COMBO_END};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [COMBO_BSPC] = COMBO(combo_bspc,KC_BSPC),
  [COMBO_ENT] = COMBO(combo_ent,KC_ENT),
  [COMBO_TAB] = COMBO(combo_tab,KC_TAB),

M keyboards/qpockets/space_space/rev2/keymaps/qpockets/config.h => keyboards/qpockets/space_space/rev2/keymaps/qpockets/config.h +1 -2
@@ 21,6 21,5 @@

/*Combos*/
#ifdef COMBO_ENABLE
#    define COMBO_COUNT 5
#    define COMBO_TERM 25
#endif 
#endif

M keyboards/qpockets/space_space/rev2/keymaps/qpockets/keymap.c => keyboards/qpockets/space_space/rev2/keymaps/qpockets/keymap.c +5 -5
@@ 13,7 13,7 @@
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 

#include QMK_KEYBOARD_H

enum layers{


@@ 41,19 41,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_ENT,  KC_N,   KC_M,   KC_COMM, KC_DOT, KC_SLSH,
                   KC_PSCR, KC_LCTL, KC_DN_BSPC,   KC_UP_SPC,  KC_RALT, KC_MPLY
  ),
  

 [_SYM] = LAYOUT_default(
    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_TRNS, KC_6,    KC_7,    KC_8,    KC_9,     KC_0,
    KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_TRNS, KC_CIRC, KC_AMPR, KC_ASTR, KC_EQUAL, KC_MINS,
    KC_PIPE, KC_BSLS, KC_LPRN, KC_LBRC, KC_SCLN, KC_TRNS, KC_COLN, KC_RBRC, KC_RPRN, KC_PLUS,  KC_UNDS,
                    KC_TRNS,    KC_TRNS,   KC_TRNS,    KC_TRNS,      KC_TRNS,    KC_TRNS 
                    KC_TRNS,    KC_TRNS,   KC_TRNS,    KC_TRNS,      KC_TRNS,    KC_TRNS
  ),

  [_NAV] = LAYOUT_default(
    KC_TRNS, KC_HOME, KC_UP,   KC_END,   KC_PGUP, QK_BOOT, KC_F1, KC_F2,  KC_F3,  KC_F4,  KC_BSPC,
    KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGDN, KC_TRNS, KC_F5, KC_F6,  KC_F7,  KC_F8,  KC_TAB,
    KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT,  KC_TRNS, KC_CAPS, KC_F9, KC_F10, KC_F11, KC_F12, KC_ENT,
                    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS 
                    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS
  ),
};



@@ 65,7 65,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_S, KC_D, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_T, KC_Y, COMBO_END};
const uint16_t PROGMEM combo_del[] = {KC_Q, KC_W, COMBO_END};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [COMBO_BSPC] = COMBO(combo_bspc,KC_BSPC),
  [COMBO_ENT] = COMBO(combo_ent,KC_ENT),
  [COMBO_TAB] = COMBO(combo_tab,KC_TAB),

M keyboards/qpockets/wanten/keymaps/2u_bars/config.h => keyboards/qpockets/wanten/keymaps/2u_bars/config.h +1 -2
@@ 21,6 21,5 @@

/*Combos*/
#ifdef COMBO_ENABLE
#    define COMBO_COUNT 5
#    define COMBO_TERM 25
#endif 
#endif

M keyboards/qpockets/wanten/keymaps/2u_bars/keymap.c => keyboards/qpockets/wanten/keymaps/2u_bars/keymap.c +5 -6
@@ 13,7 13,7 @@
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 

#include QMK_KEYBOARD_H

enum layers{


@@ 21,7 21,7 @@ enum layers{
  _GAME,
  _SYM,
  _NAV
  

};

enum combo_events {


@@ 45,14 45,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    KC_MPRV,   KC_Z,    KC_X,    KC_C,   KC_V,   KC_B,   KC_ENT,  KC_N,   KC_M,   KC_COMM, KC_DOT,    KC_SLSH,
    SNIP, KC_LGUI, KC_LCTL,  KC_LCTL,		KC_DN_BSPC,    		KC_UP_SPC,		  KC_RALT, TG(_GAME), KC_MUTE
  ),
  

  [_GAME] = LAYOUT_2u_bars(
    KC_TRNS, KC_Q,   KC_W,   KC_E,  KC_R,   KC_T,   KC_ESC,  KC_Y,   KC_U,   KC_I,    KC_O,   KC_P,
    KC_TAB,  KC_A,   KC_S,   KC_D,  KC_F,   KC_G,   KC_LSFT, KC_H,   KC_SJ,  KC_K,    KC_L,   KC_QUOT,
    KC_LSFT, KC_Z,   KC_X,   KC_C,  KC_V,   KC_B,   KC_ENT,  KC_N,   KC_M,   KC_COMM, KC_DOT, KC_SLSH,
    KC_LCTL,  KC_LGUI,  KC_LALT, KC_ESC,	 KC_SPC,   	 KC_GUP_BSPC, 		 KC_RALT, KC_TRNS, KC_BSPC
  ),
  

 [_SYM] = LAYOUT_2u_bars(
    KC_TRNS, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_TRNS, KC_6,    KC_7,    KC_8,    KC_9,     KC_0,
    KC_TRNS, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_TRNS, KC_CIRC, KC_AMPR, KC_ASTR, KC_EQUAL, KC_MINS,


@@ 93,7 93,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_S, KC_D, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_T, KC_Y, COMBO_END};
const uint16_t PROGMEM combo_del[] = {KC_Q, KC_W, COMBO_END};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [COMBO_BSPC] = COMBO(combo_bspc,KC_BSPC),
  [COMBO_ENT] = COMBO(combo_ent,KC_ENT),
  [COMBO_TAB] = COMBO(combo_tab,KC_TAB),


@@ 101,4 101,3 @@ combo_t key_combos[COMBO_COUNT] = {
  [COMBO_DEL] = COMBO(combo_del,KC_DEL)
};
#endif


M keyboards/qpockets/wanten/keymaps/625_bar/config.h => keyboards/qpockets/wanten/keymaps/625_bar/config.h +1 -2
@@ 21,6 21,5 @@

/*Combos*/
#ifdef COMBO_ENABLE
#    define COMBO_COUNT 5
#    define COMBO_TERM 25
#endif 
#endif

M keyboards/qpockets/wanten/keymaps/625_bar/keymap.c => keyboards/qpockets/wanten/keymaps/625_bar/keymap.c +5 -6
@@ 13,7 13,7 @@
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 

#include QMK_KEYBOARD_H

enum layers{


@@ 21,7 21,7 @@ enum layers{
  _GAME,
  _SYM,
  _NAV
  

};

enum combo_events {


@@ 45,14 45,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    KC_MPRV,  KC_DZ,    KC_X,    KC_C,   KC_V,   KC_B,   KC_ENT,  KC_N,   KC_M,   KC_COMM, KC_DOT,    KC_SLSH,
    SNIP, KC_LGUI, KC_LCTL,  			  		KC_UP_SPC,		  KC_RALT, TG(_GAME)
  ),
  

  [_GAME] = LAYOUT_625_bar(
    KC_TRNS, KC_Q,   KC_W,   KC_E,  KC_R,   KC_T,   KC_ESC,  KC_Y,   KC_U,   KC_I,    KC_O,   KC_P,
    KC_TAB,  KC_A,   KC_S,   KC_D,  KC_F,   KC_G,   KC_LSFT, KC_H,   KC_SJ,  KC_K,    KC_L,   KC_QUOT,
    KC_LSFT, KC_Z,   KC_X,   KC_C,  KC_V,   KC_B,   KC_ENT,  KC_N,   KC_M,   KC_COMM, KC_DOT, KC_SLSH,
    KC_LCTL,  KC_LGUI,  KC_LALT,    		 KC_SPC,   	  		 KC_RALT, KC_TRNS
  ),
  

 [_SYM] = LAYOUT_625_bar(
    KC_TRNS, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_TRNS, KC_6,    KC_7,    KC_8,    KC_9,     KC_0,
    KC_TRNS, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_TRNS, KC_CIRC, KC_AMPR, KC_ASTR, KC_EQUAL, KC_MINS,


@@ 93,7 93,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_S, KC_D, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_T, KC_Y, COMBO_END};
const uint16_t PROGMEM combo_del[] = {KC_Q, KC_W, COMBO_END};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [COMBO_BSPC] = COMBO(combo_bspc,KC_BSPC),
  [COMBO_ENT] = COMBO(combo_ent,KC_ENT),
  [COMBO_TAB] = COMBO(combo_tab,KC_TAB),


@@ 101,4 101,3 @@ combo_t key_combos[COMBO_COUNT] = {
  [COMBO_DEL] = COMBO(combo_del,KC_DEL)
};
#endif


M keyboards/qpockets/wanten/keymaps/default/config.h => keyboards/qpockets/wanten/keymaps/default/config.h +1 -2
@@ 21,6 21,5 @@

/*Combos*/
#ifdef COMBO_ENABLE
#    define COMBO_COUNT 5
#    define COMBO_TERM 25
#endif 
#endif

M keyboards/qpockets/wanten/keymaps/default/keymap.c => keyboards/qpockets/wanten/keymaps/default/keymap.c +5 -6
@@ 13,7 13,7 @@
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 

#include QMK_KEYBOARD_H

enum layers{


@@ 21,7 21,7 @@ enum layers{
  _GAME,
  _SYM,
  _NAV
  

};

enum combo_events {


@@ 45,14 45,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    KC_MPRV,   KC_Z,    KC_X,    KC_C,   KC_V,   KC_B,   KC_ENT,  KC_N,   KC_M,   KC_COMM, KC_DOT,    KC_SLSH,
    SNIP, KC_LGUI, KC_LCTL,  			KC_DN_BSPC,    		KC_UP_SPC,		  KC_RALT, TG(_GAME), KC_MUTE
  ),
  

  [_GAME] = LAYOUT_default(
    KC_TRNS, KC_Q,   KC_W,   KC_E,  KC_R,   KC_T,   KC_ESC,  KC_Y,   KC_U,   KC_I,    KC_O,   KC_P,
    KC_TAB,  KC_A,   KC_S,   KC_D,  KC_F,   KC_G,   KC_LSFT, KC_H,   KC_SJ,  KC_K,    KC_L,   KC_QUOT,
    KC_LSFT, KC_Z,   KC_X,   KC_C,  KC_V,   KC_B,   KC_ENT,  KC_N,   KC_M,   KC_COMM, KC_DOT, KC_SLSH,
    KC_LCTL,  KC_LGUI,  KC_LALT,    		 KC_SPC,   	 KC_GUP_BSPC, 		 KC_RALT, KC_TRNS, KC_BSPC
  ),
  

 [_SYM] = LAYOUT_default(
    KC_TRNS, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_TRNS, KC_6,    KC_7,    KC_8,    KC_9,     KC_0,
    KC_TRNS, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_TRNS, KC_CIRC, KC_AMPR, KC_ASTR, KC_EQUAL, KC_MINS,


@@ 93,7 93,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_S, KC_D, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_T, KC_Y, COMBO_END};
const uint16_t PROGMEM combo_del[] = {KC_Q, KC_W, COMBO_END};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [COMBO_BSPC] = COMBO(combo_bspc,KC_BSPC),
  [COMBO_ENT] = COMBO(combo_ent,KC_ENT),
  [COMBO_TAB] = COMBO(combo_tab,KC_TAB),


@@ 101,4 101,3 @@ combo_t key_combos[COMBO_COUNT] = {
  [COMBO_DEL] = COMBO(combo_del,KC_DEL)
};
#endif


M keyboards/rgbkb/zen/rev1/keymaps/cwebster2/config.h => keyboards/rgbkb/zen/rev1/keymaps/cwebster2/config.h +0 -7
@@ 17,11 17,4 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.

#pragma once


#define EE_HANDS

#ifdef COMBO_ENABLE
  #define COMBO_COUNT 2
#endif

#define EE_HANDS

M keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/combo.c => keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/combo.c +0 -5
@@ 96,12 96,7 @@ enum combos {
    SHIFT_LEFT,
    ALTGR_LEFT,
    CONTROL_SHIFT_LEFT,

    /* Just to replace the define in config.h */
    COMBO_LENGTH,
};
uint16_t COMBO_LEN = COMBO_LENGTH;


/* Sequences fo keys */
const uint16_t PROGMEM combo_leader[] =                 {LT(_MOUSE, KC_COMM), LT(_ARROWS, KC_DOT), COMBO_END};

M keyboards/splitkb/kyria/keymaps/cameronjlarsen/keymap.c => keyboards/splitkb/kyria/keymaps/cameronjlarsen/keymap.c +1 -4
@@ 176,11 176,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};


M keyboards/splitkb/kyria/keymaps/cwebster2/config.h => keyboards/splitkb/kyria/keymaps/cwebster2/config.h +0 -4
@@ 42,10 42,6 @@
  //#define RGBLIGHT_STARTUP_ANIMATION
#endif

#ifdef COMBO_ENABLE
  #define COMBO_COUNT 5
#endif

#define EE_HANDS

//#define DEBUG_MATRIX_SCAN_RATE

M keyboards/splitkb/kyria/keymaps/cwebster2/keymap.c => keyboards/splitkb/kyria/keymaps/cwebster2/keymap.c +1 -1
@@ 40,7 40,7 @@ const uint16_t PROGMEM curly_combo[] = { KC_F, KC_P, COMBO_END };
const uint16_t PROGMEM parens_combo[] =  { KC_P, KC_B, COMBO_END };
const uint16_t PROGMEM square_combo[] = { KC_D, KC_V, COMBO_END };

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
    [ZX_COPY]  = COMBO(copy_combo, LCTL_T(KC_C)),
    [CV_PASTE] = COMBO(paste_combo, LCTL_T(KC_V)),
    [PB_PARENS] = COMBO(parens_combo, KC_LPRN),

M keyboards/synapse/keymaps/7u_space/config.h => keyboards/synapse/keymaps/7u_space/config.h +1 -2
@@ 21,6 21,5 @@

/*Combos*/
#ifdef COMBO_ENABLE
#    define COMBO_COUNT 5
#    define COMBO_TERM 50
#endif 
\ No newline at end of file
#endif

M keyboards/synapse/keymaps/7u_space/keymap.c => keyboards/synapse/keymaps/7u_space/keymap.c +2 -2
@@ 13,7 13,7 @@
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 

#include QMK_KEYBOARD_H

enum layers{


@@ 67,7 67,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_S, KC_D, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_T, KC_Y, COMBO_END};
const uint16_t PROGMEM combo_del[] = {KC_Q, KC_W, COMBO_END};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [COMBO_BSPC] = COMBO(combo_bspc,KC_BSPC),
  [COMBO_ENT] = COMBO(combo_ent,KC_ENT),
  [COMBO_TAB] = COMBO(combo_tab,KC_TAB),

M keyboards/synapse/keymaps/default/config.h => keyboards/synapse/keymaps/default/config.h +1 -2
@@ 21,6 21,5 @@

/*Combos*/
#ifdef COMBO_ENABLE
#    define COMBO_COUNT 5
#    define COMBO_TERM 50
#endif 
\ No newline at end of file
#endif

M keyboards/synapse/keymaps/default/keymap.c => keyboards/synapse/keymaps/default/keymap.c +2 -2
@@ 13,7 13,7 @@
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 

#include QMK_KEYBOARD_H

enum layers{


@@ 67,7 67,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_S, KC_D, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_T, KC_Y, COMBO_END};
const uint16_t PROGMEM combo_del[] = {KC_Q, KC_W, COMBO_END};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [COMBO_BSPC] = COMBO(combo_bspc,KC_BSPC),
  [COMBO_ENT] = COMBO(combo_ent,KC_ENT),
  [COMBO_TAB] = COMBO(combo_tab,KC_TAB),

M keyboards/tominabox1/adalyn/keymaps/default/config.h => keyboards/tominabox1/adalyn/keymaps/default/config.h +0 -1
@@ 16,6 16,5 @@
#pragma once

#ifdef COMBO_ENABLE
#    define COMBO_COUNT 5
#    define COMBO_TERM 200
#endif

M keyboards/tominabox1/adalyn/keymaps/default/keymap.c => keyboards/tominabox1/adalyn/keymaps/default/keymap.c +1 -1
@@ 61,7 61,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_Q, KC_W, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_E, KC_W, 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),

M keyboards/tominabox1/le_chiffre/keymaps/default/config.h => keyboards/tominabox1/le_chiffre/keymaps/default/config.h +0 -1
@@ 15,5 15,4 @@
 */
#pragma once

#define COMBO_COUNT 5
#define COMBO_TERM 30

M keyboards/tominabox1/le_chiffre/keymaps/default/keymap.c => keyboards/tominabox1/le_chiffre/keymaps/default/keymap.c +1 -1
@@ 80,7 80,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_Q, KC_W, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_E, KC_W, 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),

M keyboards/tominabox1/qaz/keymaps/default/config.h => keyboards/tominabox1/qaz/keymaps/default/config.h +0 -1
@@ 1,6 1,5 @@
#pragma once

#ifdef COMBO_ENABLE
#    define COMBO_COUNT 5
#    define COMBO_TERM 200
#endif

M keyboards/tominabox1/qaz/keymaps/default/keymap.c => keyboards/tominabox1/qaz/keymaps/default/keymap.c +1 -1
@@ 46,7 46,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_Q, KC_W, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_E, KC_W, 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),

M keyboards/tominabox1/qaz/keymaps/default_big_space/config.h => keyboards/tominabox1/qaz/keymaps/default_big_space/config.h +0 -1
@@ 1,6 1,5 @@
#pragma once

#ifdef COMBO_ENABLE
#    define COMBO_COUNT 5
#    define COMBO_TERM 200
#endif

M keyboards/tominabox1/qaz/keymaps/default_big_space/keymap.c => keyboards/tominabox1/qaz/keymaps/default_big_space/keymap.c +1 -1
@@ 46,7 46,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_Q, KC_W, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_E, KC_W, 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),

M keyboards/tominabox1/underscore33/rev1/keymaps/default/config.h => keyboards/tominabox1/underscore33/rev1/keymaps/default/config.h +0 -1
@@ 16,5 16,4 @@
#pragma once

/* Combos */
#define COMBO_COUNT 5
#define COMBO_TERM 50

M keyboards/tominabox1/underscore33/rev1/keymaps/default/keymap.c => keyboards/tominabox1/underscore33/rev1/keymaps/default/keymap.c +1 -1
@@ 71,7 71,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_Q, KC_W, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_E, KC_W, 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),

M keyboards/tominabox1/underscore33/rev1/keymaps/default_big_space/config.h => keyboards/tominabox1/underscore33/rev1/keymaps/default_big_space/config.h +0 -1
@@ 16,5 16,4 @@
#pragma once

/* Combos */
#define COMBO_COUNT 5
#define COMBO_TERM 50

M keyboards/tominabox1/underscore33/rev1/keymaps/default_big_space/keymap.c => keyboards/tominabox1/underscore33/rev1/keymaps/default_big_space/keymap.c +1 -1
@@ 71,7 71,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_Q, KC_W, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_E, KC_W, 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),

M keyboards/tominabox1/underscore33/rev2/keymaps/default/config.h => keyboards/tominabox1/underscore33/rev2/keymaps/default/config.h +0 -1
@@ 16,5 16,4 @@
#pragma once

/* Combos */
#define COMBO_COUNT 5
#define COMBO_TERM 50

M keyboards/tominabox1/underscore33/rev2/keymaps/default/keymap.c => keyboards/tominabox1/underscore33/rev2/keymaps/default/keymap.c +1 -1
@@ 71,7 71,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_Q, KC_W, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_E, KC_W, 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),

M keyboards/tominabox1/underscore33/rev2/keymaps/default_big_space/config.h => keyboards/tominabox1/underscore33/rev2/keymaps/default_big_space/config.h +0 -1
@@ 16,5 16,4 @@
#pragma once

/* Combos */
#define COMBO_COUNT 5
#define COMBO_TERM 50

M keyboards/tominabox1/underscore33/rev2/keymaps/default_big_space/keymap.c => keyboards/tominabox1/underscore33/rev2/keymaps/default_big_space/keymap.c +1 -1
@@ 71,7 71,7 @@ const uint16_t PROGMEM combo_tab[] = {KC_Q, KC_W, COMBO_END};
const uint16_t PROGMEM combo_esc[] = {KC_E, KC_W, 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),

M keyboards/xiudi/xd75/keymaps/4sstylz/config.h => keyboards/xiudi/xd75/keymaps/4sstylz/config.h +0 -1
@@ 24,7 24,6 @@
#define LSPO_KEYS KC_LSFT, KC_TRNS, KC_HOME
#define LCPO_KEYS KC_LCTL, KC_TRNS, KC_END

#define COMBO_COUNT 1
#define TAPPING_TERM 175

#define BACKLIGHT_BREATHING

M keyboards/xiudi/xd75/keymaps/4sstylz/keymap.c => keyboards/xiudi/xd75/keymaps/4sstylz/keymap.c +1 -1
@@ 38,7 38,7 @@ enum combo_events {
};

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, SCR_LCK)};
combo_t key_combos[] = {COMBO(lock_combo, SCR_LCK)};

// Layer shorthand
#define _QW 0

M keyboards/ymdk/melody96/keymaps/dvz/config.h => keyboards/ymdk/melody96/keymaps/dvz/config.h +0 -1
@@ 16,7 16,6 @@

#pragma once

#define COMBO_COUNT 4
#define COMBO_TERM 100

//#define UNICODE_SELECTED_MODES UNICODE_MODE_WINCOMPOSE

M keyboards/ymdk/melody96/keymaps/dvz/keymap.c => keyboards/ymdk/melody96/keymaps/dvz/keymap.c +1 -1
@@ 34,7 34,7 @@ const uint16_t PROGMEM oe_combo[] = {KC_O, KC_E, COMBO_END};
const uint16_t PROGMEM ue_combo[] = {KC_U, KC_E, COMBO_END};
const uint16_t PROGMEM sz_combo[] = {KC_S, KC_Y, COMBO_END};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [UML_AE] = COMBO(ae_combo, KC_QUOT),
  [UML_OE] = COMBO(oe_combo, KC_SCLN),
  [UML_UE] = COMBO(ue_combo, KC_LBRC),

M quantum/keymap_introspection.c => quantum/keymap_introspection.c +21 -0
@@ 70,3 70,24 @@ __attribute__((weak)) uint16_t keycode_at_encodermap_location(uint8_t layer_num,
}

#endif // defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE)

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Combos

#if defined(COMBO_ENABLE)

uint16_t combo_count_raw(void) {
    return sizeof(key_combos) / sizeof(combo_t);
}
__attribute__((weak)) uint16_t combo_count(void) {
    return combo_count_raw();
}

combo_t* combo_get_raw(uint16_t combo_idx) {
    return &key_combos[combo_idx];
}
__attribute__((weak)) combo_t* combo_get(uint16_t combo_idx) {
    return combo_get_raw(combo_idx);
}

#endif // defined(COMBO_ENABLE)

M quantum/keymap_introspection.h => quantum/keymap_introspection.h +21 -0
@@ 34,3 34,24 @@ uint16_t keycode_at_encodermap_location_raw(uint8_t layer_num, uint8_t encoder_i
uint16_t keycode_at_encodermap_location(uint8_t layer_num, uint8_t encoder_idx, bool clockwise);

#endif // defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE)

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Combos

#if defined(COMBO_ENABLE)

// Forward declaration of combo_t so we don't need to deal with header reordering
struct combo_t;
typedef struct combo_t combo_t;

// Get the number of combos defined in the user's keymap, stored in firmware rather than any other persistent storage
uint16_t combo_count_raw(void);
// Get the number of combos defined in the user's keymap, potentially stored dynamically
uint16_t combo_count(void);

// Get the keycode for the encoder mapping location, stored in firmware rather than any other persistent storage
combo_t* combo_get_raw(uint16_t combo_idx);
// Get the keycode for the encoder mapping location, potentially stored dynamically
combo_t* combo_get(uint16_t combo_idx);

#endif // defined(COMBO_ENABLE)

M quantum/process_keycode/process_combo.c => quantum/process_keycode/process_combo.c +8 -15
@@ 19,14 19,7 @@
#include "process_combo.h"
#include "action_tapping.h"
#include "action.h"

#ifdef COMBO_COUNT
__attribute__((weak)) combo_t key_combos[COMBO_COUNT];
uint16_t                      COMBO_LEN = COMBO_COUNT;
#else
extern combo_t  key_combos[];
extern uint16_t COMBO_LEN;
#endif
#include "keymap_introspection.h"

__attribute__((weak)) void process_combo_event(uint16_t combo_index, bool pressed) {}



@@ 195,8 188,8 @@ static inline uint16_t _get_combo_term(uint16_t combo_index, combo_t *combo) {
void clear_combos(void) {
    uint16_t index = 0;
    longest_term   = 0;
    for (index = 0; index < COMBO_LEN; ++index) {
        combo_t *combo = &key_combos[index];
    for (index = 0; index < combo_count(); ++index) {
        combo_t *combo = combo_get(index);
        if (!COMBO_ACTIVE(combo)) {
            RESET_COMBO_STATE(combo);
        }


@@ 287,7 280,7 @@ void drop_combo_from_buffer(uint16_t combo_index) {
        queued_combo_t *qcombo = &combo_buffer[i];

        if (qcombo->combo_index == combo_index) {
            combo_t *combo = &key_combos[combo_index];
            combo_t *combo = combo_get(combo_index);
            DISABLE_COMBO(combo);

            if (i == combo_buffer_read) {


@@ 354,7 347,7 @@ static inline void apply_combos(void) {
    // Apply all buffered normal combos.
    for (uint8_t i = combo_buffer_read; i != combo_buffer_write; INCREMENT_MOD(i)) {
        queued_combo_t *buffered_combo = &combo_buffer[i];
        combo_t *       combo          = &key_combos[buffered_combo->combo_index];
        combo_t *       combo          = combo_get(buffered_combo->combo_index);

#ifdef COMBO_MUST_TAP_PER_COMBO
        if (get_combo_must_tap(buffered_combo->combo_index, combo)) {


@@ 459,7 452,7 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t *
                combo_t *drop = NULL;
                for (uint8_t combo_buffer_i = combo_buffer_read; combo_buffer_i != combo_buffer_write; INCREMENT_MOD(combo_buffer_i)) {
                    queued_combo_t *qcombo         = &combo_buffer[combo_buffer_i];
                    combo_t *       buffered_combo = &key_combos[qcombo->combo_index];
                    combo_t *       buffered_combo = combo_get(qcombo->combo_index);

                    if ((drop = overlaps(buffered_combo, combo))) {
                        DISABLE_COMBO(drop);


@@ 565,8 558,8 @@ bool process_combo(uint16_t keycode, keyrecord_t *record) {
    }
#endif

    for (uint16_t idx = 0; idx < COMBO_LEN; ++idx) {
        combo_t *combo = &key_combos[idx];
    for (uint16_t idx = 0; idx < combo_count(); ++idx) {
        combo_t *combo = combo_get(idx);
        is_combo_key |= process_single_combo(combo, keycode, record, idx);
        no_combo_keys_pressed = no_combo_keys_pressed && (NO_COMBO_KEYS_ARE_DOWN || COMBO_ACTIVE(combo) || COMBO_DISABLED(combo));
    }

M quantum/process_keycode/process_combo.h => quantum/process_keycode/process_combo.h +1 -1
@@ 37,7 37,7 @@
#    define COMBO_BUFFER_LENGTH 4
#endif

typedef struct {
typedef struct combo_t {
    const uint16_t *keys;
    uint16_t        keycode;
#ifdef EXTRA_SHORT_COMBOS

M tests/caps_word/caps_word_combo/test.mk => tests/caps_word/caps_word_combo/test.mk +1 -0
@@ 17,3 17,4 @@ CAPS_WORD_ENABLE = yes
COMBO_ENABLE = yes
AUTO_SHIFT_ENABLE = yes

INTROSPECTION_KEYMAP_C = test_combos.c

M tests/caps_word/caps_word_combo/test_caps_word_combo.cpp => tests/caps_word/caps_word_combo/test_caps_word_combo.cpp +0 -23
@@ 38,29 38,6 @@ using ::testing::AnyOf;
using ::testing::InSequence;
using ::testing::TestParamInfo;

extern "C" {
// Define some combos to use for the test, including overlapping combos and
// combos that chord tap-hold keys.
enum combo_events { AB_COMBO, BC_COMBO, AD_COMBO, DE_COMBO, FGHI_COMBO, COMBO_LENGTH };
uint16_t COMBO_LEN = COMBO_LENGTH;

const uint16_t ab_combo[] PROGMEM   = {KC_A, KC_B, COMBO_END};
const uint16_t bc_combo[] PROGMEM   = {KC_B, KC_C, COMBO_END};
const uint16_t ad_combo[] PROGMEM   = {KC_A, LCTL_T(KC_D), COMBO_END};
const uint16_t de_combo[] PROGMEM   = {LCTL_T(KC_D), LT(1, KC_E), COMBO_END};
const uint16_t fghi_combo[] PROGMEM = {KC_F, KC_G, KC_H, KC_I, COMBO_END};

// clang-format off
combo_t key_combos[] = {
    [AB_COMBO] = COMBO(ab_combo, KC_SPC),  // KC_A + KC_B = KC_SPC
    [BC_COMBO] = COMBO(bc_combo, KC_X),    // KC_B + KC_C = KC_X
    [AD_COMBO] = COMBO(ad_combo, KC_Y),    // KC_A + LCTL_T(KC_D) = KC_Y
    [DE_COMBO] = COMBO(de_combo, KC_Z),    // LCTL_T(KC_D) + LT(1, KC_E) = KC_Z
    [FGHI_COMBO] = COMBO(fghi_combo, KC_W) // KC_F + KC_G + KC_H + KC_I = KC_W
};
// clang-format on
} // extern "C"

namespace {

// To test combos thorougly, we test them with pressing the chord keys with

A tests/caps_word/caps_word_combo/test_combos.c => tests/caps_word/caps_word_combo/test_combos.c +20 -0
@@ 0,0 1,20 @@
#include <quantum.h>

// Define some combos to use for the test, including overlapping combos and
// combos that chord tap-hold keys.
enum combo_events { AB_COMBO, BC_COMBO, AD_COMBO, DE_COMBO, FGHI_COMBO };

const uint16_t ab_combo[] PROGMEM   = {KC_A, KC_B, COMBO_END};
const uint16_t bc_combo[] PROGMEM   = {KC_B, KC_C, COMBO_END};
const uint16_t ad_combo[] PROGMEM   = {KC_A, LCTL_T(KC_D), COMBO_END};
const uint16_t de_combo[] PROGMEM   = {LCTL_T(KC_D), LT(1, KC_E), COMBO_END};
const uint16_t fghi_combo[] PROGMEM = {KC_F, KC_G, KC_H, KC_I, COMBO_END};

// clang-format off
combo_t key_combos[] = {
    [AB_COMBO] = COMBO(ab_combo, KC_SPC),  // KC_A + KC_B = KC_SPC
    [BC_COMBO] = COMBO(bc_combo, KC_X),    // KC_B + KC_C = KC_X
    [AD_COMBO] = COMBO(ad_combo, KC_Y),    // KC_A + LCTL_T(KC_D) = KC_Y
    [DE_COMBO] = COMBO(de_combo, KC_Z),    // LCTL_T(KC_D) + LT(1, KC_E) = KC_Z
    [FGHI_COMBO] = COMBO(fghi_combo, KC_W) // KC_F + KC_G + KC_H + KC_I = KC_W
};

M tests/combo/test.mk => tests/combo/test.mk +2 -0
@@ 2,3 2,5 @@
# SPDX-License-Identifier: GPL-2.0-or-later

COMBO_ENABLE = yes

INTROSPECTION_KEYMAP_C = test_combos.c

M tests/combo/test_combo.cpp => tests/combo/test_combo.cpp +0 -15
@@ 10,21 10,6 @@
#include "test_fixture.hpp"
#include "test_keymap_key.hpp"

extern "C" {
enum combos { modtest, osmshift, COMBO_LENGTH };
uint16_t COMBO_LEN = COMBO_LENGTH;

uint16_t const modtest_combo[]  = {KC_Y, KC_U, COMBO_END};
uint16_t const osmshift_combo[] = {KC_Z, KC_X, COMBO_END};

// clang-format off
combo_t key_combos[] = {
    [modtest]  = COMBO(modtest_combo, RSFT_T(KC_SPACE)),
    [osmshift] = COMBO(osmshift_combo, OSM(MOD_LSFT))
};
// clang-format on
}

using testing::_;
using testing::InSequence;


A tests/combo/test_combos.c => tests/combo/test_combos.c +17 -0
@@ 0,0 1,17 @@
// Copyright 2023 Stefan Kerkmann (@KarlK90)
// Copyright 2023 @filterpaper
// Copyright 2023 Nick Brassel (@tzarc)
// SPDX-License-Identifier: GPL-2.0-or-later
#include "quantum.h"

enum combos { modtest, osmshift };

uint16_t const modtest_combo[]  = {KC_Y, KC_U, COMBO_END};
uint16_t const osmshift_combo[] = {KC_Z, KC_X, COMBO_END};

// clang-format off
combo_t key_combos[] = {
    [modtest]  = COMBO(modtest_combo, RSFT_T(KC_SPACE)),
    [osmshift] = COMBO(osmshift_combo, OSM(MOD_LSFT))
};
// clang-format on

M tests/test_common/keycode_util.hpp => tests/test_common/keycode_util.hpp +1 -0
@@ 1,5 1,6 @@
#pragma once

#include <cstdint>
#include <string>

std::string get_keycode_identifier_or_default(uint16_t keycode);

M users/art/funcs/string_funcs.c => users/art/funcs/string_funcs.c +23 -25
@@ 37,10 37,8 @@ enum combo_events {
  ED_ENTER,

  ED_CS_ENTER,
  BSPC_LSFT_CLEAR,
  COMBO_LENGTH
  BSPC_LSFT_CLEAR
};
uint16_t COMBO_LEN = COMBO_LENGTH; // do not remove - needed for combos to work

const uint16_t PROGMEM combo_up[] = {KC_W, KC_R, COMBO_END};
const uint16_t PROGMEM combo_left[] = {KC_S, KC_E, COMBO_END};


@@ 122,7 120,7 @@ void process_combo_event(uint16_t combo_index, bool pressed) {
            tap_code16(A(KC_RIGHT));
          }
        }
        break; 
        break;
      case BSPC_LSFT_CLEAR:
        if (pressed) {
          tap_code16(KC_END);


@@ 134,7 132,7 @@ void process_combo_event(uint16_t combo_index, bool pressed) {
        if (pressed) {
          tap_code16(C(S(KC_ENTER)));
        }
        break;        
        break;
    }
}



@@ 210,63 208,63 @@ void send_string_with_translation(char *string) {

        case 'w':
          toPrint = 'd';
          break; 
          break;
        case 'e':
          toPrint = 'r';
          break; 
          break;
        case 'r':
          toPrint = 'w';
          break; 
          break;
        case 't':
          toPrint = 'b';
          break; 
          break;
        case 'y':
          toPrint = 'j';
          break; 
          break;
        case 'u':
          toPrint = 'f';
          break; 
          break;
        case 'i':
          toPrint = 'u';
          break; 
          break;
        case 'o':
          toPrint = 'p';
          break; 
          break;
        case 'p':
          toPrint = ';';
          break; 
          break;

        case 'd':
          toPrint = 'h';
          break; 
          break;
        case 'f':
          toPrint = 't';
          break; 
          break;
        case 'h':
          toPrint = 'y';
          break; 
          break;
        case 'j':
          toPrint = 'n';
          break; 
          break;
        case 'k':
          toPrint = 'e';
          break; 
          break;
        case 'l':
          toPrint = 'o';
          break; 
          break;
        case ';':
          toPrint = 'i';
          break; 
          break;

        case 'b':
          toPrint = 'm';
          break; 
          break;
        case 'n':
          toPrint = 'k';
          break; 
          break;
        case 'm':
          toPrint = 'l';
          break; 
          break;
      }
      if (isUpperCase) {
        isUpperCase = 0;


@@ 306,4 304,4 @@ void send_shifted_strings_add(char *string1, char *string2) {
    send_string(string2);
    char_to_bspace = strlen(string1) + strlen(string2);
  }
}
\ No newline at end of file
}

M users/danielo515/combo.c => users/danielo515/combo.c +1 -1
@@ 26,7 26,7 @@ const uint16_t PROGMEM n_m[]                   = {KC_N, KC_M, COMBO_END};
const uint16_t PROGMEM o_p_combo[]             = {KC_O, KC_P, COMBO_END};
const uint16_t PROGMEM m_cm_dot_combo[]        = {KC_M, KC_COMMA, KC_DOT, COMBO_END};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
    [JK_ESC]   = COMBO(jk_combo, KC_ESC),
    [YU_COM]   = COMBO(yu_combo, KC_AMPR),
    [UI_COM]   = COMBO(ui_combo, KC_CIRC),

M users/danielo515/config.h => users/danielo515/config.h +0 -1
@@ 1,7 1,6 @@
#pragma once

#if defined(COMBO_ENABLE)
#    define COMBO_COUNT 11
#    define COMBO_TERM 25
#endif  // !COMBO_ENABLE
// Timeout settings for leader key

M users/ericgebhart/extensions/keymap_combo.h => users/ericgebhart/extensions/keymap_combo.h +0 -3
@@ 52,10 52,7 @@ void process_combo_event(uint16_t combo_index, bool pressed);
#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

M users/ibnuda/combo.h => users/ibnuda/combo.h +2 -2
@@ 64,7 64,7 @@ const uint16_t PROGMEM rl_i_ii_combo[]     = {RLI, RLII, 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.
    [R_U_PINKY_RING]          = COMBO(lu_p_r_combo,  KC_TAB),
    [R_U_RING_MIDDLE]         = COMBO(lu_r_m_combo,  KC_QUES),


@@ 93,4 93,4 @@ combo_t key_combos[COMBO_COUNT] = {

    // both hand combinations.
    [B_L_MIDDLE_MIDDLE]       = COMBO(bl_m_m_combo,  KC_ENT),
};
\ No newline at end of file
};

M users/ibnuda/config.h => users/ibnuda/config.h +1 -2
@@ 1,6 1,5 @@
#pragma once

#define COMBO_TERM  50
#define COMBO_COUNT 50

#define PERMISSIVE_HOLD
\ No newline at end of file
#define PERMISSIVE_HOLD

M users/issmirnov/config.h => users/issmirnov/config.h +0 -1
@@ 21,7 21,6 @@
#define ONESHOT_TIMEOUT 2000

// Enable combos for vim
#define COMBO_COUNT 5 // Specify the number of combos used. BE SURE TO INCREMENT AS NEEDED
#define COMBO_TERM 50 // window in milliseconds to trigger combo

// Allow more than 4 keys to be sent to the system. Useful for gaming.

M users/issmirnov/issmirnov.c => users/issmirnov/issmirnov.c +1 -3
@@ 15,9 15,7 @@ const uint16_t PROGMEM sd_combo[] = {KC_S, KC_D, COMBO_END};
const uint16_t PROGMEM copy_combo[] = {KC_X, KC_C, COMBO_END};
const uint16_t PROGMEM paste_combo[] = {KC_X, KC_V, COMBO_END};


// BE SURE TO UPDATE THE CONFIG.H "COMBO_COUNT" value when you add elements here!
combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  COMBO(jk_combo, KC_ESC),
  COMBO(df_combo, KC_COLON),
  COMBO(sd_combo, KC_SLASH),

M users/kuchosauronad0/combo.h => users/kuchosauronad0/combo.h +2 -3
@@ 1,4 1,4 @@
#pragma once 
#pragma once
#include "quantum.h"
enum combo_events {
  ZV_COPY,


@@ 12,10 12,9 @@ const uint16_t PROGMEM cut_combo[] = {KC_X, KC_V, COMBO_END};
const uint16_t PROGMEM paste_combo[] = {KC_C, KC_V, COMBO_END};
const uint16_t PROGMEM sleep_combo[] = {KC_Q, KC_P, COMBO_END};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [ZV_COPY] = COMBO_ACTION(copy_combo),
  [XV_CUT] = COMBO_ACTION(cut_combo),
  [CV_PASTE] = COMBO_ACTION(paste_combo),
  [QP_SLEEP] = COMBO_ACTION(sleep_combo),
};


M users/kuchosauronad0/config.h => users/kuchosauronad0/config.h +0 -1
@@ 56,7 56,6 @@
#endif // !LEADER_ENABLE

#if defined(COMBO_ENABLE)
#  define COMBO_COUNT 4
#  define COMBO_TERM 150
#endif // !COMBO_ENABLE


M users/manna-harbour_miryoku/config.h => users/manna-harbour_miryoku/config.h +0 -1
@@ 34,7 34,6 @@

// Thumb Combos
#if defined (MIRYOKU_KLUDGE_THUMBCOMBOS)
  #define COMBO_COUNT 8
  #define COMBO_TERM 200
  #define EXTRA_SHORT_COMBOS
#endif

M users/manna-harbour_miryoku/manna-harbour_miryoku.c => users/manna-harbour_miryoku/manna-harbour_miryoku.c +1 -1
@@ 74,7 74,7 @@ const uint16_t PROGMEM thumbcombos_sym[] = {KC_UNDS, KC_LPRN, COMBO_END};
const uint16_t PROGMEM thumbcombos_sym[] = {KC_RPRN, KC_UNDS, COMBO_END};
  #endif
const uint16_t PROGMEM thumbcombos_fun[] = {KC_SPC, KC_TAB, COMBO_END};
combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  COMBO(thumbcombos_base_right, LT(U_FUN, KC_DEL)),
  COMBO(thumbcombos_base_left, LT(U_MEDIA, KC_ESC)),
  COMBO(thumbcombos_nav, KC_DEL),

M users/muppetjones/config.h => users/muppetjones/config.h +0 -2
@@ 35,6 35,4 @@

#endif


#define COMBO_COUNT 3
#define COMBO_TERM 40

M users/muppetjones/features/combos.c => users/muppetjones/features/combos.c +1 -2
@@ 27,8 27,7 @@ const uint16_t PROGMEM h_comm_tab[] = {KC_H, KC_COMM, COMBO_END};
const uint16_t PROGMEM l_u_scln[]   = {KC_L, KC_U, COMBO_END};
const uint16_t PROGMEM j_m_caps[]   = {KC_J, KC_M, COMBO_END};

// COMBO_COUNT defined in config.h
combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
    [H_COMM_TAB] = COMBO(h_comm_tab, KC_TAB),
    [L_U_SCLN]   = COMBO(l_u_scln, KC_SCLN),
    [J_M_CAPS]   = COMBO(j_m_caps, KC_CAPS),

M users/narze/superduper.c => users/narze/superduper.c +1 -1
@@ 24,7 24,7 @@ const uint16_t PROGMEM superduper_combos[SUPERDUPER_COMBO_COUNT][3] = {
    [_QWOC] = {CM_S, CM_D, COMBO_END},
};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
    [CB_SUPERDUPER] = COMBO_ACTION(superduper_combos[_QWERTY]),
};


M users/ninjonas/combos.c => users/ninjonas/combos.c +2 -2
@@ 15,7 15,7 @@ const uint16_t PROGMEM tab_combo[] = {KC_Q, KC_T, 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};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [EQ_QUIT] = COMBO_ACTION(quit_combo),
  [RW_CLOSE] = COMBO_ACTION(close_combo),
  [QT_TAB] = COMBO_ACTION(tab_combo),


@@ 52,4 52,4 @@ void process_combo_event(uint16_t combo_index, bool pressed) {
      break;
  }
}
#endif
\ No newline at end of file
#endif

M users/ninjonas/config.h => users/ninjonas/config.h +0 -2
@@ 15,8 15,6 @@
#define MOUSEKEY_WHEEL_DELAY 0

#ifdef COMBO_ENABLE
    #undef COMBO_COUNT
    #undef COMBO_TERM
    #define COMBO_COUNT 5
    #define COMBO_TERM 60
#endif

M users/pdl/pdl.c => users/pdl/pdl.c +1 -1
@@ 181,7 181,7 @@ const uint16_t PROGMEM xcombo_redo[]   = {KC_B, KC_H, COMBO_END};
const uint16_t PROGMEM xcombo_pgup[]   = {KC_G, KC_B, COMBO_END};
const uint16_t PROGMEM xcombo_pgdn[]   = {KC_G, KC_K, COMBO_END};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
    [VCOMBO_PU] = COMBO(vcombo_pu, KC_CIRC),
    [VCOMBO_NU] = COMBO(vcombo_nu, KC_LBRC),
    [VCOMBO_EU] = COMBO(vcombo_eu, LSFT(KC_9)),

M users/talljoe/config.h => users/talljoe/config.h +0 -1
@@ 19,5 19,4 @@

#define RESET_LAYER 15

#define COMBO_COUNT 2
#define COMBO_TERM 250

M users/uqs/uqs.c => users/uqs/uqs.c +0 -2
@@ 125,8 125,6 @@ const uint16_t PROGMEM my_combos[][4] = {
    {KC_BTN1, KC_BTN2, KC_BTN3, COMBO_END},
};

const uint16_t COMBO_LEN = ARRAY_SIZE(my_action_combos) + ARRAY_SIZE(my_combos);

#define MY_ACTION_COMBO(ck) \
    [ck] = { .keys = &(my_action_combos[ck][0]) }
#define MY_COMBO(ck) \

M users/yet-another-developer/combo.h => users/yet-another-developer/combo.h +2 -3
@@ 1,4 1,4 @@
#pragma once 
#pragma once
#include "quantum.h"
enum combo_events {
  ZV_COPY,


@@ 12,10 12,9 @@ const uint16_t PROGMEM cut_combo[] = {KC_X, KC_V, COMBO_END};
const uint16_t PROGMEM paste_combo[] = {KC_C, KC_V, COMBO_END};
const uint16_t PROGMEM sleep_combo[] = {KC_Q, KC_P, COMBO_END};

combo_t key_combos[COMBO_COUNT] = {
combo_t key_combos[] = {
  [ZV_COPY] = COMBO_ACTION(copy_combo),
  [XV_CUT] = COMBO_ACTION(cut_combo),
  [CV_PASTE] = COMBO_ACTION(paste_combo),
  [QP_SLEEP] = COMBO_ACTION(sleep_combo),
};


M users/yet-another-developer/config.h => users/yet-another-developer/config.h +0 -1
@@ 17,7 17,6 @@
#endif // !LEADER_ENABLE

#if defined(COMBO_ENABLE)
  #define COMBO_COUNT 4
  #define COMBO_TERM 150
#endif // !COMBO_ENABLE


M users/zigotica/combos.c => users/zigotica/combos.c +1 -4
@@ 15,10 15,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.

enum combos {
  EM_EMAIL,
  CL_CAPSL,
  COMBO_LENGTH
  CL_CAPSL
};
uint16_t COMBO_LEN = COMBO_LENGTH;

const uint16_t PROGMEM email_combo[] = {LT(_SYM, KC_E), KC_M, COMBO_END};
const uint16_t PROGMEM caps_combo[] = {KC_C, KC_L, COMBO_END};


@@ 37,4 35,3 @@ void process_combo_event(uint16_t combo_index, bool pressed) {
      break;
  }
}


Do not follow this link