LyX 2.4.0 上的中文输入法问题

2024-04-15

聊一聊 LyX 2.4.0 上中文输入框不跟随光标移动的问题, 同时也记录一下向 LyX 开发者报告问题的过程和感想.

背景 #

这是一篇闲聊性质的记录, 如果你对这些废话不感兴趣可以略过.

之前有一段时间没有用 LyX 写东西了. LyX 更适合写文章, 系统地写一些东西, 如果是只需要记录大纲或索引之类的东西, 我都记录在了 Logseq 里. 但现在发现, 有一些笔记如果现在能系统性地梳理好, 那么在写毕业论文的时候就可以省去很多麻烦. 所以我最近也开始用 LyX 记录一些东西.

LyX 2.4 相比于 LyX 2.3 更新了很多实用的功能, 但目前仍未发布正式版. 与是我下载了预发布版的源代码, 自行编译使用. 但在使用过程中, 我发现中文输入法的候选框始终处于窗口的左上角. 虽然这不影响中文的输入, 但它显著地影响了中文输入的体验. 在忍受了一段时间后, 我决定看看 LyX 的源代码, 到底是哪里出了问题.

然后我发现, 他们只对开启了 preedit 的情况做了适配. 小小地说明一下, 输入的拼音 (/五笔) 显示在输入法里的, 就是没有开启 preedit, Windows 上的搜狗输入法默认就是这种. 输入的拼音直接显示在应用程序里的, 就是开启了 preedit, Windows 上的微软输入法, 以及 mac OS 自带输入法默认就是这种.

lyx-13054-screenshot

我当然可以开启 preedit 来绕过这个问题. 然而 preedit 用起来不舒服, 而且考虑到广大的在 Windows 下用 LyX 的用户的使用体验, 我决定向 LyX 开发团队报告这个问题.

问题的报告 #

LyX 的开发并不在 GitHub 上进行, 而是在 self-hosted 的 Trac 服务器上. 然而, 近期有不道德分子滥用 bug tracker, 导致管理员不得不临时禁用新用户注册, 并删除了大量账户. 我之前注册的账户很可能被误杀, 所以我无法用之前的密码登录, 也无法注册新账户. 不过还好 LyX 官方还提供了邮件列表这一途径, 我可以直接向 lyx-devel@lists.lyx.org 发报告.

尽管这是我第一次在邮件列表发信, 但发信本身并不复杂, 只需要按照电邮的格式写就好了. 另外还需要按照提示订阅邮件列表, 以及时收到回复. 邮件列表还算活跃, 但我发信好几天都没有人理我, 这也从侧面反映了真正参与 LyX 社区的 CJK 成员太少了🙃

好在若干天后, 有人提醒我说一位日本开发者 (Koji) 正在修一个输入法的 bug, 但他可能不看邮件列表, 所以让我在 Trac 上发帖. 我把我 Trac 账号的问题说明之后, 很快管理员就帮我重置了密码, 不得不说 LyX 核心管理员的效率还是很高的.

于是我去 LyX Trac 上报告了这个问题. 一开始 Koji 并不理解我说的问题, 原因竟然是日文输入法都开启了 preedit, 他并不理解没开 preedit 的输入法是长什么样子的. 经过几番沟通之后, Koji 搞明白了我说的问题, 也给出了解决方案.

问题的解决? #

不过由于 LyX 在输入法方面设计的缺陷 (至少我认为是这样), 他只能让输入法窗口的位置在每次重绘的时候更新, 这显然超出了必要的频率, 所以他选择通过 QInputMethod->locale() 来获取输入法的语言, 并只在检测到为中文的时候才进行这些更新. 尽管在我的 Linux 系统上这个函数并不能返回正确的结果, 但 Koji 无法在 Ubuntu 上复现, 而且我在 Windows 上 (费了老大劲才编译出来) 的测试结果也正常, 所以就没有进一步深究. 毕竟我可以用 LANG=zh_CN lyx 强行使得 QInputMethod->locale() 返回正确的结果.

这个输入法问题是在 2.4.0 的开发版本中首次引入的, 在 LyX 2.3.x 中没有这个问题. 所以理论上来说, 应该直接在 2.4.0 中修复. 但由于 LyX 的输入法还存在其他问题, Koji 打算一起修复, 考虑到整体的代码量, 以及 LyX 已经发布 2.4.0-rc4 了, 所以就只能放到 2.4.1 中了. 我对这个处理不太满意, 因为 2.4.0 还是会影响很多人的中文输入. 但得尊重开发者的选择, 谁让 LyX 社区说话的中国人那么少呢? 🤷‍♂️

Leave your comments and reactions on GitHub