READMESource: main@7772b812
@rsdgnchen/dsh-bottom-dock
把 DSH 官方的右侧栏 dock(终端 / 文件树 / 文档预览 / 标签 / 引导)整体搬到底部, 用一根仿 iOS 上滑横杠唤出,可拖拽调高、可轻点收起。
- ✅ 不修改官方任何代码:内容仍由官方组件渲染、官方数据流驱动、官方 host 侧保活/恢复; 我们只改它的定位与网格(注入一段 CSS),并把"从右侧滑入"换成"从下方升起"。
- ✅ 只用公开 API 开合:
ctx.sidebarRight.isExpanded()/toggleExpanded()。 - ✅ 只依赖官方稳定的
data-*钩子(不是哈希类名)。 - ✅ 健康检查 + 完全惰性:探测不到官方结构 → 一行样式都不注入、界面一个节点都不渲染, 只把原因上报到 Host 诊断端点。最坏情况是"插件没生效",绝不会把界面搞坏。
依赖的官方契约
| 钩子 | 用途 |
|---|---|
[data-shell-overlay] |
我们挂 UI 的层(shell.overlay 槽) |
[data-rightbar-col] |
官方右侧栏列 —— 健康检查锚点,找不到就整体不介入 |
[data-sidebar-right-panel="push"] |
dock 面板(我们把它重定位到底部) |
[data-sidebar-right-panel="fullscreen"] |
官方全屏形态 —— 我们完全让位,不套任何规则 |
[data-sidebar-right-open] |
展开态(驱动"下方升起"动画与我们的 UI 切换) |
实现要点
- 官方 panel 的样式是
position:absolute; top:0; bottom:0; right:0; transform:translateX(100%); 我们用!important改成position:fixed; left:<侧栏宽>; right:0; bottom:0; height:<H>, 并把 AppFrame 的网格第三列压成0px(!important能赢过官方写在同一元素上的内联 grid), 于是对话区保持满宽、dock 落在底部。 - 收起/展开动画:
translateY(100%)→none(visibility 的延迟照抄官方,否则收起瞬间消失)。 - 布局那个右侧竖把手(右列压成 0 后会浮在对话区中间)由 JS 打标记隐藏;左侧把手绝不误伤。
- 对话区
padding-bottom:展开时H + 8(拖拽条那 8px),收起时8,官方全屏时0。
设计取舍:为什么不与右侧并存
官方右侧栏是一个面板(里面是终端 / 文件树 / 文档预览的标签页),同一时刻只能在一个
位置。想"底部终端 + 右侧预览"同时成立,底部就必须换成另一套终端(比如走官方终端模型
ctx.webTerminals 自己渲染)。实际用下来官方那套多标签已经够用,所以本插件选择整体搬家:
官方 dock 连同它全部标签与按钮一起落到下方,让"上方对话 + 下方一切"成为主界面。
安装 / 生效
从 GitHub 一键安装(推荐)
本插件已标注 GitHub dsh-plugin 主题。
dsh plugin --profile web add github:rsdgnchen/dsh-bottom-dock
pm2 restart dsh # 新增插件行需要重启(Host 半 + 客户端 boot 图都在启动时组装)
本地源码安装(开发/调试)
dsh plugin --profile web add file:$HOME/dsh/plugins/dsh-bottom-dock
pm2 restart dsh
与
@rsdgnchen/dsh-terminal(自带底部终端)功能重叠,两者同时启用会出现两根底部横杠。 试用本插件时建议在 profile 的cordis.patch.yml里临时关掉旧的:- id: dsh-rsdgnchen-terminal disabled: true回退只需去掉这两行并重启。
诊断
浏览器半探测失败/开合失败会 POST /__rsdgnchen-bottomdock/error,
Host 半追加到 $RSDGNCHEN_BOTTOMDOCK_ERROR_LOG(默认 os.tmpdir()/rsdgnchen-bottomdock-errors.log)。
License
MIT
No comments yet. Be the first to write one.