问题描述
在 iTerm2 中使用语音输入,文本无法写入终端输入框,且结果弹窗也不弹出。
根因分析
iTerm2 的 AX 元素被 classifyFocus() 归类为 .editableText(AXRole = AXTextArea 属于 knownTextRoles),进入 L1 → L2 → L3 写入链路:
- L1 (AXSelectedText):已有 false-positive 检测,正确返回 false
- L2 (AXValue splice):AXUIElementSetAttributeValue 返回 .success 但值未真正写入。L2 返回 true,函数提前退出,弹窗不显示
- L3 / popup:未执行到
尝试过的修复
在 L2 添加通用 value-unchanged 验证(写入后重读 AXValue 比对),但导致浏览器和企微等异步更新 AX 的应用回归。已回滚。
建议方案
- 基于 bundle ID 跳过 L2(com.googlecode.iterm2、com.apple.Terminal 等),让流程落到 L3 Cmd+V 粘贴
- 需要实际日志验证 L3 在 iTerm2 中是否能成功粘贴
- 若 L3 也失败,考虑将终端模拟器强制走 .unavailable 路径
问题描述
在 iTerm2 中使用语音输入,文本无法写入终端输入框,且结果弹窗也不弹出。
根因分析
iTerm2 的 AX 元素被 classifyFocus() 归类为 .editableText(AXRole = AXTextArea 属于 knownTextRoles),进入 L1 → L2 → L3 写入链路:
尝试过的修复
在 L2 添加通用 value-unchanged 验证(写入后重读 AXValue 比对),但导致浏览器和企微等异步更新 AX 的应用回归。已回滚。
建议方案