Fn Hold Doubao Voice Input
交付文件:
hammerspoon-doubao-fn-init.lua:完整 Hammerspoon 配置,可作为~/.hammerspoon/init.lua使用,也可由现有init.lua通过dofile(...)引入。karabiner-fn-to-f18-rule.json:当 Hammerspoon 原生监听 Fn 不稳定时使用,Karabiner 把 Fn 转成普通 F18,Hammerspoon 监听 F18 的按下和松开。
1. 获取输入法 Source ID
我已经从本机偏好里读到 macOS 自带五笔的 ID,并写入 Lua 配置:
defaultInputSourceID = "com.apple.inputmethod.SCIM.WBX"
已获取到豆包输入法 ID,并写入 Lua 配置:
doubaoInputSourceID = "com.bytedance.inputmethod.doubaoime.pinyin"
以后如果豆包 ID 变化,手动切到豆包,然后打开 Hammerspoon Console,执行:
doubaoFnVoice.setDoubaoToCurrent()
它会自动把当前输入法 ID 写入 ~/.hammerspoon/init.lua,并自动 reload Hammerspoon。
如果不确定有哪些可用输入法,在 Console 执行:
doubaoFnVoice.dumpSources()
或直接执行:
hs.inspect(hs.keycodes.layouts(true))
hs.inspect(hs.keycodes.methods(true))
2. 关键配置项
在 Lua 文件顶部修改:
longPressSeconds = 0.30
restoreDelaySeconds = 0.80
debug = true
如果豆包语音上屏慢,把 restoreDelaySeconds 调大,例如 1.2 或 1.5;如果切回五笔明显太慢,调小到 0.2 到 0.5。
默认 enforceDefaultWhenIdle = true,不按 Fn 时会把输入法保持在五笔。如果你偶尔需要手动切换到其他输入法,可以改成 false。
3. Hammerspoon 安装与权限
- 安装 Hammerspoon。
- 打开 macOS 系统设置,给 Hammerspoon 开启“辅助功能”权限。
- 在 Hammerspoon 菜单里选择
Reload Config,或在 Console 执行:
hs.reload()
- Console 里看到
Doubao Fn voice loaded,说明配置已加载。
4. 验证原生 Fn 方案
- 确保当前输入法是五笔。
- 长按 Fn 超过
longPressSeconds。 - 预期:输入法切到豆包,并触发豆包语音输入。
- 松开 Fn。
- 预期:豆包结束语音、提交识别结果,随后恢复五笔。
如果 Console 没有看到 [doubao-fn] trigger down: native-fn,说明 Hammerspoon 没有稳定收到 Fn 事件,使用 Karabiner 兜底方案。
5. Karabiner 兜底方案
把 karabiner-fn-to-f18-rule.json 作为 Karabiner complex modification 使用,启用后 Fn 会变成 F18 的按下/松开事件。Lua 配置已经默认监听 F18,不需要改代码。
启用后重新加载 Hammerspoon,再按 Fn。Console 里应看到:
[doubao-fn] trigger down: karabiner-f18
如果 Karabiner-EventViewer 里 Fn 不是 key_code: fn,以 EventViewer 显示为准调整 JSON 的 from 字段。
6. macOS Fn/Globe 冲突
macOS 的 Fn/Globe 可能被系统用于切换输入法、表情符号、听写或其他行为。建议在系统设置里关闭或避开 Fn/Globe 的默认动作,否则可能出现系统动作和脚本动作同时触发。
Hammerspoon 在密码框、某些安全输入场景或 Secure Input 开启时可能收不到键盘事件,这是 macOS 限制,不是脚本逻辑错误。