前言¶
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