1
0
Fork 0

Keymap introspection for combos. (#19670)

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

View file

@ -17,3 +17,4 @@ CAPS_WORD_ENABLE = yes
COMBO_ENABLE = yes
AUTO_SHIFT_ENABLE = yes
INTROSPECTION_KEYMAP_C = test_combos.c

View file

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

View file

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

View file

@ -2,3 +2,5 @@
# SPDX-License-Identifier: GPL-2.0-or-later
COMBO_ENABLE = yes
INTROSPECTION_KEYMAP_C = test_combos.c

View file

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

17
tests/combo/test_combos.c Normal file
View file

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

View file

@ -1,5 +1,6 @@
#pragma once
#include <cstdint>
#include <string>
std::string get_keycode_identifier_or_default(uint16_t keycode);