warmwine/dsh-ui-font
DSH老花眼插件,对眼睛不好看不了小字的朋友相当有善。
Listed
4
Ui
Bundle verified
Preview
What it does
Font engine for the Web GUI: system font enumeration, global and per-component font-size tuning with a Spy++-style picker, settings page.
Best for
- Users who need larger or more legible text throughout the DSH Web GUI.
- People who want separate fonts for ordinary text and code, selected from locally installed fonts.
- Users who need global sizing plus fine-grained per-component adjustments.
- Plugin-heavy interfaces where a Spy++-style picker helps identify the exact text region to tune.
Not ideal for
- Text inside the dsh-ssh xterm terminal, which uses its own font and is not scaled.
- Content rendered inside preview iframes, which the picker cannot select.
- Setups where a theme plugin takes control of font variables; the active theme takes precedence.
- Users expecting bundled fonts; missing selected fonts fall back to the system font stack.
README
dsh-ui-font
给你的 DeepSeek Harness 网页界面换字体、调字号的小工具。专为看小字费劲的人打造:界面每个角落的字都能放大,而且不用猜”这个设置管哪块”——用准星点一下就知道。
效果
| 安装前 | 安装后 |
|---|---|
![]() |
![]() |
设置界面(侧边栏 → 设置 → 字体):

