取消Mac键盘大写键的延迟

技术 2024年6月6日 星期四

在使用macOS系统时,对于MacBook的内置键盘以及苹果官方的妙控键盘,大写键(Caps Lock,大小写切换、锁定键,位于ANSI键盘字母A的左侧)有时候会“间歇性失灵”。这里简单描述该问题,并介绍一种虽然不算完美,但可以在很大程度上解决该问题的可行方法。

本文所使用的操作系统版本为macOS Sonoma 14.5,第三方改键软件Karabiner Elements的版本为14.13.0。

1 问题描述与原因

MacBook的内置键盘和妙控键盘,其大写键有一个绿色的指示灯,用来指示当前的大写状态。如果以非常快的速度按下大写键,那么它的指示灯可能并不会改变,输入法的大小写状态也不会切换。而如果以稍稍慢一点的速度按下,它就会正常工作。这在快速打字的过程中十分恼人,明明按下了大写键,但感觉它就像失灵了一般。在几度怀疑自己的手感之后可以发现,这其实不是一个issue,而是一个不尽如人意的feature,一个相当脑残的刻意设计。

对于大陆国行的苹果键盘,大写键上会印着“中/英”字样,代表该键不但具有大小写切换功能,同时也具有中英文切换功能。那么当按下该键的时候,到底是大小写切换,还是中英文切换呢?这取决于按下它的速度。确切地说,是持续按下的保持时长。快速按下,就是中英文切换;稍慢按下,就是大小写切换。苹果特意为该键设置了一个很短的持续延迟,用来区分两种切换。这种延迟本身很短,所以用户很难察觉出长按与短按的区别。可能设计者认为,如果延迟太长,就会影响打字速度。呵呵,现在的脑残设计才严重影响打字速度。

很显然,短按的情况占绝大多数,但对应的却不是大家熟悉的大小写切换,而是中英文切换。如果设计将短按对应到大小写切换,将长按对应到中英文切换,并配以较高延迟做以区分,那么就没问题了。但它的设计并非如此,而是拧巴的。所以,很多人都会怀疑该键必须慢点按才灵,而快速按就会失灵。

而且,中英文切换功能是与macOS系统自带的中文输入法做软件绑定的,而非硬件的。所以,当用户使用的不是默认输入法时,中英文切换功能很有可能是无法实现的。受历史因素影响,大多数人切换中英文用的是上档键(Shift)。用户只会纳闷为什么大写键(Caps Lock)不能切换大小写,甚至跑到Genius Bar去问那些所谓的“天才”,然后被强行解释半天,显得自己多无知似的。

这设计实在是太脑残了,对中文用户太不友好了。自作聪明,弄巧成拙,画蛇添足了,属于是。

另外,对于某些第三方键盘,这种延迟可能并不会存在,具体取决于该键盘是否将自己“伪装”成官方的妙控键盘。据说,苹果没有向任何第三方开放Mac键盘相关的正式授权,也没有MFi那种认证。所以很多第三方键盘通过蓝牙连接到macOS后,系统会将其识别为妙控键盘,并在连接时于屏幕中央显示一个新版或旧版的妙控键盘简约图形,就像妙控键盘刚建立连接时那样。

2 解决方案

想要实现像普通键盘那样,快速按下大写键就能切换大小写,需要同时做两件事情:

  1. 修改在macOS系统设置中的输入法选项;
  2. 安装Karabiner Elements软件。

2.1 系统设置

在macOS的系统设置中,找到【键盘】、【文字输入】、【输入法】并点击【编辑】按钮,如下图所示:

Figure 1

然后可以看到当前已经启用的输入法列表,如下图所示:

Figure 2

仔细观察上图,点选左侧的【所有输入法】后,右侧并没有与大写键相关的任何设置。这种情况是可能的。想要看到相关设置,可以点击【左下角的加号】,添加系统默认的简体中文输入法(某些第三方输入法也可以,如微信键盘),如下图所示:

Figure 3

