Sublime Text 对中文输入法的支持不是很好,以 Windows 10 中使用最新的 Sublime Text 3 为例,Win10 的拼音输入法可以输入中文,唯一的问题就是无法跟随光标。
常见bug为:在st3激活窗口开始用中文拼音输入法敲入拼音,但是拼音选框却悬浮在屏幕左上角位置,显然这不是正确的输入方式。在查阅了大量资料后,下面极哥就来说一下怎么改进:
网上对这个问题的解决方案是安装 IMESupport 插件,但是在 windows 10 中测试了一下,不解决问题。搜来搜去也没有找到更好的解决方案,所以决定自己修改 IMESupport 的代码。
大致看了一下代码,发现 IMESupport 的核心就是利用钩子机制,在光标移动的时候刷新一下输入法弹出层的位置。由于自己对 Windows 编程也不是很熟悉,所以只好对比 Vim 对 IME 的处理,来看看是不是有可修改的地方。
参考 Windows API 文档和 Vim,IMESupport 的代码,发现核心函数就是 ImmSetCompositionWindow,其他的代码大致处理流程都差不多,看来 IMESupport 对输入法的处理思路是对的,可是为什么不行呢?
偶然间发现 vim 对与消息 WM_IME_NOTIFY 进行了处理,而 IMESupport 没有,所以测试了一下问题是不是出在这。结果,很幸运,被我猜中了,加了一行代码,解决问题。
staticLRESULTCALLBACKWindowMessageHookProc(HWNDhWnd,UINTmsg,...){// ...switch(msg){caseWM_IME_STARTCOMPOSITION:caseWM_IME_COMPOSITION:caseWM_IME_NOTIFY:// here is the code// ...}// ...}
我对 IMESupport 的 fork 版本在 :
https://github.com/zcodes/IMESupport
主要修改内容:
在 Windows 10 中可用了。
使用 Visual Studio 2015 Community 重新编译了 dll 文件。
Notice: 这个修改可用,不错在我使用的过程还是发现了问题,就是对光标的跟随位置获取不是很准,位置可能有所偏差。
最后的测试效果:
参考资料:
https://blog.csdn.net/qq_24345801/article/details/79077902
http://zcodes.net/2017/02/12/sublime_text_3_imesupport.html
https://www.zhihu.com/question/47100192/answer/187551084
网友评论