作为一个对工具有绝对掌控欲的强迫症程序员来说,无法得心应手的切换中英文输入法一直让我耿耿于怀。我想实现的是不用看通知栏就能知道当前输入法的状态,一键切换到自己需要的输入法,做到对输入法的绝对掌控。
使用环境:
- macOS Sierra 版本10.12.4
具体问题:
不喜欢自带的简体拼音,使用的是搜狗。搜狗自带英文模式,但有时候会误操作切换到 ABC,而 ABC 和搜狗之间切换的快捷键
ctrl + space
很不方便。不同的程序需要不同的输入法。程序间的切换导致输入法的频繁切换,很多时候都会忘记切换输入法,增多错误输出,降低工作效率。
通知栏的输入法状态并不醒目,而且需要切换眼光焦点到通知栏才能获知当前输入法,打断工作思路。
需求:
初级需求是把
ctrl + space
快捷键改为左shift
。
高级需求是把中英文输入法绑定到不同的按键,好处是你不需要知道当前的输入法是什么,就能一键切换到想要的输入法。初级需求是系统能够记住每个程序的输入法状态,切换到另外一个程序再切换回来的时候,还原输入法。
高级需求是为每个程序设置初始输入法,不管新打开程序也好,还是从其它程序切换回来也好,都能固定输入法为初始值。自带的
自动切换到文稿的输入法
就可以满足初级需求。缺点是只在程序快速切换时有意义,比如从 A 程序切换到微信回复个消息立刻切换回来。但如果切换到 Chrome 浏览网页,20分钟后再切换回 A 程序,输入法状态是否被还原已经没有意义。因为你可能已经忘记了当时的输入法,还是要通过看通知栏才能知道当前输入法是什么,做不到绝对掌控。初级需求是能够用余光便可以得知当前输入法状态。
其实这个问题已经不太重要。因为在需求2得以解决的情况下,基本上可以做到任意时刻都知道当前的输入法状态。在需求1得以解决的情况下,可以一键切换到自己想要的输入法,不需要知道当前的输入法状态。
解决方案
放弃搜狗的英文模式,使用 ABC + 搜狗。使用 InputSourceSelector + Keyboard Maestro 绑定中英文输入法到不同快捷键,使用 Karabiner 将快捷键映射到
左右command
按键上。使用 Keyboard Pilot 为每个程序设置初始输入法。
使用 ShowyEdge 为不同的输入法设置不同的通知栏颜色。
绑定输入法到特定按键
下载 InputSourceSelector 并解压(下载链接)
启动终端,输入
cd ~/Downloads/InputSourceSelector-master
,输入make
,输入InputSourceSelector current
,如果输出当前的输入法则表明 InputSourceSelector 安装成功。
下载 Karabiner-Elements 并安装(下载链接)
修改其配置文件,路径为
~/.config/karabiner/karabiner.json
,配置代码较长,以文本形式上传(下载链接)。将代码粘贴在"rules": [
后即可,该配置总共做了三项工作:将 左Shift 键修改为 F17 键; 将 左command 键修改为 F18 键; 将 右command 键修改为 F19 键
以上修改仅在单独按键时生效,和其他按键组合时无效。比如按
左shift + s
时,仍然输出S
,而单击左shift
时则为F17
。打开
系统偏好设置
—键盘
—快捷键
—输入法
,双击选择上一个输入法
的快捷键ctrl + space
,按左shift
,将其修改为F17
。
下载 Keyboard Maestro 并安装(破解版下载链接) 密码:mfdl
添加
Maestro
,设置如下图:
说明:
直接使用 Karabiner 和 Keyboard Maestro 的切换输入法功能,出现间歇性失灵的问题,表现为输入法切换为中文了,但输出仍为英文。因此采用快捷键的方式切换输入法。
由于系统默认快捷键
ctrl + space
是组合按键,会出现间歇性无法切换的问题。因此修改快捷键为F17
。直接使用 Keyboard Maestro 中的
JavaScript
脚本判断当前输入法速度较慢,大概需要350ms。因此使用 InputSourceSelector 获取当前输入法。
为每个程序设置初始输入法
Keyboard Pilot(破解版下载链接)
根据输入法变换通知栏颜色
ShowyEdge(下载链接)
效果图(英文输入法)
效果图(搜狗输入法)
英文输入法的红色是我桌面背景本身的颜色
搜狗输入法的蓝色设置见下左图,透明度设置见下右图
这个颜色是和桌面背景颜色叠加而成,桌面背景不同,效果会有所差异