dsh-zoom-scale:DSH 界面整体缩放与浮层对齐

前言

DeepSeek Harness(DSH)的 Web 与 Desktop 壳在同一套 UI 上跑会话、设置和各类浮层。浏览器原生页面缩放或随手改 CSS,往往只放大文字和块级布局,position: fixed 的菜单、tooltip、弹窗容易相对触发元素错位。DSH 生态里插件可以改客户端行为;下面介绍维护者 Cieux 发布的客户端插件 dsh-zoom-scale,用 html { zoom } 做整体界面缩放,并用 shim 把几何与样式换算补全,让浮层在 75%–200% 任意档位下仍贴住触发点。

这是什么

dsh-zoom-scale 是 DSH 的界面缩放插件:缩放整个 Web / Desktop UI,并保证菜单、tooltip、hover card、对话框等 overlay 在任意缩放下仍锚定在各自触发元素上。

插件以当前 DSH 进程权限运行;安装前请自行查看源码与许可证。

核心功能

缩放区间与入口

  • 区间:75% – 200%,步进 5%。
  • 设置:Settings → General → Interface zoom(步进器 + 重置);中文界面下为「设置 → 通用设置 → 界面缩放」。
  • 会话头:右侧 − 125% + 控件;点击百分比重置为 100%。
  • 快捷键:Ctrl(macOS 为 ⌘)+ 滚轮;Ctrl/⌘ + =、-、0。
  • 持久化:同源 cookie(桌面壳重启端口会变,cookie 按 host 保留)并镜像到 localStorage。

架构:宿主、shim 与客户端

文件 运行位置 负责
index.js 宿主(Node) head 脚本:shim 源码、初始缩放、桌面窗口还原
lib/shim.cjs 页面,早于任何客户端模块 几何换算;发布 window.__dshzs
client.js 页面,Loader 模块 控件、偏好、语言词条、兜底 shim

index.js 注入 head 脚本,shim 在任何客户端模块之前安装,并在 shell 首次挂载前应用记住的缩放。client.js 在 window.__dshzs 存在时驱动它;不存在时才装兜底 shim,避免同一 rect 被除两次。

shim 覆盖的范围

Chromium 在 html { zoom } 下用视觉像素报告 rect、窗口尺寸和指针坐标,CSS 长度仍在布局像素,fixed 浮层会漂移。shim 将相关量换算回布局空间,大致包括:元素与 Range 的 rect、窗口与 VisualViewport、滚动 API、指针与滚轮、命中测试、SVG 屏幕矩阵、视口单位(vw/vh/vmin/vmax → calc(… / var(--dshzs-scale)))、媒体查询边界与 devicePixelRatio。各 API 单独兜底,缺失一项只退化对应行为。

样式表侧:换算跟随 --dshzs-scale,换档时主要重推媒体查询边界,不必整表重扫。新 CSS 由 MutationObserver、adoptedStyleSheets setter、insertRule / replaceSync 以及捕获阶段 load 监听收拢。

安装与启用

从本地目录或打包产物安装(命令来自 README,勿凭仓库名拼接 github: 形式):

# 本地目录
dsh plugin add /path/to/dsh-zoom-scale

# 或安装打包产物
dsh plugin add ./dsh-zoom-scale-0.2.2.tgz

安装后重载 DSH;使用 Desktop 应用时建议重启。成功后可在 设置 → 通用设置 看到「界面缩放」一行。

典型用法

  1. 打开 设置 → 通用设置 → 界面缩放,用步进器或重置调到合适比例。
  2. 在会话界面用头部 − …% + 微调;需要回到 100% 时点击百分比数字。
  3. 在会话页按住 Ctrl(macOS 为 ⌘)并滚动滚轮,或用 =、-、0 调整;关闭 DSH 再开,比例应从 cookie / localStorage 恢复。

若其它代码需要读取当前缩放,使用 window.__dshzs?.get() 或 html[data-dshzs](100% 时无 data-dshzs,不代表插件未安装)。不要读 documentElement.style.zoom:shim 模式下 zoom 写在 <style> 里。

适用场景与共处注意

适合:长时间盯 DSH 界面、需要统一放大/缩小整页 UI 且希望下拉、tooltip、弹窗仍对齐触发点的用户;也适合在开发 DSH 客户端插件时理解页面 zoom 与几何 API 的差异。

与其它 CSS / 插件共处(README Compatibility 节):

  • 不要给根元素再写 zoom;shim 独占 html { zoom }。
  • 不要用 transform: scale() 做页面缩放;会与 shim 冲突且 fixed 浮层无法被 shim 修正。
  • 不要写入 --dshzs-scale;只读。硬编码颜色应改用 --dsw-* 令牌以跟随暗色主题。
  • 不要重复安装第二套 shim;通过已有 window.__dshzs.set() 驱动缩放。
  • 首帧就要准确的尺寸请写在样式表规则里;内联 style 需被观察到后才换算。

结尾

dsh-zoom-scale 把 DSH 界面缩放做成可控的 75%–200% 档位,并用 head shim + 客户端控件解决 zoom 下的 rect 与样式换算问题。安装命令与行为以仓库 README 为准。

社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