它能干什么
字体随便换
界面上两处字体(普通文字和代码)分别从你电脑里装了的字体里挑。字体列表是实时读你系统的,装了新字体刷新一下就能看到;挑了个后来又卸载的字体,列表里会标”(未安装)”,不会出乱子。
字号整体放大
一个滑杆管全局,-3 到 +20 像素,拖动立即生效。聊天记录、代码块、侧边栏、设置页、各插件面板——页面上所有文字一起变大。
🎯 准星选取:点哪调哪
这是解决”我根本不知道这块界面归哪个设置管”的功能。
设置页里点「选取区域」,或者按你自己设的快捷键(见下),鼠标会变成一个红色准星。这时候把鼠标移到界面任何地方:
- 鼠标划过哪里,哪里就亮起红框
- 旁边小气泡告诉你:这块文字是什么类型、现在字号多大
- 点一下,原地弹出一个悬浮条,上面有 − 和 + 两个按钮,按一下字就变一次,所见即所得
- 调完点「完成」,或者按 ESC / 右键 / 点别处退出
点下去会发生什么,取决于那块文字的字号是怎么定义的,选取器会自动选最合适的调法:
| 你点的文字 | 悬浮条显示 | 调整范围 |
|---|---|---|
| 聊天正文、标题、行内代码、代码块 | “聊天正文 / 标题一 / 行内代码 / 代码块(文字类型)” | 同类文字全局统一变——聊天和轨迹视图里的正文是一套,改一处全都跟着 |
| 底部 LLM 用量条、用户气泡、各插件的边框标签 | “插件名 · 具体组件名” | 只动这一个组件——比如把用量条调大而气泡不动,完全可以 |
| 其他兜不到的 | “主界面(全局偏移)” | 跟全局滑杆走 |
比如你觉得聊天记录里的代码块字太小,但工具栏的按钮字又刚好——先点代码块加几个加号,再点工具栏单独减回去,互不影响。
每块界面单独微调
准星点过的区域会记在设置页的「按界面区域微调」列表里。这个列表其实包含了页面上所有带样式的插件,每行左边是插件名和一句话介绍(自动读自各插件自己的描述),右边是一个步进器:
[合计 +6] [−] ±0 [+] [✕]
所有区域的实际缩放 = 全局偏移 + 该区域的个体偏移,两者叠加。 左边的”合计”胶囊就是最终生效的数值。举例子:全局 +6 让整个界面变大,但你不想让代码区跟着变大——找到它那行,个体调到 -6,合计就是 0,代码区保持原样,其他地方照样 +6。
快捷键自己录
三个快捷键槽位,都在设置页里配,默认全部留空(不占任何键):
- UI 捕捉:召唤准星选取。为什么要自己设?浏览器和编辑器的搜索键基本都是 Ctrl+F 系,写死默认键太容易撞车
-
字号放大 / 缩小:按一下全局偏移 ±1px,随时调字号不用开设置。旁边有
Ctrl =/Ctrl -一键预填——用了之后浏览器同键位的页面缩放就被本插件接管(毕竟咱们的字号偏移就是浏览器缩放的精细替代品)
每个槽位都支持自由录制(点「录制」再按组合键,需含 Ctrl/Alt/Meta 之一)。
两个注意:设置面板本身会挡住后面的界面,正常用法是关掉设置再按快捷键;焦点在文件预览等 iframe 里时按键到不了主页面,点一下主界面再按即可。
描述从哪来
微调列表里每个插件那句话介绍,是插件自己 package.json 里写的描述(没有的话取 README 的标题)。插件升级换了描述,点「刷新」就是新的。
工作原理(给想了解的人)
这个插件不认识任何其他插件——它对”页面上有哪些插件、哪些字体”零先验知识,全部运行时自己发现:
- dsh 里每个界面插件的样式表都带
<style data-plugin="插件id">标记。遍历document.styleSheets按归属分组,就拿到了每个插件的字号规则 - 字号缩放走三条通道:官方设计令牌(
--dsw-font-*,在 body 上按”全局 + 该类型个体”重定义)、各插件写死的像素值逐条覆盖、以及单条规则级覆盖(准星点中某个具体组件时) - 系统字体列表和插件描述由插件的宿主半边提供两个本地接口(
/api/dsh-ui-font/fonts、/api/dsh-ui-font/descriptions),字体列表是直接解析字体文件读出来的,不依赖任何命令行工具 - 准星选取的判定:从点中的元素向上找最近的字号声明点——声明用的是设计令牌就调令牌(同类文字统一变),是写死的像素就精确到那一条 CSS 规则(只动这一个组件)。判定依据是规则原文里写的变量名,不是猜测
- 没有轮询、没有后台监视器。启动时扫一次(外加 1s/3s/8s 三次补扫收尾),之后只有你打开设置页或点刷新才会再扫
目录
dsh-ui-font/
├── package.json # dsh.bundle + dsh.client 声明(platform: web)
├── cordis.patch.yml # bundle 层插入行(ui-font)
├── lib/index.js # 宿主半边:描述 + 字体枚举路由(webServer)
├── lib/client.js # 浏览器半边:扫描引擎 + 令牌重写 + 设置页(settings.section)
├── images/ # README 截图(不随 npm 包分发)
└── CHANGELOG.md # 版本变更记录
安装 / 卸载
# 安装
dsh plugin --profile web add github:warmwine/dsh-ui-font
# 或本地开发
dsh plugin --profile web add link:<本仓库路径>
# 卸载
dsh plugin --profile web remove dsh-ui-font
安装/卸载后重启 dsh web。本插件零 bundled 依赖(宿主半边只用 Node 内置模块,
浏览器半边只依赖平台提供的 react),安装无需构建授权。
插件不捆绑字体文件;所选字体缺失时自动回退系统默认字体栈。
版本历史见 CHANGELOG.md。
已知边界
- dsh-ssh 的 xterm 网页终端用自己的内置字体,不参与缩放(准星悬停时会提示)
- 换肤插件(qq98 之类)激活时会接管字体变量,以皮肤为准
- 网页预览面板里 iframe 渲染的内容(比如预览一个网页)不是本页元素,准星选不到
License
MIT
Frequently Asked QuestionsFAQ
Use the verified command dsh plugin --profile default add github:warmwine/dsh-ui-font in a DSH-enabled shell. The command resolves the public package metadata and keeps the plugin attached to the catalog identity shown on this page.
Compatibility follows the bundle and profile status shown above. If a profile is not detected, keep the plugin disabled there and check the repository documentation before enabling it in production.
The GitHub link and activity metadata are the source of truth for releases and maintenance. Revisit this page after a new release to confirm the catalog has observed the latest version.

