From 24625ee2adccce62c7ff15bc87141a5200d6f7f1 Mon Sep 17 00:00:00 2001 From: Khanh Le Date: Thu, 18 Jun 2026 10:06:23 -0500 Subject: [PATCH] Handle ASCII in send_unicode_string with keycodes --- quantum/unicode/unicode.c | 4 +++- tests/unicode/test_unicode.cpp | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/quantum/unicode/unicode.c b/quantum/unicode/unicode.c index b84c130907ec..9ab62063ee8b 100644 --- a/quantum/unicode/unicode.c +++ b/quantum/unicode/unicode.c @@ -378,7 +378,9 @@ void send_unicode_string(const char *str) { int32_t code_point = 0; str = decode_utf8(str, &code_point); - if (code_point >= 0) { + if (code_point > 0 && code_point < 0x80 && pgm_read_byte(&ascii_to_keycode_lut[code_point]) != XXXXXXX) { + send_char(code_point); + } else if (code_point >= 0) { register_unicode(code_point); } } diff --git a/tests/unicode/test_unicode.cpp b/tests/unicode/test_unicode.cpp index a8500e3ba1dc..c3f67bd027cf 100644 --- a/tests/unicode/test_unicode.cpp +++ b/tests/unicode/test_unicode.cpp @@ -84,3 +84,27 @@ TEST_F(Unicode, sends_unicode_string) { VERIFY_AND_CLEAR(driver); } + +TEST_F(Unicode, sends_unicode_string_ascii_with_keycodes) { + TestDriver driver; + + set_unicode_input_mode(UNICODE_MODE_LINUX); + + { + testing::InSequence s; + + EXPECT_REPORT(driver, (KC_A)); + EXPECT_EMPTY_REPORT(driver); + EXPECT_REPORT(driver, (KC_LEFT_SHIFT)); + EXPECT_REPORT(driver, (KC_A, KC_LEFT_SHIFT)); + EXPECT_REPORT(driver, (KC_LEFT_SHIFT)); + EXPECT_EMPTY_REPORT(driver); + EXPECT_REPORT(driver, (KC_LEFT_SHIFT)); + EXPECT_REPORT(driver, (KC_1, KC_LEFT_SHIFT)); + EXPECT_REPORT(driver, (KC_LEFT_SHIFT)); + EXPECT_EMPTY_REPORT(driver); + } + send_unicode_string("aA!"); + + VERIFY_AND_CLEAR(driver); +}