DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

OctoberaYours /

OctoberaYours/dsh-rightbar-default-width

Verified

DSH Web plugin: right sidebar defaults to a configurable fraction of the viewport (1/6 by default) instead of half the screen, while keeping drag-to-resize and remembering the width you dragged to.

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@957c924b

右侧栏默认宽度不是半屏,而且仍然可以拖

把 DSH 右侧栏的默认宽度从「半屏(视口 45%)」改成可配置的比例(默认 1/6), 同时保留拖拽调宽的能力,并记住你拖过的宽度。

为什么需要这个东西

DSH 的右栏宽度有两个坑,叠在一起:

  1. 默认是半屏:openRightbar 里 rightbar ??= 视口 × 0.45 (@deepseek-ai/dsh-client-ui-layout/lib/client.js:429,RIGHTBAR_DEFAULT_RATIO = .45)
  2. 不持久化:该包全文没有 localStorage 写入,所以每次刷新/重启都回到半屏,只能手拖一次

于是「每次开面板都要拖一下」成了常规操作。

为什么不能用 CSS 改

宽度最终落在内联样式上:

部位 位置
轨道(三列 grid) layout/client.js:318-321 gridTemplateColumns
面板(absolute 定宽) sidebar-right/client.js:5709-5710 width / --dsh-sidebar-width

按 CSS 层叠规则:

  • 普通样式表规则打不过内联声明 → 改不了宽度
  • 带 !important 的规则能改 → 但把拖拽写的新值也一并盖掉

结论:「默认窄」和「可以拖」用 CSS 无法兼得。(这正是我上一版配置的处境:宽度锁死 320px,拖不动。)

本插件怎么做的

改的是 state,不是渲染结果 —— 所以两者兼得。

ctx.layout 是 LayoutController 实例,它的 panels 字段就是 layout store 的 actions 对象:

layout/client.js:595   new LayoutController(instance.actions, …)
layout/client.js:457   this.panels = panels
renderer/client.js:730 kit["actions"] = store.actions   ← 拖拽用的也是这个

而这个 actions 里有 setRightbar(layout/client.js:422),拖拽走的是同一个 (layout/client.js:296 actions.setRightbar(rightbarBase.current - dx))。

所以:

  1. 右栏首次打开之前调用一次 setRightbar(视口 × 1/6) → openRightbar 里的 ??= 成了空操作,半屏默认值永远不会写入
  2. 包装 setRightbar,把用户拖拽的宽度记进 localStorage → 下次启动优先用它
  3. 自己调用时置 selfApplying 标志,不把初始化误记成拖拽

因为改的是 state,拖拽完全不受影响,两者不打架。

安装

# 1) 复制/克隆到任意目录,例如
git clone https://github.com/OctoberaYours/dsh-rightbar-default-width C:\Users\<你>\Code\dsh-rightbar-default-width

# 2) profile 的 package.json —— 【两处都要写】,只写一处会被静默启停
#    ~/.dsh/profiles/<profile>/package.json
{
  "dependencies": {
    "dsh-rightbar-default-width": "link:C:/Users/<你>/Code/dsh-rightbar-default-width"
  },
  "dsh": {
    "profile": {
      "bundles": [
        // …
        "dsh-rightbar-default-width"
      ]
    }
  }
}
# 3) link 安装要真 junction(bundle 解析会检查 node_modules/<name>/package.json)
cd ~/.dsh/profiles/<profile>/node_modules
cmd /c mklink /J dsh-rightbar-default-width C:\Users\<你>\Code\dsh-rightbar-default-width

# 4) 客户端插件 → 刷新页面即可(host 半边是空的,不涉及重启)

配置

改默认比例:在浏览器 DevTools 控制台执行,下次启动生效:

__dshRightbarWidth.setRatio(1/5)   // 1/5 屏;想更窄写 1/8

其它便利口:

__dshRightbarWidth.current()   // 当前记住的宽度(px),没记过则是 undefined
__dshRightbarWidth.set(420)    // 立即改成 420px 并记住
__dshRightbarWidth.forget()    // 忘掉拖拽宽度,回落到默认比例

想直接改死默认值:编辑 lib/client.js 的 DEFAULT_RATIO。

已知边界

  • 只对 layout 服务存在的客户端生效。找不到 ctx.layout.panels.setRightbar 时本插件静默退出,不报错、不影响其它功能 —— 因此 DSH 升级换掉这套 API 时 它是「失效」而不是「炸掉」。
  • 记住的是像素值,不是比例。换显示器/改窗口宽度后,若旧值超出新视口的 clamp(300, 视口×0.7) 范围,DSH 自己会把它夹回合法区间(这是它的行为)。
  • 若同一 page 内组件重挂(HMR),包装会在卸载时还原,不会链式叠加。
  • 不对其它 profile 生效:每个 profile 各自装配,要在 web 也用就照样加一遍。

许可

MIT — 见 LICENSE。

—/ 5

No ratings yet

Verified DSH bundle

Commit 957c924b45c2

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout