Issue 114 - ShaoClean/Alune GitHub Wiki
Issue #114:代码主题与字体设置
- 类型:功能
- 状态:已实现,草稿 PR 待审阅;尚未发布
- Issue:https://github.com/ShaoClean/Alune/issues/114
- PR:https://github.com/ShaoClean/Alune/pull/116
- 最近更新:2026-09-28
- 代码基线:
3c3b2124042e7672019b4182accb879ba88bc769(基于ca925cd)
背景与目标
原文件浏览已有 Prism 语法高亮,但颜色复用界面变量,代码字体和字号写死。用户反馈的纯文本现象仍需结合其具体文件、版本和网络状态定位;不能将现有高亮等同于独立主题系统。本实现新增可配置的代码阅读体验,同时保留现有只读文件访问和降级边界。
方案
设置入口为「外观 → 代码阅读」,与现有设置样式一致。内置 Catppuccin Latte、Frappé、Macchiato、Mocha,浅色默认 Latte、深色默认 Mocha。提供代码字体、10–32px 字号、TypeScript/Python/JSON 示例预览及恢复默认。字体不可用时自动回退至系统等宽字体,行号和正文共享字体与行高。
沿用 initializeAppearance 解析 Alune 显式浅色/深色或跟随系统的实际模式;两种模式各保存一个主题 ID。选择列表禁用并解释不匹配主题,store 操作、配置读取和最终渲染也检查类型。安装只增加主题,不自动启用、不修改 Alune 外观。重置代码设置恢复 Latte/Mocha 与默认字体,保留已安装主题。
文件浏览和预览复用 CodeView。Prism 继续按语言生成 React token,主题通过 CSS 变量应用背景、前景、语法颜色/字形、行号和选区,不重新创建 token DOM。系统外观切换保留选区和滚动;进入设置后返回文件,通过按仓库/路径隔离、有界的内存缓存恢复滚动。偏好由原工作区存储通道保存,Web 为 localStorage,桌面为原子写入的 workspace.json;不修改工作区业务状态。
自定义主题兼容范围
首期支持最多 1 MB 的独立 VS Code Color Theme JSON / JSONC(含注释及尾随逗号),每设备最多 32 个。必须明确声明 type: "light" 或 "dark",并有可映射的 tokenColors 语法前景色。名称取 name 或文件名,来源展示文件名。仅保存归一化后的颜色、字形与元数据,不加载远程资源。
- 编辑器颜色:
editor.background、editor.foreground、editorGutter.background、editorLineNumber.foreground、editor.selectionBackground。支持十六进制 3/4/6/8 位颜色。 - 简单 scope:字符串、逗号分隔和字符串数组按最长已知前缀映射到 Prism 的注释、关键字、字符串、数字、常量、函数、类型、标签、属性、正则、变量、标点、运算符、增删类别。类别内同优先级后规则覆盖前规则;颜色和字形分别比较优先级。语言后缀映射为通用类别,因此不是完整 TextMate 语义。
- 字形:粗体、斜体、下划线、删除线及空样式重置。缺失颜色沿用对应默认主题;未支持的 scope/语义规则给出兼容提示。
- 不支持
.vsix、主题市场、include外部文件、上下文 scope 与 semanticTokenColors。Diff 不在本次字体/主题作用范围内。
主题安装失败有具体错误,保留原设置。恢复时重新验证主题数据,丢弃损坏项;缺失、错配、卸载的所选主题回退到对应内置默认值并提示。未知语言、大文件继续显示纯文本;高亮加载失败新增说明,仍可选择复制。
验收
- 主题、字体、字号与三种语言预览可用,并在本设备持久化。
- 四款 Catppuccin 无需安装,浅深色分类正确。
- 自定义主题可导入、选择、恢复、卸载,无效格式和类型有反馈。
- 深浅色选择、恢复和实际应用严格匹配,分别记住偏好。
- 跟随系统动态切换有效;显式模式不被系统变化覆盖。
- 损坏、缺失、卸载及错配配置有匹配默认值和提示。
- macOS 本地与真实 SSH 阅读一致;选区、滚动、设置返回、未知语言和大文件降级通过。
- Windows/Linux 原生桌面验收(当前环境未运行)。
详细命令、边界、截图与平台限制见 验证记录。
回退
删除代码外观偏好或点击恢复默认即可恢复对应内置主题。旧版本忽略新增 codeAppearance 字段;其写回设置可能移除该字段。Wiki 历史与代码分别维护。