前言¶
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 全覆盖:智能体回复的正文、标题、列表、表格、链接等全部跟随正文字体,代码块保持等宽字体
- 设置存浏览器
localStorage(dsh-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.yaml 的 allowBuilds 里放行对应包。本插件没有构建脚本,无需处理这一步。
本地开发与同步¶
想在本地改代码,可以把仓库放到任意目录后按文件路径安装:
cd $env:USERPROFILE\.dsh\profiles\web
pnpm add "file:E:\deepseekwork1\dsh-ui-font"
再在 package.json 的 dsh.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