前言
经常在多个应用之间切换,然后手速比较快,就总会遇到类似上面这样的问题:
我输入的是python
, 因为不知道当前的输入法是中文,所以出现了上面的结果,我得按4次删除键来清除错误的输入。
为了解决这个问题,试过很多办法,目前综合了各种方案,终于有了一个比较满意的方案。
这个方案主要解决的问题有:
应用软件切换时提示输入法的状态
手动中英文切换时提示
自动根据运行软件切换输入法
基本有了以上功能,就可以无障碍的在各个应用软件之间输入文字了。为了达到上面的目的需要使用下面几个软件:
Karabiner
Hammerspoon
Squirrel
实现方式
输入法配置
首先输入法使用的是:Squirrel(鼠须管), 系统ABC,鼠须管关闭了英文模式,使用Karabiner
将shift
键映射为:ctrl+space
。
本来鼠须管也有自己的英文输入,但是别的程序无法获取它的中英文状态,所以只使用了它的中文输入。修改shift
映射是因为习惯了用它来切换中英文的状态,因为系统设置里面的输入法切换的快捷键没办法改为shift
鼠须管以及Karabiner
的配置可以参考了这篇) 文章
手动中英文切换时提示
因为切换时用的是快捷键,所以可以用监听键盘按键的方式来进行提示,主要的代码如下:
1 | hs.eventtap.new({hs.eventtap.event.types.keyUp}, function(event) |
应用软件切换时提示输入法的状态
主要是通过hs.application.watcher
来监听应用是否激活,然后根据应用的名字来进行处理。
1 | function updateFocusAppInputMethod(appName, eventType, appObject) |
自动根据运行软件切换输入法
第二步中一起做了
效果展示
完整的代码在github, 参考了这个Karabiner
配置。
问题
- 在iTerm中切换输入法有时候不会触发keyUp的消息,就没有状态提示了,重起后正常