跳转至

macOS 长按与按键重复

除非应用程序在其偏好设置域中明确选择退出,否则 macOS 在按住某个键时会打开重音符号选择器。这会导致在 vim 等终端应用程序中,按住键无法重复。在首次符合条件的启动时,Orca 会写入:

defaults write com.stablyai.orca ApplePressAndHoldEnabled -bool false

该写入仅作用于 Orca 的打包 bundle 域。未打包的 Electron 开发 bundle 和非 macOS 平台保持不变。新的写入会被保守地视为在下次启动时生效。

优先级与决策记录

Orca 在写入前会检查域中是否存在显式值。true 或 false 均被视为用户选择并予以保留。只有未设置的键才会获得 false 默认值。

该决策仅存储一次,位于 <userData>/macos-press-and-hold-default.json。applied 或 kept-user-preference 决策会阻止后续启动再次修改该域。 探测和写入失败仍可重试,因此临时失败不会永久禁用该修复。

使用 defaults read <domain> <key> 而不是 systemPreferences.getUserDefault:Electron API 无法区分未设置的键和显式的 false。只有表示键缺失的退出状态会被解释为未设置;进程启动失败、 超时和其他退出状态都会保持偏好设置不变。

恢复重音符号选择器

显式设置该偏好设置,然后重启 Orca:

defaults write com.stablyai.orca ApplePressAndHoldEnabled -bool true

在 Orca 记录其一次性决策后,删除该键也可以恢复 macOS 默认行为, 且 Orca 不会重新创建它:

defaults delete com.stablyai.orca ApplePressAndHoldEnabled

开发和预发布渠道可能使用带渠道后缀的 Orca bundle 标识符;如适用,请改用该域。

回滚

仅删除启动代码是不够的。AppKit 会读取已持久化的偏好设置,因此代码回滚还必须安排为运行过受影响构建的用户删除该键。

测试覆盖

单元测试覆盖平台保护、显式值保留、重试行为、域所有权、 记录持久化,以及 CI 上子进程退出状态的解释。一个仅限 macOS 的测试还会固定真实的 defaults(1) 行为,但当前 PR CI 不会在 macOS 上执行测试。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 orca48/orca