Keyameleon 和 Keychange 解决的是同一个问题。macOS 对所有键盘只使用一个输入法,所以从美版 MacBook 键盘换到德语外接键盘时,就得手动切换布局。两者都是免费开源的菜单栏应用,会在你开始用另一个键盘打字时替你切换。它们的区别在于支持哪些 Mac、如何处理你按下的第一个键,以及需要多大程度地访问你的输入。
一览
| Keyameleon | Keychange | |
|---|---|---|
| 切换依据 | 你正在打字的键盘 | 你正在打字的键盘 |
| 价格和许可证 | 免费,MIT | 免费,MIT |
| macOS | 26 或更高版本 | 14 或更高版本 |
| 权限 | 输入监控 | 输入监控;使用“Before key press”时还需要辅助功能 |
| 刚换用的键盘上的第一个键 | 使用之前的输入法 | 使用之前的输入法,除非开启了“Before key press” |
| 对输入的访问 | 只监听:无法延迟、修改或注入按键 | 默认只监听;“Before key press”会拦截每一次按键 |
| 设置 | 引导设置窗口,之后使用设置窗口 | 菜单栏弹出面板中,每个键盘一个下拉菜单 |
| 安装 | DMG 或 brew install --cask mastro993/tap/keyameleon | DMG 或 brew install dennistimmermann/tap/keychange |
两者的共同点
- 每个键盘只需指定一次输入法,之后在该键盘上按键时,应用就会选择它,在任何 App 中都是如此。
- 键盘按硬件身份识别,所以拔下再重新连接后,指定依然有效。
- 把自己报告为键盘、但其实不是键盘的设备(例如带快捷键按钮的鼠标)可以隐藏,这样它们永远不会触发切换。
- 两者都需要“输入监控”权限来区分键盘,也都不会记录或发送你输入的内容。
- 两者都可以按需在登录时启动,并通过 Sparkle 更新。Keyameleon 每天最多检查一次,只安装你批准的更新;Keychange 会提示安装新的 GitHub 发行版。
你按下的第一个键
一个监视你在用哪个键盘的应用,只有在 macOS 收到按键之后才能得知这次按键。等它完成切换时,这个按键通常已经在发往前台 App 的路上,用的是旧布局。两款应用都从这一点出发,但在如何应对上分道扬镳。
Keychange 有一个 Before key press 模式。它会拦截每个 App 中的每一次按键(密码栏除外),切换布局,再用新布局重新转换字符;对于某些输入方式,则会短暂扣住按键。这样第一个字符就是对的。它需要“辅助功能”权限,并且让 Keychange 处在你的键盘和每个 App 之间。
Keyameleon 从不介入这条路径。它通过 Apple 的 CoreHID 框架以只监听模式观察键盘,这种模式无法延迟、修改或注入输入;它也只通过 macOS 文字输入系统来更改布局。代价就是它常见问题里说的那一点:触发切换的那个按键,以及 macOS 完成切换前输入的其他按键,仍可能使用之前的输入法。
如果你经常在一个词打到一半时换键盘,Keychange 的这个模式就是真正的区别。如果你更希望没有任何应用能改动你的按键,Keyameleon 正是围绕这条原则打造的。
当别的东西更改了输入法
你可能会从菜单栏选择另一个输入法,也可能有其他 App 更改了它。Keychange 让你选择接下来怎么做:关闭自身;暂停,直到输入法再次与键盘相符;保留你的选择,直到你换键盘;或者保留到你下一次按键。
Keyameleon 只有一种行为,没有相关设置。它会记下这次更改,在菜单中显示不匹配,但不与之对抗。你下一次在已指定输入法的键盘上按键时,它会再次选择该键盘的输入法。
只有 Keyameleon 有的功能
- 引导设置。一个窗口带你完成“输入监控”授权,为每个键盘指定布局,并在应用转到菜单栏之前确认一切就绪。
- 切换校验。向 macOS 请求切换输入法后,Keyameleon 会读回当前输入法进行确认。如果切换没有成功,菜单会显示警告,并提供“Retry Now”(立即重试)。
- 不悄悄替换。如果某个已指定的输入法从 macOS 中删除,这项指定会保留,不会用其他输入法顶替,菜单也会一直提示,直到它恢复。
- 自定义键盘名称,以及一个列出所有已指定键盘及其布局国家/地区代码的菜单。
- 可以在菜单中用 ⌘ P 暂停和恢复。
只有 Keychange 有的功能
- 支持 macOS 14 Sonoma 和 15 Sequoia。Keyameleon 需要 macOS 26。
- Before key press 模式,见上文。
- 菜单栏标记,一眼就能看到当前输入法。
- 针对其他来源更改输入法的四种策略。
- 按住 Option 点按可显示厂商 ID 和产品 ID,用于区分名称相似的键盘。
该用哪一个?
- 你的 Mac 运行的是 macOS 14 或 15:Keychange。Keyameleon 无法在这些版本上运行。
- 第一个字符必须永远正确:开启 Before key press 的 Keychange,前提是你愿意授予“辅助功能”权限,并让它拦截每一次按键。
- 你想要一个只能观察、绝不触碰你输入的应用,还要有引导设置,出问题时有清晰的警告:Keyameleon。
两者都免费,都试一试也没有任何成本。不过请一次只运行一个:它们改的是同一项系统设置。
刚接触这个问题?先从 如何为外接键盘使用不同的键盘布局 开始。Keychange 称其灵感来自 autokbisw,那篇对比介绍了这个命令行方案。