d
dsh-header-modify
Discovereddsh-header-modify
DSH Desktop 客户端插件:当会话标题栏的按钮放不下时,自动把优先级最低的按钮收进「更多」菜单;并在「设置 → 标题栏按钮」中提供拖动排序(越靠上越优先保留)。
功能
- 自动发现:扫描标题栏里实际存在的所有按钮(内置按钮与其它插件注册的按钮都算),同一个 cell 内的多个按钮也分别识别。
- 自动收折:空间不足时按优先级把靠后的按钮收进「更多」;全部放得下时「更多」自己隐藏,不占用空间。
- 不打扰宿主:收折只写内联样式并逐属性还原;测量宽度时把元素移出文档流,绝不触发标题栏重排;带迟滞余量,边界不会闪烁;自身写入不会引发更新循环。
- 菜单条目保真:保留原图标、名称、禁用状态、点击行为与配色(含危险色);点击即执行原动作并关闭菜单;Esc / 点击外部 / Tab 关闭;方向键、Home/End 可导航。
- 弹层归位:由标题栏按钮打开的浮层(内联渲染或 portal 渲染)会脱离标题栏布局,落到标题栏下方、右对齐触发按钮、限制在视口内,过高时内部滚动;不相关的浮层不会被移动。
- 优先级页面:设置里与「内置插件」同级的一页「标题栏按钮」,拖动排序、上/下移按钮、恢复默认;只显示按钮名称,不显示数字优先级;按钮身份与具体会话无关,条件按钮出现时沿用已保存的位次。
- 干净卸载:停用插件时移除全部自建 UI、监听器、观察器、样式,并还原改动过的宿主 DOM。
安装
dsh plugin --profile <profile> add dsh-header-modify
本地目录开发时可用 link: 安装:
dsh plugin --profile desktop add link:F:/path/to/dsh-header-modify
开发
src/*.js 是源码片段,build.mjs 把它们拼成浏览器用的 client.js(window.__ModuleLoader__ 格式):
node build.mjs
改完客户端代码后,需要在插件管理器里把该 bundle 关闭再打开(必要时完全重启 DSH Desktop)才会加载新代码。
结构
| 文件 | 作用 |
|---|---|
src/00-base.js | 常量、DOM 助手、样式覆盖、按钮身份(名称/图标特征) |
src/01-i18n.js | 自带 zh/en 文案与安全翻译函数 |
src/02-store.js | 优先级存储(localStorage)、排序合并、设置页目录 |
src/03-placer.js | 浮层接管与定位(内联/portal、视口夹取、高度封顶) |
src/04-controller-*.js | 标题栏发现、宽度测量、收折决策、观察器、菜单 |
src/05-ui.js | 槽位入口组件与设置页 React 组件 |
src/06-apply.js | 样式注入、槽位注册与生命周期 |
License
MIT
Comments
Loading…