From 125e9349c0d5aa8a7425093b57cb547aff384e83 Mon Sep 17 00:00:00 2001 From: Hojun-Cho Date: Wed, 12 Aug 2026 21:35:33 +0900 Subject: [PATCH] fix: pass empty search backspace through --- strans.c | 6 ++++-- tests/engine_test.c | 36 ++++++++++++++++++++++++++++++++++++ tests/test.h | 1 + tests/unit_test.c | 1 + 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/strans.c b/strans.c index 83bbc54..12c854a 100644 --- a/strans.c +++ b/strans.c @@ -620,8 +620,10 @@ searchkey(u32int ks, u32int mod, Str *com) return 1; } if(ks == Kback){ - if(search.raw.n == 0) - return 1; + if(search.raw.n == 0){ + endsearch(); + return 0; + } spopr(&search.raw); searchquery(); return 1; diff --git a/tests/engine_test.c b/tests/engine_test.c index 656a6f3..ab0ec64 100644 --- a/tests/engine_test.c +++ b/tests/engine_test.c @@ -1305,6 +1305,42 @@ engine_hanja_korean_keys(struct ct *t) searchend(&f); } +void +engine_hanja_backspace(struct ct *t) +{ + Searchfix f; + Str com; + + hanjabegin(&f, LangKO); + sclear(&com); + CT_CHECK(t, keystroke('h', Mctrl, &com)); + if(!typekeys(t, "gks", &com)) + goto cleanup; + checkstr(t, "Hanja before backspace", "한", &search.text); + CT_EQ_INT(t, 2, im.nkouho); + CT_CHECK(t, keystroke(Kback, 0, &com)); + checkstr(t, "Hanja final backspace", "하", &search.text); + CT_EQ_INT(t, 0, im.nkouho); + CT_CHECK(t, keystroke(Kback, 0, &com)); + checkstr(t, "Hanja vowel backspace", "ㅎ", &search.text); + CT_CHECK(t, keystroke(Kback, 0, &com)); + checkstr(t, "empty Hanja search", "", &search.text); + CT_EQ_INT(t, LangHANJA, search.lang); + CT_CHECK(t, !keystroke(Kback, 0, &com)); + CT_EQ_INT(t, 0, search.lang); + + if(!typekeys(t, "gks", &com)) + goto cleanup; + CT_CHECK(t, keystroke('h', Mctrl, &com)); + checkstr(t, "preedit committed before Hanja", "한", &com); + CT_EQ_INT(t, LangHANJA, search.lang); + CT_CHECK(t, !keystroke(Kback, 0, &com)); + CT_EQ_INT(t, 0, search.lang); + CT_EQ_INT(t, LangKO, im.l->lang); +cleanup: + searchend(&f); +} + void engine_hanja_input_languages(struct ct *t) { diff --git a/tests/test.h b/tests/test.h index 59fd14a..978ea62 100644 --- a/tests/test.h +++ b/tests/test.h @@ -57,6 +57,7 @@ void engine_emoji_dictionary_identity(struct ct*); void engine_hanja_search(struct ct*); void engine_hanja_unknown_and_cancel(struct ct*); void engine_hanja_korean_keys(struct ct*); +void engine_hanja_backspace(struct ct*); void engine_hanja_input_languages(struct ct*); void engine_randomized_stress(struct ct*); void engine_full_boundary_passthrough(struct ct*); diff --git a/tests/unit_test.c b/tests/unit_test.c index 4f7c26d..084b294 100644 --- a/tests/unit_test.c +++ b/tests/unit_test.c @@ -111,6 +111,7 @@ static const struct ct_test tests[] = { { "engine/hanja-search", engine_hanja_search }, { "engine/hanja-unknown-cancel", engine_hanja_unknown_and_cancel }, { "engine/hanja-korean-keys", engine_hanja_korean_keys }, + { "engine/hanja-backspace", engine_hanja_backspace }, { "engine/hanja-input-languages", engine_hanja_input_languages }, { "engine/randomized-stress", engine_randomized_stress }, { "engine/full-boundary-passthrough", engine_full_boundary_passthrough },