【自荐】im-select一个改进版本

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的编程,如有不妥请多包涵。

安装

使用方式

使用方式和原版基本一样:

  1. 无参数调用时返回当前输入法标识符时候
im-select-imm.exe
out: [当前输入法] [当前输入法模式]
  1. 当你将想要切换输入法时候, 以类似的方式传参
im-select-imm.exe [目标输入法] [目标输入法的模式] 

参考资料

  1. 拿什么拯救你,巨硬的微软拼音——AHK实现切换自由 - 知乎 (zhihu.com)
  2. 获取输入法状态的正确方法,支持所有输入法 - 讨论分享 - 小众软件官方论坛 (appinn.net)

一些疑惑

  • 在第二篇文章中 jacen 大佬说返回值要按位判断,但是呢,我在msdn中却发现
  • IME Conversion Mode Values | Microsoft Learn
  • 检测的位的标志和文档中好像完全对不上,不知道是文档太老了还是怎么样。目前的实现是直接把你传入的参数值直接进行赋值。暂时也不会有什么bug。对于需要检测中英文的状态的话,只需要注意一下英文/中文 全角/半角 四种可能即可。用于应付vscode-vim应该是不会出什么bug。
3 Likes

我觉得,你应该先介绍一下 im-select,然后再说改进的事情 :thinking:

除了系统自带的输入法,还兼容其他输入法吗(rime,搜狗之类的)?

已经添加了关于im-select的描述

支持的,至少搜狗是肯定支持的。

试了一下好像不支持rime。
另外问一下能否增加在同一语言中的不同输入法之间切换的功能?

微软输入法可以实现切换,但是搜狗输入法(13.7.0.7991)不行,不知道哪个环节出问题了

请问楼主, 在vscode中咋配置呢, 我的配置如下, 但是按完ESC没有恢复成 搜狗的英文输入.

    "vim.autoSwitchInputMethod.enable": true,
    "vim.autoSwitchInputMethod.defaultIM": "2052-0",
    "vim.autoSwitchInputMethod.obtainIMCmd": "C:\\im-select-imm.exe",
    "vim.autoSwitchInputMethod.switchIMCmd": "C:\\im-select-imm.exe {im}"

老哥你弄好了没, 我也是vscode中配置无效

没有.

这个我搜狗拼音可以. GitHub - gamife/im-select-cn: 切换中英文输入状态

1 Like