Skip to content

elsejj/im-select-mspy

Repository files navigation

简介

VsCodeVim 支持输入法的自动切换, 它通过一个外部的输入法切换工具来实现, 目前这个工具推荐的是 im-select.

由于从 Windows 10 开始, 系统默认不再安装英文键盘, 而是由输入法来提供英文输入, 而 im-select windows 版需要英文键盘, 所以在 Windows 10 上使用 VsCodeVim 时, 无法通过 im-select 来切换输入法, 也就无法通过 VsCodeVim 来切换输入法.

对于这个问题, 如果继续使用 im-select, 那么就必须安装英文键盘, 但英文键盘安装后, 切换逻辑会变得复杂.

im-select-mspy 是一个针对微软拼音输入法的输入法切换工具, 它可以在不安装英文键盘的情况下, 完成 VsCodeVim 所需要的输入法信息获取和切换.

它的原理是通过 UIAutomation 来获取当前输入法的信息, 然后通过 SendInput 来模拟按键来切换输入法.

尽管本项目是主要为微软拼音输入法设计的, 但是理论上也可以用于其他输入法, 可以尝试通过如下的配置来进行适配.

目前的配置如下

  • -t=任务栏 程序通过该参数来寻找任务栏, 非简体中文系统可以设置为相应语言的名称
  • -i=托盘输入指示器\s+(\w+) 通过该正则表达式来获取当前输入法的状态, 其他输入法可以尝试修改该正则表达式来适配
  • -k=shift 通过该参数来设置切换输入法的快捷键, 其他输入法或使用其他快捷键可以尝试修改该参数来适配,如 -k=ctrl+space
    如果切换输入法需要用到难以输入的特殊按键,可以填写 Virtual Keys 键代码 的16进制表示, 如 -k=ctrl+0x7C 代表 ctrl+F13.

但如果开启了任务栏自动隐藏功能,程序则可能无法获取到托盘输入指示器的按钮。 此时一种解决方式是开启微软拼音的 输入法工具栏 (注意不是Windows 系统的 桌面语言栏),可以参考 Microsoft简体中文 IME 学习如何开启。

在无法从任务栏获取到按钮的情况下,程序会尝试从输入法工具栏获取到输入法状态,有如下的额外配置

  • --toolbar="Windows 输入体验" 通过该参数来寻找输入法工具栏, 非简体中文系统可以设置为相应语言的名称
  • --toolbar-i="中/英文, (\\w+)" 通过该正则表达式在工具栏中获取当前输入法的状态, 其他输入法可以尝试修改该正则表达式来适配

上述 -t, -i, --toolbar, --toolbar-i 可以通过 Accessibility Insights 工具来获取.

使用

使用方法参考 VsCodeVim 的说明.

以下是我的配置

{
    "vim.autoSwitchInputMethod.enable": true,
    "vim.autoSwitchInputMethod.defaultIM": "英语模式",
    "vim.autoSwitchInputMethod.obtainIMCmd": "D:\\workspace\\im-select-mspy\\build\\Release\\im-select-mspy.exe",
    "vim.autoSwitchInputMethod.switchIMCmd": "D:\\workspace\\im-select-mspy\\build\\Release\\im-select-mspy.exe {im}",
}

在命令行中的使用示例

# 查看当前状态
$ im-select-mspy.exe
# 切换为中文模式
$ im-select-mspy.exe -k="ctrl+shift+space" "中文模式"
# 英文操作系统
$ im-select-mspy.exe -t="Taskbar" -i="Tray Input Indicator (.+)" --toolbar="Windows Input Experience" --toolbar-i="Chinese/English \(Shift\), (.+)" "Chinese mode"

编译

md build
cd build
cmake .. 
cmake --build . --config Release

About

a im-select for Microsoft PinYin in win 10+

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •