作爲一個對工具有絕對掌控欲的強迫症程序員來說,無法得心應手的切換中英文輸入法一直讓我耿耿於懷。我想實現的是不用看通知欄就能知道當前輸入法的狀態,一鍵切換到自己需要的輸入法,做到對輸入法的絕對掌控。
使用環境:
- 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(下載鏈接)
效果圖(英文輸入法)
效果圖(搜狗輸入法)
英文輸入法的紅色是我桌面背景本身的顏色
搜狗輸入法的藍色設置見下左圖,透明度設置見下右圖
這個顏色是和桌面背景顏色疊加而成,桌面背景不同,效果會有所差異