dsh-terminal-keybar-dock:为 DSH Web 终端在手机上补一条底栏快捷键

前言

在 DeepSeek Harness(DSH)里用右侧 Sidebar 的 Web 终端跑命令时,桌面键盘上的 Esc、Tab、Ctrl、方向键是日常操作的一部分;换到手机软键盘,这些键往往不存在,终端界面也没有自带的屏幕替代键。社区里已有 dsh-terminal-keybar 在终端旁浮一列半透明快捷键,本插件 dsh-terminal-keybar-dock 由维护者 gitMFQ 提供,同属客户端类插件,把同一套能力改成贴在终端底边的实心横条,并为终端内容区预留条带高度,避免提示符和光标被挡住。下面按定位、能力、安装与使用注意说明。

这是什么

dsh-terminal-keybar-dock 是 DSH 的 Client 插件:在触屏设备、视口宽度小于 768px、且右侧 Sidebar 当前标签为终端且终端 body 可见时,于活动终端底部显示一条快捷键栏;平板或横屏并排布局、折叠面板时不会出现。它继承自 dsh-terminal-keybar(MIT)的写入路径与部分机制,布局改为 dock 而非浮动列,并增加了粘性 Ctrl / Shift 修饰键及对软键盘下一字符的拦截改写。

目录页:https://www.skillhub.cn/plugins/gitMFQ/dsh-terminal-keybar-dock
源码:https://github.com/gitMFQ/dsh-terminal-keybar-dock(package.json 中版本为 1.1.0,许可证 MIT)

核心功能

底栏按键与布局

横条沿活动终端底边放置。在手机上 Sidebar 终端于 768px 以下全屏时,屏幕底即终端底。终端容器为底栏预留高度(条带高度,软键盘打开时再加上键盘 inset),终端内容重排后贴于条栏之上,最后一行提示符与光标保持可见。

条栏上的键(README 原文顺序):Ctrl · Shift · Esc · Tab · ↵ · ^C · ↑ · ↓ · ← · →。

跟随软键盘(visualViewport)

iOS Safari 与现代 Android Chrome 在软键盘弹出时缩小 window.visualViewport 而非整体布局视口。插件用 innerHeight − visualViewport.offsetTop − visualViewport.height 作为键盘 inset,将条栏 bottom 设为 max(inset, env(safe-area-inset-bottom)):键盘打开时条栏贴在键盘上沿,关闭时在 home 指示条之上。终端预留的底边带使用同一 inset 表达式加上条栏高度,使终端底边与条栏顶边对齐。对会缩小布局视口的旧版 Android / Firefox,inset 为零,条栏 bottom: 0 即已在键盘之上。

按键使用 pointerdown 并 preventDefault,终端隐藏 textarea 保持焦点,软键盘不收起。字节经当前标签的公开 Client 终端服务写入(webTerminals.view(...).write(...)),不复制终端内部实现。

Ctrl / Shift 粘性修饰

Ctrl 与 Shift 为一次性粘性修饰:点按高亮,再点取消;两者可组合为 Ctrl+Shift。武装后的修饰作用于下一个条栏键或软键盘输入的一个字符,随后清除。

  • 对条栏键:Shift+Tab 发送 ESC [ Z(back-tab);Ctrl / Shift 与方向键组合发送 xterm 修饰序列(如 Ctrl+↑ 为 ESC [ 1 ; 5 A),便于 readline / vim 中按词移动等。
  • 对软键盘:武装修饰时,从终端隐藏 textarea 在可取消的 beforeinput 中拦截下一字符,取消默认插入,改写后的控制字节仍走同一终端服务(如 Ctrl+C 中断、Ctrl+D EOF、Ctrl+R 反向搜索等;Shift 仅对大写 ASCII 字母生效)。IME 组字、粘贴等非单键输入不处理,修饰保持武装。
  • 在条栏外点击、切换标签或条栏消失会清除武装状态,避免误触影响后续按键。

安装与启用

官方 README 说明从本插件目录以本地 bundle 安装,而非远程一条命令拼出的 dsh plugin add github:...。步骤如下:

  1. 在 DeepSeek Harness 中打开 Plugins → Install,或使用 plugin_manager 工具的 install_bundle,指向该插件目录。
  2. 禁用上游插件 dsh-terminal-keybar,避免浮动列与底栏同时出现。
  3. 安装后重新加载页面。

插件依赖 Node >=20(见 package.json engines),客户端注入涉及 @deepseek-ai/dsh-client-ui-sidebar-right、@deepseek-ai/dsh-api-terminal-controller 等 DSH 客户端模块;具体触及的上游 API 见仓库内 MAINTENANCE.md。

典型用法

在窄于 768px 的触屏设备(或开发者工具中窄视口触屏模拟)上打开 DSH,进入右侧 Sidebar 的终端标签,确认终端 body 可见后,底栏应出现。关闭软键盘时可验证 dock 布局与终端预留条带;打开软键盘后条栏应随 visualViewport 上移到键盘上方——README 注明 open-keyboard 行为需在真机上验证。

日常操作示例:

  1. 需要中断前台进程:先点 Ctrl(亮起),再点 ^C,或武装 Ctrl 后在软键盘输入对应字符(按 README 控制字节映射)。
  2. 需要 Tab 补全或 Shift+Tab:直接点 Tab,或 Shift 武装后点 Tab。
  3. 在 vim / readline 中按词移动:武装 Ctrl 后点 ← / →。
  4. 误武装修饰:在条栏外点一下或切换标签即可清除。

适用场景与注意

适合:经常在手机上通过 DSH Web 终端与智能体或 shell 交互、且依赖 Esc / Tab / Ctrl / 方向键的开发者。

注意:

  • 仅移动端窄视口 + 终端标签可见时生效;与 dsh-terminal-keybar 二选一,勿同时启用。
  • 插件在 DSH 客户端侧运行,安装前请阅读源码与 MIT 许可证,确认可接受其注入与终端 API 使用方式。
  • 键盘 inset 与 beforeinput 拦截在桌面浏览器无法完全等价于真机软键盘;重要交互建议在手机上走一遍。
  • SkillHub 目录为社区插件索引站点,与 DeepSeek / 幻方无官方从属关系;星标与收录信息以各站点当时页面为准。

结尾

dsh-terminal-keybar-dock 把手机软键盘缺省的终端键补成终端底边实心条栏,并用 visualViewport 让条栏骑在软键盘上、同时为终端内容留白,使移动场景下 DSH 终端更接近桌面可用性。进一步了解可访问 SkillHub 目录页 与 GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye