-
Notifications
You must be signed in to change notification settings - Fork 1
Toggle Mode
LeonXu edited this page Feb 28, 2026
·
2 revisions
Toggle 录音模式:单击开始录音,再次单击结束并自动输出文字。适合走动、站立等不方便长按的场景。
- 双 Toggle 快捷键 — 文本注入和闪念笔记各有独立 Toggle 键
-
共用键智能判定 — Toggle 键可与 PTT 键设为同一个键:
- 按住 < 1s 释放 → Toggle 模式(录音继续)
- 按住 ≥ 1s 释放 → PTT 模式(立即停止)
- 最大录音时长保护 — 可选 1/3/5/10 分钟上限
_handleKey() 优先级分发:
- Toggle stop(正在 Toggle 录音时再次按键 → 停止)
- 共用键判定(同键时通过时间阈值区分)
- 独立 Toggle start
- PTT / Diary 长按
-
_isToggleMode— 当前是否处于 Toggle 录音 -
_toggleMaxTimer— 最大时长计时器 -
_keyDownTime— 按键按下时间戳
-
AppConstants.kToggleThresholdMs— 共用键时间阈值(1000ms)
macOS 26+ 的 FN/Globe 键同时产生两种事件:
-
FlagsChanged(keyCode=63) — 传统修饰键事件 -
KeyDown/KeyUp(keyCode=179) — macOS 26 新增
问题:到达顺序不固定。若 FlagsChanged 先到并启动 Toggle 录音,随后到达的 KeyDown 179 会被 Toggle stop 逻辑误判为"第二次点击"而立即停止。
修复:原生层双向时间戳去重 (native_input.m):
-
lastGlobe179Time— 179 事件记录时间戳,100ms 内到达的 63 被抑制 -
lastFn63Time— 63 事件记录时间戳,100ms 内到达的 179 被抑制 - 先到者赢,后到者静默丢弃
Dart 层额外守卫 (core_engine.dart):
- Toggle 模式下,
_handleKey第 4 步 PTT/diary keyUp 被_isToggleMode && !isDown拦截