Account menu

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 配置:

Lua
defaultInputSourceID = "com.apple.inputmethod.SCIM.WBX"

已获取到豆包输入法 ID,并写入 Lua 配置:

Lua
doubaoInputSourceID = "com.bytedance.inputmethod.doubaoime.pinyin"

以后如果豆包 ID 变化,手动切到豆包,然后打开 Hammerspoon Console,执行:

Lua
doubaoFnVoice.setDoubaoToCurrent()

它会自动把当前输入法 ID 写入 ~/.hammerspoon/init.lua,并自动 reload Hammerspoon。

如果不确定有哪些可用输入法,在 Console 执行:

Lua
doubaoFnVoice.dumpSources()

或直接执行:

Lua
hs.inspect(hs.keycodes.layouts(true))
hs.inspect(hs.keycodes.methods(true))

2. 关键配置项

在 Lua 文件顶部修改:

Lua
longPressSeconds = 0.30
restoreDelaySeconds = 0.80
debug = true

如果豆包语音上屏慢,把 restoreDelaySeconds 调大,例如 1.21.5;如果切回五笔明显太慢,调小到 0.20.5

默认 enforceDefaultWhenIdle = true,不按 Fn 时会把输入法保持在五笔。如果你偶尔需要手动切换到其他输入法,可以改成 false

3. Hammerspoon 安装与权限

  1. 安装 Hammerspoon。
  2. 打开 macOS 系统设置,给 Hammerspoon 开启“辅助功能”权限。
  3. 在 Hammerspoon 菜单里选择 Reload Config,或在 Console 执行:
Lua
hs.reload()
  1. Console 里看到 Doubao Fn voice loaded,说明配置已加载。

4. 验证原生 Fn 方案

  1. 确保当前输入法是五笔。
  2. 长按 Fn 超过 longPressSeconds
  3. 预期:输入法切到豆包,并触发豆包语音输入。
  4. 松开 Fn。
  5. 预期:豆包结束语音、提交识别结果,随后恢复五笔。

如果 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 里应看到:

TEXT
[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 限制,不是脚本逻辑错误。

Published 8/1/2026, 4:42:00 PM

Made with