dsh-linux-shortcut:为 Linux 网页端恢复与 Windows 一致的快捷键

前言

在 Linux 上用浏览器访问 DeepSeek Harness(DSH)网页端时,侧边栏、会话、设置等常见操作大多没有默认快捷键;设置 → 快捷键里大量动作显示「暂无快捷键」,手工改绑也往往存不进去。桌面 Electron 客户端不受此影响,但习惯纯浏览器或远程开发机场景的用户会明显感到效率落差。下面介绍的 dsh-linux-shortcut(维护者 nohappiness)是一条客户端插件路径:不改 core 安装树,只在首页尽早注入平台映射,让快捷键子系统按 web:windows 的同一套表解析键位、展示键帽并持久化改绑。

这是什么

dsh-linux-shortcut 归类为 DSH 客户端插件(dsh.client.platform: web)。当前包版本 0.1.3(MIT),在 package.json 中注明针对 0.2.2-rc.1 做过验证(verifiedAgainst)。

一句话:在 Linux 非 Android 的浏览器里,把 navigator.platform 映射成 Win32,使网页端快捷键逻辑与 Windows 网页端共用同一默认表与绑定规则;设置 → 通用底部另有一行状态,用于确认映射是否真实生效。

为什么 Linux 网页端原本没有快捷键

依据仓库 README 对 core 源码的梳理,问题不在「浏览器按不了键」,而在 平台键 web:linux 未登记、也无法合法落盘:

  1. 网页端在 packages/client/shortcuts/src/client/dom.ts 用 navigator.platform 识别平台,Linux x86_64 会得到 platform = 'linux'。
  2. 多处快捷键注册点只配置 desktop:{macos,windows,linux} 与 web:{macos,windows},没有 web:linux。
  3. resolveShortcutDefault() 按 ${runtime}:${platform} 取值,取不到即未绑定。
  4. isWebBindingAllowed() 在 Linux 网页端仅放行 Ctrl+/、Ctrl+Shift+,、Ctrl+Shift+.;其余组合报 unsupported-browser,编辑器不写 localStorage。

因此面板里除 Ctrl+/ 外多为空,改绑也难以保存。

核心做法

插件分两半,与 README 一致:

宿主半:挂接 webServer.tapIndex(),在首页 <head> 最前面插入带 data-dsh-linux-shortcut="platform" 的脚本。当 navigator.platform 以 Linux 开头且 UA 非 Android 时,用 Object.defineProperty 把平台读值遮蔽为 "Win32"。注入必须早于 bootstrap 队列脚本,故不能仅靠 index-inject 追加到表尾。

浏览器半(lib/client.js):在设置 → 通用增加「Linux 快捷键」状态行,用于判断映射是否在浏览器侧真实生效。

键位语义仍由 core 的 effectiveShortcuts()、dsh.keybindings.v1 等同一事实源计算,不自建第二份键位表(仓库 docs/DESIGN.md 记录了为何放弃读 ShortcutRegistry 私有字段的方案)。

键位(与 Windows 网页端一致)

装上插件后,默认组合与 Windows 网页端相同,例如:

类别 键
新建会话 / 搜索会话 / 添加工作区 Ctrl+Alt+N / Ctrl+Alt+K / Ctrl+Alt+O
折叠左栏 / 右面板 Ctrl+Alt+B / Ctrl+Shift+B
终端 / 分屏 Ctrl+` / Ctrl+\
设置 / 快捷键面板 Ctrl+Alt+, / Ctrl+/

README 提示三组可能被浏览器或桌面环境先占用:Ctrl+Shift+B(Edge 书签栏)、Ctrl+Shift+O(Edge 书签管理器)、Ctrl+Alt+T(GNOME/KDE 开终端)。可在 设置 → 快捷键 改绑,例如右面板改为 Ctrl+Alt+Y。

安装与启用

安装命令以 README 原文为准。插件以当前 DSH 进程权限运行,添加前建议在 GitHub 仓库 查看源码与 MIT 许可证。

本地 link(示例路径来自 README,按你的环境替换):

dsh plugin --profile web add link:/data/ai_copilot/dsh-plugins/dsh-linux-shortcut

远端仓库(首次会走 GitHub 连接检查):

dsh plugin --profile web add git+ssh://git@github.com/nohappiness/dsh-linux-shortcut.git

dsh plugin add 会通过 reconcile 把带 dsh.bundle.patch 的包写入 profile 的 dsh.profile.bundles,一般无需手改 package.json。

生效步骤:

systemctl --user restart dsh.service   # 会断开当前会话,宜在空闲时执行

浏览器侧需 Ctrl+Shift+R 强刷;客户端 chunk 按 rev 缓存在进程内,不强刷可能仍是旧包。

卸载并回滚到「Linux 无快捷键」状态:

dsh plugin --profile web remove dsh-linux-shortcut && systemctl --user restart dsh.service

验证与典型用法

按 README 建议顺序自检:

  1. 首页是否注入脚本(端口改成本机监听端口):
   curl -s http://127.0.0.1:<PORT>/ | head -c 300

期望在第一个 <script src> 之前看到 <head><script data-dsh-linux-shortcut="platform">。

  1. 浏览器 Console:
   navigator.platform   // "Win32"
   navigator.userAgent  // 仍含 Linux 信息 —— 映射生效时的特征
  1. 设置 → 通用 底部「Linux 快捷键」为绿色结论;设置 → 快捷键 各动作有键帽且可改绑。

  2. 实按:Ctrl+Alt+N 新建会话、Ctrl+Alt+B 收左栏、Ctrl+/ 打开快捷键面板。

仓库提供 npm test(17 条 node 测试),覆盖宿主 index 改写与注入脚本行为,供二次开发时回归。

适用场景与注意

适合谁:在 Linux 上用 Chromium 系或 Firefox 等访问 DSH 网页端,希望与 Windows 网页端相同的默认快捷键、设置页键帽和改绑持久化,且不愿改 @deepseek-ai/* 安装树的用户。

不适用:Electron 桌面客户端本身已有完整键位;Android 虽 platform 常含 Linux,插件脚本已用 UA 排除。

限制(README 明示):

  • 当前发行版仍未内置 web:linux,此插件在该现状下是文档化的修复入口;若上游日后补齐 web:linux,映射仍可与官方默认值并存,插件非必须但可保留。
  • tapIndex 属于官方 escape hatch,非承诺 API;升级 DSH 后若接口变更,插件装载可能报错(可见,非静默失败)。
  • 插件仅改首页注入与客户端状态行,不修改 dsh 安装树内文件;dsh plugin update 或重装 core 不会冲掉插件,卸载即恢复。

社区目录 SkillHub 插件页 与 GitHub 为独立收录渠道,与 DeepSeek / 幻方无官方从属关系;安装前自行核对源码与许可证即可。

结尾

dsh-linux-shortcut 用最小的宿主注入 + 客户端状态展示,把 Linux 网页端快捷键拉回与 web:windows 同一套 core 行为,避免维护平行键位表。需要收录信息或贡献代码时,可访问 SkillHub 目录 与 GitHub:nohappiness/dsh-linux-shortcut。

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

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

Xiaoye