Об этом проекте
Данный репозиторий решает специфическую проблему совместимости метода ввода: при использовании Sogou Pinyin в рамках фреймворка fcitx 4 на Linux интегрированный терминал VS Code теряет отправку одиночных символов. Например, после ввода `ni` и нажатия пробела терминал получает буквальный пробел вместо `你`; это проявляется как в приглашении bash, так и в TUI-приложениях, таких как Claude Code. Отправка нескольких символов (например, `nihao` + пробел даёт `你好`) работает нормально.
Репозиторий содержит Python-скрипт-патч `fix-vscode-xterm-ime.py`, который модифицирует метод `_keyDown` встроенного xterm.js в VS Code, вставляя оператор сквозной передачи перед вызовом `preventDefault()`, чтобы одиночные нажатия клавиш передавались в PTY через событие `keypress`. Скрипт поддерживает пробный запуск (`--check`), откат (`--revert`) и указание пользовательского пути установки (`--asar`), а перед изменением выполняет проверку синтаксиса для обеспечения безопасности.
Кроме того, предоставляются два диагностических инструмента: `tools/ime-probe.js` записывает DOM-события на скрытой textarea xterm.js через Chrome DevTools Protocol для подтверждения проблемы; `tools/pty-tee.py` записывает байты, получаемые программой из stdin, для проверки потери символов.
В README подробно описан анализ первопричины: fcitx4 и Sogou самостоятельно отрисовывают окно предварительного редактирования, страница не получает события composition, и CompositionHelper в xterm.js не активируется; при отправке одиночного символа 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.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.