前言¶
DSH 的側邊欄裏有一個「全局面板」列表,依次是插件、插件市場、歸檔會話、自動化任務、IM機器人、Worktree Space、記憶系統、更多。列表條目固定展示,不參與滾動,因此條目變多或字體變大時,它會把下方的工作區擠小。想看到工作區內容,只能自己去改瀏覽器樣式。
下面介紹的 dsh-sidebar-nav-scroll 就是把這段列表限制爲自身自然高度的一半,溢出部分內部滾動,省下來的高度讓給工作區。它由 Ghostdu-AI 維護,是一個 DSH 客戶端插件(bundle),只作用於 Web 端。
它做了什麼¶
工作機制:瀏覽器端在運行時測量每一行的真實高度和真實的 row-gap,再按 fraction 算出上限,不寫死像素值,宿主改樣式時也不會算錯。
實現上有幾點值得說明:
1、自然高度由行元素本身累加得到,不讀 scrollHeight,所以上限生效後測量結果不會自我影響。
2、上限通過注入樣式表裏的自定義屬性 --dsh-sidebar-nav-scroll-cap 傳值,側邊欄摺疊成窄條時,樣式表裏的摺疊保護規則可以穩定覆蓋它。
3、列表定位不依賴宿主的 CSS Module 類名:先找任意 panelRow 行元素,取它最近的 <nav> 就是面板列表,找不到時纔回退到類名匹配。
4、側邊欄摺疊時([data-sidebar-collapsed] 或摺疊態類名)自動不設上限。
5、省下的高度不需要額外佈局補丁。側邊欄面板列表是 flex: none,工作區是 flex: 1,限高後空出的空間自然由工作區接管。
安裝與啓用¶
這是一個 DSH 客戶端插件,dsh.client.platform = "web"。打開 DSH Web 側邊欄的「插件」→「已安裝插件」→「添加插件」,填入下面任意一種 spec(installBundle 接受 pnpm add 支持的所有寫法):
github:Ghostdu-AI/dsh-sidebar-nav-scroll
https://github.com/Ghostdu-AI/dsh-sidebar-nav-scroll.git
Ghostdu-AI/dsh-sidebar-nav-scroll
安裝並啓用後,側邊欄的全局面板列表立即被限高,不需要重啓 DSH。
如果要改源碼做開發,可以先 clone 到本地,再用 link: 指向目錄:
git clone https://github.com/Ghostdu-AI/dsh-sidebar-nav-scroll.git
# 在「添加插件」裏填 link:/絕對路徑/dsh-sidebar-nav-scroll
開發時修改 client.js 保存,宿主會檢測到變化並給插件推一個新的 revision,瀏覽器端熱重載該插件。
私有倉庫¶
私有倉庫需要宿主已配置好對應的 git 憑據。installBundle 的連通性預檢(git ls-remote)會禁用憑據助手與交互提示,因此私有倉庫應優先用本地路徑安裝。
配置¶
在 DSH Web 側邊欄點「插件」,在「已安裝插件」裏找到「側邊欄面板列表限高」,點標題進入它的頁面,就能看到設置卡片:
- 高度上限(佔自然高度的比例):滑塊,5%–100%
- 至少保留幾行:數字輸入,0 表示不限制
- 啓用限高:勾選框
- 恢復默認:清掉已保存的值
改動即時生效,不需要重載頁面。卡片、控制台 API 和別的標籤頁寫的是同一個鍵,任何一方改動,側邊欄高度上限都會跟着變。
配置爲什麼存放在瀏覽器側¶
宿主側的 patch 行無法把配置送進瀏覽器,dsh.client 的啓動圖譜只帶 id/url/rev/inject/immediately/external,所以設置存放在瀏覽器側。卡片只是這份存儲的可視化入口,控制台可以直接改:
__DSH_SIDEBAR_SCROLL__.set({ fraction: 0.4, minRows: 3 }) // 改成自然高度的四成,至少三行
__DSH_SIDEBAR_SCROLL__.status() // {attached,collapsed,rows,naturalHeight,capHeight}
__DSH_SIDEBAR_SCROLL__.reset() // 回到默認值
底層存儲是 localStorage["dsh-sidebar-nav-scroll"],例如:
{"fraction":0.5,"minRows":2,"enabled":true}
取值範圍與優先級:
1、fraction:0.05–1。
2、minRows:至少完整顯示多少行,按測得的行高計算下限。
3、enabled: false:完全停用插件並還原側邊欄。
4、優先級爲 localStorage > 插件 apply(ctx, config) 收到的 config > 內置默認值(fraction: 0.5、minRows: 2、enabled: true)。
設置卡片註冊在插件頁的 plugins.bundle.config 槽位上(鍵是本包的包名),組件是普通 React 組件,不依賴插件的 configForms 服務。宿主版本沒有這個槽位時卡片不會出現,控制台接口照舊可用。
適用場景與注意¶
適合這些情況:
1、側邊欄全局面板條目變多,工作區被擠到只剩很小一塊,又不想改宿主樣式。
2、需要按自己的字體或縮放比例調整列表高度,而不是寫死像素。
3、想要保守的默認值(自然高度的一半、至少兩行),再按需要調。
需要注意:
1、插件以當前 DSH 進程權限運行,安裝前應檢查源碼與許可證(MIT)。
2、只作用於 Web 端;桌面殼內置的瀏覽器同樣適用。
3、配置存在 localStorage 裏,瀏覽器側 origin 變化時會丟失,與宿主其它瀏覽器端插件一致。
4、設置卡片依賴插件頁的 plugins.bundle.config 槽位,0.1.7 及之後的插件頁提供;更早的版本只有控制台接口。
結尾¶
這個插件解決的是單點問題:讓側邊欄面板列表收起高度、內部滾動,把工作區還給用戶。運行時測量行高和 row-gap 的做法,讓它對宿主樣式變化比較穩。
目錄頁:https://www.skillhub.cn/plugins/Ghostdu-AI/dsh-sidebar-nav-scroll
GitHub:https://github.com/Ghostdu-AI/dsh-sidebar-nav-scroll