article_image

输入法问题总是像微分方程一样难解,你可能要面对无数变量,同时要处理变量间的复杂关系。从输入法本身、macOS 的权限机制、macOS 的键盘设置、当前软件的语言设置到有无其他软件介入从而诱发冲突,仅仅是定位问题这一环,也难如侦探游戏。

对于中文用户来说,还有一种堪称中文圈地方性疾病的输入法问题:在绝大多数软件中,如果需要输入密码,那么无论是手动输入还是自动填充,在此之后,当前的输入法都会变成系统自带的英文键盘,需要手动切换回来。

这个貌似开发人员晚上喝醉酒留下的白痴问题,背后实则有超过10年的复杂历史,可以料想,短期内也不会有什么好办法。本文同样无力根除问题,但将尝试滤清问题,并提出缓解方案。

问题分析

之所以重视输入法问题,不仅因为它就像蚊子叮咬一样总让人难受,更因为这是一个只在中文环境下——或许其他非英语国家也有——才有的问题,考察这样一种非英语地区的地方性疾病,不仅可以重新思考问题,也利于我们认识自己所处的讨论环境。

围绕密码输入前后的种种现象展开搜索,不难发现,总体上存在两类问题,一种是自动化工具受到影响,在一段时间内或部分软件中无法正常使用——此时,那帖万能的重启药方总是出现在评论区。另一类问题则是本文所关注的输入法变化问题,理所当然当然,你几乎找不到关于这一资源的英文资源。

唯有意识到上述两类信息的存在,方有可能拓宽思考范围,不仅仅把问题定位在输入法本身,而是综合考虑从输入密码到输入法被强制修改之间的各个环节。当然,我们几乎找不到这样讨论,目之所及,要么就是重启,要么就是在系统键盘设置里乱点鸳鸯谱,就好像家里的空气开关跳闸后,也不管上面的标语是什么,反正全部上上下下拨一遍,总有一次能成功。

重启固然无奈,乱碰运气的前提也是你所尝试的方法至少覆盖了可能范围,但苟从一开始就走错了方向,那么尝试一万次也没有用。输入法变化问题实际上和输入法本身没有任何关系,如果我们稍微站得远一点,考察密码输入的完整流程,就会发现,其实输入法变化只是**安全输入(Security Input)**带来的副作用之一。详言之,当你尝试输入或者填充密码时,系统就会打开安全输入模式,这也是欧美地区 Power User 经常抱怨的——不少自动化工具在这段时间内无法使用,比如 Keyboard MaestroTextExpander1Passeword

Alt text
输入法状态示意图

仅对于非英语地区的用户来说,输入法变化问题才有可能被人发现——毕竟,如果一个人本来就在用英文键盘,他怎么可能发现输入法有何变化呢?

解法评析

既然安全输入方是病因,那为何坊间流传的许多偏方仍然以系统键盘设置为药?实际上,这些设置并不根治问题,只是貌似有用。以最有名的文稿设置为例,开启后即可将安全输入造成的影响局限在当前软件的标签页(如有)中,例如临时要登录淘宝买点零什,虽然在当前页面仍会遭遇问题,但在其他标签页或软件里打字,则依然是中文。

Alt text
部分偏方建议修改输入法设置

——可惜,上述解法毫无意义,除非你登录后在当前页面中连一个汉字都不会输入,否则,你还是需要手动切回中文输入法。真正糟糕的是,不同标签页或软件中的输入法竟不一样,会造成进一步混乱:设想打开了好几十个标签页,在绝大多数情况下都可以正常打字,但其中有几个页面无论如何都输不了中文,绝大多数人的第一反应肯定认为电脑坏了,而很难想起来自己曾开启过某个冷门设置(最后还是重启)。

虽能定位问题,但并不意味着能够妥善解决。不过我还是尝试提出未来可能的方案,如果打通这些环节,则有可能借助自动化工具修正输入法状态——无需多言,最理想的情况自是 Apple 能够重视问题,不过我对此不抱任何希望。

整个输入过程中,不难注意到两个关键节点:第一,系统进入了安全输入模式,随后又很快退出;第二,原本正常的输入法,突然变成了英文输入法。如果两套状态变化能够作为触发机关(trigger)并配合自动化工具,那就有可能自动更正。

很可惜,我暂时没有找到监控上述状态的合理方案,即便是 Keyboard Maestro 也爱莫能助,暂时管不了。不过,我注意到 Keyboard Maestro 会持续监控当前是否处于安全输入状态,并在菜单栏中提示,只不过它并没有把这一状态作为 Trigger 提供给用户,你不能接上自动化操作。好吧,严格来说不是没有,其实你可以用脚本或自带函数检测当前是否处于安全输入模式,但为确保有效,就得在后台持续运行,我不知道这样是否会拖慢电脑速度。

Alt text
Keyboard Maestro 可以监测到安全输入模式

除了安全模式,另一个可能的方向是当前输入法布局,可惜包括 Keyboard Maestro 在内,我没有找到哪个软件在键盘布局变化后能够及时反应。

在搁置了各种可能性之后,我降到一个临时办法:检查当前所输入字符的规律(模式),如果发现输入了一长串的连续英文字符,那么在中文环境下可以合理推测,这是一个中文用户在系统出错1时不慎输入了一长串输入码——其实我也经常手打英文,但不间断且不参杂其他符号的英文确实罕见。

Alt text
Keyboard Maestro 步骤

设置了这套输入字符 Trigger 后,修复方式稍微自然一些:当我发现打出来的文字变成了一堆英文字母后,不需要离开键盘主区域——Geek 们可能很偏爱这个概念——去按边角的快捷键,只需要接着胡乱输入一会儿,输入法就被 Keyboard Maestro 扳回去。Keyboard Maestro 还会删除刚才输入的错误文本,进一步减轻工作量(输入太快的话可能会残留几个字符,手动删一下)。

Alt text
用 Keyboard Maestro 自动更正输入法

这样的自动化动作,毫无优雅可言,当特殊的自动化方案设计暗示了一种新的可能:如果你既不能事先预防,也不能在情况发生变化时马上反应,那么至少在早期破坏发生后,应当立刻修复。换言之,在这种特殊的自动化设计中,系统或软件问题造成的破坏本身成了自动化的触发机关。


  1. 由于中文候选词功能已经太常见,以至于我们以为老外也常用这个功能。事实是,我接触过的所有英文母语者全是一个一个字母手打的。Tim Bary 做了一个统计——尽管是针对移动端的,对本文所讨论的桌面端参考意义有限——过半的人确实是手打(只有两成左右的人使用候选词或预测功能)。

author_avatar

Lawyer, macOS/iOS Automation Amateur