From e59bdb8d52a9b1d493f5c70d7bcf2c862811e9d3 Mon Sep 17 00:00:00 2001 From: neneee0181 <2022180024@tukorea.ac.kr> Date: Thu, 28 May 2026 22:01:28 +0900 Subject: [PATCH] Fix Korean IME space handling --- frontend/app/view/term/term-model.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/frontend/app/view/term/term-model.ts b/frontend/app/view/term/term-model.ts index a256929e7d..3b7a5dc8b7 100644 --- a/frontend/app/view/term/term-model.ts +++ b/frontend/app/view/term/term-model.ts @@ -697,6 +697,10 @@ export class TermViewModel implements ViewModel { } handleTerminalKeydown(event: KeyboardEvent): boolean { + if (this.shouldDeferImeSpaceToComposition(event)) { + return false; + } + const waveEvent = keyutil.adaptFromReactOrNativeKeyEvent(event); if (waveEvent.type != "keydown") { return true; @@ -779,6 +783,14 @@ export class TermViewModel implements ViewModel { return true; } + shouldDeferImeSpaceToComposition(event: KeyboardEvent): boolean { + // On Windows Korean IME, xterm's keydown path can finalize composition before + // Chromium commits the last syllable, causing space to be sent before it. + return ( + isWindows() && event.isComposing && event.key === " " && !event.ctrlKey && !event.altKey && !event.metaKey + ); + } + setTerminalTheme(themeName: string) { RpcApi.SetMetaCommand(TabRpcClient, { oref: WOS.makeORef("block", this.blockId),