Repository navigation
Conversation
Contributor
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
ELI5
When Korean input is still being composed, Codex has not received it yet and cannot clear its initial hint. Orca was drawing that hint again after the composing syllable. This keeps the hint covered until the IME commits, so the user sees only the Korean text being composed.
What Changed
Why
The Codex
Ask Codex to do anythingprompt is real dim-styled terminal buffer content, not an HTML placeholder. Korean IME preedit text does not reach the PTY until composition commits, so Codex cannot redraw that prompt when the first syllable appears. Orca's existing mid-line composition fix copied the buffer remainder into the overlay, causing the dim prompt to be visibly appended to the Korean preedit.Using the existing terminal style metadata keeps the fix generic to dim application ghost text and avoids coupling xterm to a Codex-specific string. Ordinary committed row content remains visible and continues to be shifted after the preedit.
Linked Issue
Fixes #17104
Related to #12545.
Visual Proof
Before:
After:
The Electron CDP test measures the active composition overlay against the real xterm grid and asserts that the dim placeholder is covered while the only visible overlay text is
아. A native-keyboard screenshot is not included in this draft.Testing
Validated with:
pnpm test src/renderer/src/components/terminal-pane/terminal-ime-xterm-midline-preedit-tail.test.ts src/renderer/src/components/terminal-pane/terminal-ime-xterm-trailing-preedit-occlusion.test.ts— 14 passedSKIP_BUILD=1 pnpm run test:e2e tests/e2e/terminal-korean-midline-preedit-occlusion.spec.ts— 3 passedpnpm tcpnpm run check:code-quality:changednode config/scripts/regenerate-xterm-patches.mjs --check --work-dir=/tmp/orca-xterm-ime-checkpnpm exec electron-vite build --mode e2eTested through Electron CDP on Linux. Native Korean IME validation on Windows/macOS remains for reviewer confirmation. The change is renderer-side xterm behavior with no platform, filesystem, Git provider, folder-workspace, remote-wire, or SSH execution-path changes.
AI Disclosure
Implemented and reviewed with OpenAI Codex (GPT-5).
Review
Please focus on whether treating an all-dim row remainder as application ghost text is sufficiently narrow, and whether preserving a hidden span's width is the right masking behavior for xterm's opaque preedit overlay.
Agent skill upstream boundary
docs/reference/agent-skill-sharing-upstream-boundary.mdand copies or mechanically translates no upstream skill-installer source, tests, fixtures, registry entries, path tables, comments, or documentation.Notes
The source xterm patch was regenerated through
config/scripts/regenerate-xterm-patches.mjs; the generated bundle patch was not edited by hand.Checklist
N/Awith reasonpnpm lint,pnpm typecheck,pnpm test, andpnpm buildpass (targeted tests, full typecheck, changed-code quality, patch reproduction, and E2E build pass; CI will cover the full suites)