Skip to content

[Feature] 键盘输入时自动聚焦主输入框 (Type-to-focus) #2312

Description

@xingkaixin

需求背景与痛点 (Background & Problem)

在日常使用中,当用户翻阅聊天记录、选中并复制消息文本、点击界面空白处,或者刚切回窗口时,主输入框往往处于失焦(blur)状态。
此时若用户直接敲击键盘输入内容(例如开始打字提问或敲拼音),按键会被直接忽略或丢失,用户必须中断打字并用鼠标点击输入框才能重新激活输入,打断了打字与提问心流。

主流桌面 AI 客户端(如 Codex App、Claude Desktop)均具备全局键盘捕获能力,当处于聊天界面且没有其他控件抢占焦点时,敲击键盘即可自动聚焦到输入框并完成输入。

期望功能与行为 (Proposed Behavior)

  1. 自动捕获并聚焦:在主会话处于非只读状态且允许输入时,用户在窗口任意位置按下可打印字符、或启动输入法(IME Composition)时,焦点自动且平滑转移至主输入框(ChatInputBox)。
  2. 首字符无缝保留
    • 英文及半角字符直接敲击时,触发聚焦的第一个字符需直接输入到输入框内,不丢字;
    • 中文/多语言输入法启动时,输入法候选浮层应自然挂载在输入框当前光标位置。
  3. 已有草稿追加:若输入框中已有未发送的草稿内容,光标直接定位至草稿末尾,新输入字符在末尾自然追加。
  4. 空格键处理:在聊天视口无焦点时按下空格键(Space),作为普通字符输入处理(聚焦并输入空格),不触发浏览器默认的空格向下滚屏行为。

边界与防冲突规则 (Constraints & Edge Cases)

  • 已有活动输入控件时豁免:若焦点当前在其他输入控件上(如顶部聊天搜索栏 ChatSearchBar、弹窗 input/textarea、设置项输入框等),绝不抢夺焦点。
  • 系统/修饰组合键豁免:按键包含修饰键(Cmd/Ctrl + C/V/A/F/KAlt、单纯的 Shift/Cmd/Ctrl/Alt 单键)时,保持原生快捷键逻辑,不转移焦点。
  • 导航与功能键豁免
    • 滚动键(ArrowUp/ArrowDownPageUp/PageDownHome/End)继续保留用于聊天列表滚动;
    • 功能键(Esc 用于关闭浮层、Tab 用于切换焦点、F1~F12 等)不转入输入框。
  • 会话状态限制:会话为只读状态、或当前存在阻断式交互弹窗(如工具权限确认)时禁用。

参考与实现建议 (Implementation Notes)

  • 参考实现:Codex Desktop App / Claude Desktop。
  • 实现切入点:可在 useChatPageEventBridge 或全局键盘监听层捕获 keydown / compositionstart 事件,并结合 ChatInputBox 暴露的 TipTap 实例(editor)执行平滑聚焦与末尾追加。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions