im-select-imm
什么是im-select
-
im-select你可以理解为一个切换当前输入法的命令行工具:
-
一般切换输入法我们是通过键盘的快捷键。但是有些情况你希望能通过程序来切换输入法。比如说:如果你在vim中如果insert模式回到normal时候,你肯定不希望停留在输入法模式,这个程序就是用来辅助你的。
-
你无需再去理解win32 api对应的调用或找到dll,只需要调用这个小程序即可。目前,抛开vim插件不谈,vscode-vim,obsidian-vim-im-select,都是推荐使用im-select作为切换输入法的命令行工具。
改进版做了什么
-
原版im-select美中不足的是,这个软件无法提供输入法内的中英文切换。这样其实会打断一些流畅性,你需要专门设置一个US键盘。同时,不能保证你切换回中文输入法中仍然为原先的中英文模式。
-
对于实现方法:其实网络上一些ahk脚本已经有中英文切换的方法了,同时im-select的issue中也有提到解决方案,我花了一些时间将这个功能增加到原来的im-select上。同时,网上一些脚本通过模拟你输入按键进行,这需要你配置对应的热键或和作者保持一致,本程序不需要设置热键或快捷键,理论上应该适配所有输入法。
-
这是我第一次接触win32 api的编程,如有不妥请多包涵。
安装
-
可以从github的release中下载
-
PEMessage/im-select-imm: A personal imporve. Now able to switch interal mode for IME (github.com)
-
或者也可以用 scoop 安装管理,json文件在项目中bucket目录中,欢迎将该json文件加入到
其他bucket中。
使用方式
使用方式和原版基本一样:
- 无参数调用时返回当前输入法标识符时候
im-select-imm.exe
out: [当前输入法] [当前输入法模式]
- 当你将想要切换输入法时候, 以类似的方式传参
im-select-imm.exe [目标输入法] [目标输入法的模式]
参考资料
一些疑惑
- 在第二篇文章中 jacen 大佬说返回值要按位判断,但是呢,我在msdn中却发现
- IME Conversion Mode Values | Microsoft Learn
- 检测的位的标志和文档中好像完全对不上,不知道是文档太老了还是怎么样。目前的实现是直接把你传入的参数值直接进行赋值。暂时也不会有什么bug。对于需要检测中英文的状态的话,只需要注意一下英文/中文 全角/半角 四种可能即可。用于应付vscode-vim应该是不会出什么bug。