Sublime Text 對中文輸入法的支持不是很好珍策,以 Windows 10 中使用最新的 Sublime Text 3 為例,Win10?的拼音輸入法可以輸入中文格带,唯一的問題就是無法跟隨光標。
常見bug為:在st3激活窗口開始用中文拼音輸入法敲入拼音,但是拼音選框卻懸浮在屏幕左上角位置升酣,顯然這不是正確的輸入方式。在查閱了大量資料后态罪,下面極哥就來說一下怎么改進:
網上對這個問題的解決方案是安裝 IMESupport 插件噩茄,但是在 windows 10 中測試了一下,不解決問題复颈。搜來搜去也沒有找到更好的解決方案绩聘,所以決定自己修改 IMESupport 的代碼。
大致看了一下代碼耗啦,發(fā)現 IMESupport 的核心就是利用鉤子機制凿菩,在光標移動的時候刷新一下輸入法彈出層的位置。由于自己對 Windows 編程也不是很熟悉帜讲,所以只好對比 Vim 對 IME 的處理衅谷,來看看是不是有可修改的地方。
參考 Windows API 文檔和 Vim似将,IMESupport 的代碼获黔,發(fā)現核心函數就是?ImmSetCompositionWindow,其他的代碼大致處理流程都差不多在验,看來 IMESupport 對輸入法的處理思路是對的玷氏,可是為什么不行呢?
偶然間發(fā)現 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: 這個修改可用召庞,不錯在我使用的過程還是發(fā)現了問題岛心,就是對光標的跟隨位置獲取不是很準,位置可能有所偏差篮灼。
最后的測試效果:
參考資料:
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