dsh-ui-font:調整 DSH 界面字體的客戶端插件

前言

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
羽毛球分组比赛记分
小程序二维码

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

小夜