dsh-ui-font: Client-side plugin for adjusting DSH interface font

前言

DSH 的理念是「一切皆插件」,但客户端界面本身的文字显示——正文字体、代码字体、缩放比例、行高——想调整并没有现成入口,中文环境下遇到字体回退,往往只能自己动手改样式。

dsh-ui-font 把这件事做成了插件:安装后在 设置 → 字体 里集中调整整个界面的文字显示效果,改完实时预览,设置存在浏览器 localStorage,刷新后仍然保留。下面介绍它的功能、安装方法与注意事项。

这是什么

dsh-ui-font 是一个 DSH 客户端插件,由 linshufan21 维护,基于 MIT 许可证开源。定位一句话:修改整个 DSH 界面的文字显示效果,覆盖正文字体、代码字体、显示比例、行高、字体平滑、代码连字,并提供一个带中文字形标记的字体浏览器。

核心功能

字体与排版

  • 正文字体:预设(微软雅黑 / 苹方 / 等线 / 思源黑体 / 更纱黑体 / 思源宋体 / 霞鹜文楷 / HarmonyOS Sans / MiSans),或自定义字体栈
  • 代码字体:预设(Cascadia Code / Consolas / JetBrains Mono / Fira Code / 更纱等宽 SC / Maple Mono / Maple Mono NF),或自定义
  • 显示比例:80–130% 等比缩放(zoom),默认 100% 即无变化
  • 聊天区行高:1.3–2.0
  • 字体平滑:抗锯齿开关
  • 代码连字:font-variant-ligatures

字体浏览器与中文字形标记

自定义字体时可打开字体浏览器子窗口,以列表形式展示本机所有已安装字体,每项用自身字形预览,点击即应用;枚举失败时自动降级为常见字体名单。

没有中文字形的字体会带「英文」角标,选择时给出提示,避免中文显示回退。

交互细节

  • 应用反馈:应用按钮显示「已应用 ✓ / 无效输入 / ⚠ 无中文字形」,不再静默失败
  • 输入框字体跟随开关:默认关闭(避免输入法组合时光标错位),开启后输入框使用正文字体
  • 实时预览 + 恢复默认

覆盖范围与持久化

  • markdown 全覆盖:智能体回复的正文、标题、列表、表格、链接等全部跟随正文字体,代码块保持等宽字体
  • 设置存浏览器 localStoragedsh-ui-font:*),刷新保持

安装与启用

使用 DSH 自带的插件命令,从 GitHub 直接安装:

dsh plugin add github:linshufan21/dsh-ui-font

然后编辑 profile 的 package.json(路径 %USERPROFILE%\.dsh\profiles\web\package.json),在 dsh.profile.bundles 里追加 "dsh-ui-font",重启 DSH(关窗口重开),设置页就会出现「字体」。

补充一点:Git 托管的插件若含构建脚本,pnpm 默认会阻止 prepare,需要在 profile 的 pnpm-workspace.yamlallowBuilds 里放行对应包。本插件没有构建脚本,无需处理这一步。

本地开发与同步

想在本地改代码,可以把仓库放到任意目录后按文件路径安装:

cd $env:USERPROFILE\.dsh\profiles\web
pnpm add "file:E:\deepseekwork1\dsh-ui-font"

再在 package.jsondsh.profile.bundles 追加 "dsh-ui-font",重启 DSH 即可。

改动 lib/client.js 之后,运行同步脚本把文件复制到已安装副本并校验:

powershell -ExecutionPolicy Bypass -File E:\deepseekwork1\_工具脚本\sync-dsh-ui-font.ps1

然后在 DSH 窗口按 Ctrl+F5 强刷。bundle rev 是动态计算的,不需要重启后端。

结构上,lib/client.js 负责浏览器端的设置注册与样式注入,lib/index.js 是宿主端空实现(纯客户端插件),cordis.patch.yml 作为 bundle patch 把插件注册进 loader。设置分类 id 为 dsh-ui-font,槽位为 settings.dshUiFont.item

如果要在它基础上二次开发,注意与 DSH rc.6 的约定:exports.inject 只声明 ["slots", "locale"],不要声明 runtime——rc.6 已没有这个 cordis 服务,声明了会导致界面 pending 卡住。

卸载

cd $env:USERPROFILE\.dsh\profiles\web
pnpm remove dsh-ui-font

然后手动从 package.json 的 bundles 里移除 "dsh-ui-font"

适用场景与注意事项

它适合想在 DSH 里统一正文字体与代码字体、为高分屏或低分屏调整显示比例、控制聊天区行高的用户;中文字体回退明显的环境,也可以用它直接挑一个带中文字形的字体。

使用前留意几点:

  • 插件以当前 dsh 进程权限运行。安装前建议先读一遍源码与许可证(MIT,允许自由使用、修改、分发,含商用,需保留版权声明)。
  • 「输入框字体跟随」默认关闭。开启后,中文输入法组合阶段(拼音未确认)可能因 Chromium 内核限制出现光标错位,保持默认关闭即可避免,正文显示不受影响。
  • zoom 仅在非 100% 时应用,默认不注入,不影响默认状态。
  • 代码区选择器依赖 hash 类名(_codeBlock 等),DSH 大版本升级后可能失效,此时正文样式仍生效。
  • 字体枚举优先使用浏览器 Local Font Access API;宿主拒绝权限时降级为内置常见字体名单探测,新安装的字体可能不出现,可直接手动输入字体名。
  • 自定义字体栈做了防注入过滤:拒绝 ; { } ( ) < >,长度上限 300。

结尾

dsh-ui-font 把界面字体的调整收进一个设置页:预设覆盖了常见的中西文与等宽字体,改动实时预览、可恢复默认,设置随浏览器保留。如果你对 DSH 的默认显示效果不满意,它是一个改动成本很低的选择。

  • 插件目录页(社区目录,与 DeepSeek / 幻方无官方从属关系):https://www.skillhub.cn/plugins/linshufan21/dsh-ui-font
  • GitHub 仓库:https://github.com/linshufan21/dsh-ui-font
羽毛球分组比赛记分
小程序二维码

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

Xiaoye