点击【添加】之后,再看此前【所有输入法】的设置,便会出现“使用大写锁定键切换’ABC‘输入法(按住以启用全大写输入)”的选项,如下图所示:

Figure 4

关闭它。

2.2 Karabiner Elements

仅做上述设置是不够的,这只是关闭了对延迟的响应功能,延迟本身还是存在的。想要消除延迟,可以安装第三方软件Karabiner Elements。玩过机械键盘的用户可能对它比较熟悉,这是一款免费的改键软件,可以将特定的按键映射到指定的功能上。其下载页面为:
https://karabiner-elements.pqrs.org/

尽管该软件的功能非常强大,甚至有些复杂,但我们完全不需要做任何设置。直接安装并运行之后,就会自动地消除Mac键盘大写键的延迟,非常省心。经测,如果尝试退出该软件的运行,那么即使做了上述系统设置,延迟也仍然存在。

该软件的老版本中,专门为消除大写键延迟提供了一个开关选项。但是从13.3.0版本开始,消除大写键延迟是默认行为,且不再提供开关选项。见:
https://karabiner-elements.pqrs.org/docs/help/how-to/disable-caps-lock-delay/

2.3 不推荐的做法

在探索该问题的过程中,见到国外论坛中有人提供了一种替代方案。具体做法是在【系统设置】、【辅助功能】、【键盘】中开启【慢速键】,并调整具体选项(点击右侧的圆形叹号)中的延迟时间滑块到最左端(慢)。如下图所示:

Figure 5

这种做法虽然可以在一定程度上解决上述问题,但代价是无法正常使用“按住以重复”的功能。正常来说,如果按住字母a不松手,那么会快速地连续输入很多个a。当然,重复前的延迟以及重复的速度都是可以另行调整的。但是,如果开启了慢速键,那么这种重复就会特别特别慢。想象一下,按住删除键想连续删除多个字符,结果却等了半天,等它一个一个慢慢删……

所以,这种做法不推荐使用。

2.4 不完善的地方

MacBook的内置键盘和妙控键盘,其新版和旧版在功能键(F区)的快捷键设置是不同的。旧版妙控键盘的F5和F6是无功能的,但新版则是F5为听写(麦克风图标),F6为勿扰模式(月亮图标)。截止到当前版本,它只能够支持F5的听写功能,却不能支持F6的勿扰模式功能。也就是说,如果保持Karabiner Elements是运行状态,那么F6的开启/关闭勿扰模式功能将变得不可用,F6就只能是普通的F6,无论是否开启了“将F1、F2等键用作标准功能键”设置。Karabiner Elements的设置界面如下图所示,其中F6不具有开启/关闭勿扰模式的映射功能:

Figure 6

GitHub上有几个issue指出了该问题,但截至当前版本并没有得到解决:

其原因好像是说苹果官方并没有对外公布“Do Not Disturb”勿扰模式的API接口,导致Karabiner的作者无法实现该功能。

不过,有一种曲线救国的方式值得一试。可以使用Karabiner将F6映射到不常用的F19,然后在【系统设置】、【键盘】、【键盘快捷键...】、【调度中心】中将“打开/关闭勿扰模式”的快捷键修改为F19。

这种方式实测可用,但对于我这样的强迫症患者来说,有点难以接受。因为我外接的带有触控ID和小键盘的妙控键盘中具有F19功能键,我更希望这种曲线救国的方式“消耗”的是另一个实体键盘上没有的、根本用不到的按键,而不是这种对实际键位有影响的“乾坤大挪移”。尽管我只用到了F13~F15,而F16~F19确实用不到,但这种设置方案“污染”了原本的F19键,我这心里就有点难受了。相比较而言,我更愿意接受F6和Fn+F6全都被当做普通F6,而勿扰模式开关不可用。

此外,无论是新、旧哪款妙控键盘,功能键最多只到F19,不存在F20。不过在软件层面上,Karabiner可以映射到最高F20,该虚拟键也可以在系统中得到响应,但是在上述快捷键设置中,则最多只会允许最高到F19而已。这也许正是因为妙控键盘的键位设计吧。