Skip to content

[Bug]: Mobile terminal Korean IME input is completely invisible after the #7011 deferral model #7183

Description

@realitsyourman

Operating system

Other: Android on Galaxy Fold7 with Samsung Keyboard Korean IME

Orca version

Details

Short summary:
After #7011, Korean cannot be typed into the Orca mobile terminal at all. While composing Hangul, nothing reaches the terminal — no live echo, no committed text — and Space does not send the pending text either. English/ASCII input still works, so the breakage is Korean-only.

What happened:
#7011 fixed the original jamo-splitting bug (#7000) by deferring Hangul IME preedit values instead of sending each onChangeText intermediate. But the deferral has no exit path during normal typing:

  • mobile/src/terminal/terminal-live-text-commit.ts returns { kind: 'defer', delayMs: null } for ANY text containing Hangul — unlike other IME text, which gets a 150 ms settle timer.
  • mobile/src/terminal/use-terminal-live-pending-input-flush.ts never schedules a commit timer when delayMs === null, so pending Hangul is only flushed by Enter, special keys (Tab/arrows/Esc/F-keys), or accessory-bar keys.
  • Space is plain text, not a flush trigger: '한글 ' still contains Hangul, so the whole string re-defers forever. Any ASCII typed after a Hangul character is swallowed with it ('한글abc' defers as a whole, because the check scans the entire field value).
  • The pending text lives in the hidden capture TextInput, which is opacity: 0, width: 1, height: 1 — the user can never see it.

Net effect: typing Korean produces zero feedback anywhere. Before #7011, intermediates were at least visible (as split jamo); now nothing is.

Compounding factors:

  • On Samsung Keyboard, the first Enter during active composition often only commits the composition without firing onSubmitEditing, so even the one primary flush path can appear dead on first press.
  • The pending-clear effect in mobile/src/terminal/use-terminal-live-input-commit.ts wipes pending composition whenever the active session tab type is transiently undefined (the mobile tab list briefly lagging desktop state), silently dropping in-progress Hangul.

How can we reproduce it?

  1. Use Orca mobile on Android with Samsung Keyboard set to Korean input.
  2. Open a terminal session and focus the terminal live input surface.
  3. Type 한글 and keep typing, including a trailing space.
  4. Observe the terminal receives nothing while typing; only Enter (sometimes needing a second press mid-composition) eventually delivers text, executing the line immediately with no chance to preview it.

Expected behavior:
Korean typing should echo to the terminal as you type (without leaking decomposed jamo), Space should commit the composed syllables, and Enter should submit the full text plus a newline.

Fix direction:
Replace the indefinite deferral with a mirror model: stream the stable prefix of the capture field to the PTY immediately (Hangul composition only ever mutates the trailing syllable), hold at most the last Hangul code point with a short settle timer, treat a trailing non-Hangul character (Space/punctuation/ASCII) as the composition-commit signal, and repair premature commits with DEL corrections. PR: #7181.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions