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。

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

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

小夜