프로젝트 소개

이 저장소는 특정 입력기 호환성 문제를 해결합니다. Linux에서 fcitx 4 프레임워크의 Sogou Pinyin을 사용할 때 VS Code 통합 터미널에서 단일 문자 커밋이 손실됩니다. 예를 들어 `ni`를 입력한 후 스페이스를 누르면 터미널이 `你` 대신 리터럴 스페이스를 받으며, bash 프롬프트와 Claude Code 같은 TUI에서 모두 발생합니다. 다중 문자 커밋(예: `nihao` + 스페이스로 `你好` 얻기)은 정상입니다. 저장소에는 Python 패치 스크립트 `fix-vscode-xterm-ime.py`가 포함되어 있으며, VS Code 내장 xterm.js의 `_keyDown` 메서드를 수정하여 `preventDefault()`를 호출하기 전에 직통 구문을 삽입해 단일 문자 키가 `keypress` 이벤트를 통해 PTY로 전달되도록 합니다. 스크립트는 시험 실행(`--check`), 롤백(`--revert`), 사용자 지정 설치 경로(`--asar`)를 지원하며, 수정 전 구문 검사를 수행하여 안전성을 보장합니다. 또한 두 가지 진단 도구를 제공합니다. `tools/ime-probe.js`는 Chrome DevTools Protocol을 통해 xterm.js 숨겨진 textarea의 DOM 이벤트를 기록하여 문제를 확인하고, `tools/pty-tee.py`는 프로그램이 stdin에서 받은 바이트를 기록하여 문자가 손실되었는지 검증합니다. README에는 근본 원인 분석이 자세히 기록되어 있습니다. fcitx4와 Sogou는 자체적으로 사전 편집 창을 그리며, 페이지가 composition 이벤트를 받지 못해 xterm.js의 CompositionHelper가 활성화되지 않습니다. 단일 문자 커밋 시 Chromium은 원래 키의 keydown과 문자를 담은 keypress를 전달하는데, xterm.js가 keydown을 처리하고 preventDefault()를 호출하여 keypress가 억제됩니다. 테스트 환경은 Ubuntu 22.04(X11), VS Code 1.137.0(.deb 설치), fcitx 4.2.9.8, Sogou Pinyin 4.2.1.145입니다. VS Code 업그레이드 시 node_modules.asar가 교체되므로 스크립트를 다시 실행해야 합니다. Snap 및 Flatpak 설치는 읽기 전용이므로 패치할 수 없습니다. 라이선스는 MIT입니다.