engine: Korean and Telex let Escape through after committing

A pending Hangul syllable is real text, and Escape is what vi users
press to leave insert mode; eating it and dropping the syllable served
nobody.  fcitx5-hangul commits and passes any key it does not consume,
Escape included; do the same for Korean and Telex.  A Japanese reading
is still cancelled: there Escape is the IME's own key.
This commit is contained in:
2026-08-17 00:53:43 +09:00
parent e8519b4e06
commit 63fc60dc06
3 changed files with 6 additions and 4 deletions

View File

@@ -27,7 +27,9 @@ the application. `Space` on a reading without candidates commits it and
types nothing. `Backspace` and `Esc` on a chosen candidate go back to the
reading. In a temporary Emoji or Hanja search, `Enter` commits the
highlighted result and `Tab`/`Shift-Tab` wrap through the results. Leaving
the field or clicking elsewhere commits what is pending; `Esc` cancels it.
the field or clicking elsewhere commits what is pending. `Esc` cancels a
Japanese reading or a search; in Korean and Vietnamese it commits the
syllable and goes on to the application, so it still leaves insert mode.
Hiragana mode composes a complete reading before offering Kanji candidates.
Katakana mode does not perform Kanji conversion. Emoji and Hanja searches

View File

@@ -704,7 +704,7 @@ transition(u32int ks, u32int mod, Str *com)
flush(com);
return 1;
}
if(ks == Ktab || ks == Kret){
if(ks == Ktab || ks == Kret || (ks == Kesc && !isjp(&im))){
if(!haspre(&im))
return 0;
flush(com);

View File

@@ -66,8 +66,8 @@ vietnamese_state_lifetime(struct ct *t)
im.pre = mkstr("as");
im.raw = mkstr("as");
sclear(&com);
CT_CHECK(t, keystroke(Kesc, 0, &com));
CT_EQ_INT(t, 0, com.n);
CT_CHECK(t, !keystroke(Kesc, 0, &com));
checkstr(t, "Escape commits Telex", "á", &com);
CT_EQ_INT(t, 0, im.pre.n);
CT_EQ_INT(t, 0, im.raw.n);