这个项目能做什么
该仓库解决一个特定输入法兼容性问题:在 Linux 上使用 fcitx 4 框架下的搜狗拼音时,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 与搜狗自行绘制预编辑窗口,页面收不到 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、搜狗拼音 4.2.1.145。注意 VS Code 升级会替换 node_modules.asar,需重新运行脚本;Snap 和 Flatpak 安装因只读无法打补丁。许可证为 MIT。
评论
0 评分人数达到10人后显示
登录后参与讨论。