Releases: xykong/flux-markdown
Releases · xykong/flux-markdown
v1.12.136
新增功能
双模式显示 (Preview/Source Toggle)
实现预览模式与源码模式的快速切换功能。
QuickLook 预览:
- 右上角新增源码/预览切换按钮 (文档图标 ↔ 眼睛图标)
- 源码模式使用
highlight.js实现 Markdown 语法高亮 - 显示原始 Markdown 源码,支持选择和复制
- 快捷键
Cmd+Shift+M快速切换模式 - 切换模式时保持当前滚动位置
主应用:
- 添加与 QuickLook 一致的浮动按钮组 (源码 + 主题切换)
- View 菜单中新增 "Show Source/Show Preview" 选项
- 支持键盘快捷键
Cmd+Shift+M切换
用户体验优化:
- 源码视图留白最小化 (外层 padding: 0px, 代码块 padding: 6px)
- 表格内容 TOC 按钮下移 40px (top: 20px → 60px),避免与功能按钮重叠
- 等宽字体显示源码,适配浅色/深色主题
技术实现:
- 新增
ViewMode枚举管理当前显示模式 - 新增
window.renderSource()函数渲染带语法高亮的源码 - 新增
source-view.css样式文件
安装方式
Homebrew (推荐)
brew update
brew upgrade markdown-preview-enhanced手动安装
下载 DMG 文件,拖拽到 Applications 文件夹即可。
v1.11.130
Added
- 链接导航 (Link Navigation): 为 Markdown 文档添加完整的链接跳转支持。
- 主应用 (Main App):
- 外部 URL 链接 (http/https) 在默认浏览器中打开
- 相对路径链接 (`../file.md`, `./dir/file.md`) 正确解析并打开目标文件
- 页内锚点链接 (`#section`) 平滑滚动定位
- 支持所有文件类型 (`.md`, `.sql`, `.py`, `.json` 等)
- QuickLook 预览 (Preview):
- 由于 macOS 沙盒限制,所有链接点击时显示优雅的 toast 提示而非打扰用户的对话框
- Toast 位置: 顶部居中
- 自动关闭: 3 秒后淡出消失
- 非阻塞: 用户可继续浏览文档
- 防重复: 同时只显示一个 toast
- 提示文案: "QuickLook 预览模式不支持链接跳转 / 请双击 .md 文件用主应用打开以使用完整功能"
- 技术实现:
- 端到端桥接: JavaScript 通过 `window.webkit.messageHandlers.linkClicked` 将链接信息传递给 Swift
- 页内锚点: JavaScript 直接处理平滑滚动
- 文件路径解析: 支持相对路径、绝对路径、`file://` 协议等多种格式
- 日志增强: 所有链接点击操作记录到系统日志,便于调试
- 主应用 (Main App):
v1.10.127
v1.10.124
v1.10.119
[1.10.119] - 2026-02-09
Fixed
- WKWebView 进程泄漏: 修复 QuickLook 扩展中 WKWebView 进程累积导致严重内存占用问题。
- 问题表现: 预览多个 Markdown 文件时,会累积创建 30+ 个 "Web Content" 进程,每个进程占用 60-80MB,总内存占用达 2GB+。
- 根本原因:
- 缺少
WKProcessPool共享机制 - 自定义 URL scheme handler (
local-resource://) 阻止了进程共享(WebKit 安全设计) - WKWebView 没有被正确清理,导致 retain cycle 无法打破
- 缺少
- 解决方案:
- 添加共享的
WKProcessPool用于所有 WKWebView 实例 - 移除不必要的
local-resource://自定义 scheme handler(图片已通过 data URL 传递) - 在
viewWillDisappear和deinit中添加完整的 WKWebView 清理逻辑:stopLoading()停止所有加载- 移除
navigationDelegate和messageHandler引用,打破 retain cycle - 清理手势识别器
- 从视图层级移除并释放引用
- 添加共享的
- 修复效果:
- Web Content 进程数量从 30+ 降低到 1-2 个
- 总内存占用从 2GB+ 降低到 100-200MB
- 进程和内存占用保持稳定,不再累积
- 影响范围:
- QuickLook 扩展 (
PreviewViewController.swift) - 主应用 (
MarkdownWebView.swift) - 为一致性也添加了共享 process pool
- QuickLook 扩展 (
[1.9.118] - 2026-02-09
Fixed
v1.8.114
Added
- 页内搜索功能: 为主应用添加完整的页内搜索功能。
- 功能特性:
- ✅ 浏览器风格的搜索工具栏 (Cmd+F 触发)
- ✅ 实时高亮所有匹配项 (黄色背景)
- ✅ 当前匹配项特殊高亮 (橙色背景)
- ✅ 匹配计数显示 (如 "3/15")
- ✅ 上一个/下一个匹配导航
- ✅ 三种搜索模式:
- 普通搜索 (默认)
- 大小写敏感匹配 (Aa 选项)
- 全字匹配 (ab 选项)
- 正则表达式搜索 (.* 选项)
- ✅ 正则表达式错误提示
- 触发方式:
- Cmd+F 键盘快捷键
- View 菜单 → "查找..." / "Find..."
- 右键菜单 → "查找..." / "Find..."
- 国际化支持:
- 英文: "Find..."
- 简体中文: "查找..."
- 主题支持: 自动适配亮色/深色模式
- 注意: QuickLook 预览模式暂不支持搜索功能
- 功能特性:
Fixed
- Swift 编译警告: 修复
startAccessingSecurityScopedResource()返回值未使用的警告
v1.7.112
Fixed
-
APP 模式图片显示: 修复双击打开 APP 时本地图片无法显示的问题。
- 根本原因: 主 APP 缺少图片收集逻辑,且 macOS App Sandbox 限制了文件访问权限
- 解决方案:
- 在
MarkdownWebView.swift中添加collectImageData()方法(与 QuickLook Extension 保持一致) - 在
executeRender()中调用图片收集并转换为 base64 data URLs - 临时禁用 App Sandbox 以允许读取 Markdown 文件同目录下的图片
- 在
- 支持特性:
- ✅ 相对路径图片 (
./image.png,../image.png) - ✅ 绝对路径图片 (
/path/to/image.png) - ✅
file://协议图片 - ✅ 多种图片格式 (PNG, JPEG, GIF, SVG, WebP, ICO, BMP)
- ✅ 图片带标题 (
) - ✅ 特殊字符路径 (URL 编码自动处理)
- ✅ 相对路径图片 (
-
Base64 图片显示: ✅ 完全修复 Base64 内嵌图片(
data:image/...)无法显示的问题。- 根本原因分析:
- WKWebView 在沙盒环境中阻止 data: URLs
- markdown-it 的 URL 验证拒绝
data:image/svg+xml等复杂 MIME 类型(核心问题)
- 解决方案:
- 将
loadFileURL改为loadHTMLString(允许更灵活的内容加载) - 添加
allowUniversalAccessFromFileURLs配置到 WKWebViewConfiguration - 关键修复 A: 覆盖
md.validateLink方法,允许所有data:URLs 通过 markdown-it 验证 - 关键修复 B: 将 Base64 data URLs 转换为 Blob URLs(绕过 WKWebView 的 data: scheme 限制)
- 将
- 验证结果:
- ✅ Markdown 语法
- 完全正常 - ✅ Markdown 语法
- 完全正常 - ✅ HTML 标签
<img src="data:image/...">- 完全正常 - ✅ 支持所有格式:PNG、JPEG、SVG、GIF、WebP
- ✅ Markdown 语法
- 改进 TypeScript 图片渲染逻辑,明确区分三种图片类型:Base64 内嵌、本地文件、网络 URL
- 添加全面的单元测试覆盖所有图片类型(26 个测试全部通过)
- 增强日志输出,显示每个图片的处理过程,便于调试
- 根本原因分析:
-
图片显示: 修复多种图片路径无法显示的问题。
- 修复绝对文件系统路径(
/path/to/image)不显示的问题 - 修复上级目录相对路径(
../image.png)不显示的问题 - 修复图片带标题(
)不显示的问题 - 修复特殊字符路径(
image%20(1).png)不显示的问题 - 修复空格路径(
test images/test image.png)不显示的问题 - 实现方式:Swift 端收集所有图片并转换为 base64 data URL,TypeScript 端使用 base64 替换原始路径
- 修复绝对文件系统路径(
-
自动更新: 修复安装新版本时报错 "An error occurred while running the updater" 的问题。
- 使用正确的 Sparkle XPC 服务名称:
$(PRODUCT_BUNDLE_IDENTIFIER)-spks和$(PRODUCT_BUNDLE_IDENTIFIER)-spki。 - 之前使用的服务名
com.xykong.Markdown.Installer不符合 Sparkle 规范,导致更新器无法正常运行。
- 使用正确的 Sparkle XPC 服务名称:
v1.6.102
Fixed
- 自动更新: 修复了一系列更新相关的问题:
- 实现密钥迁移支持,允许从旧版本平滑更新,添加
SUPublicEDKeyChain数组同时包含新旧两个公钥 - 修复签名验证错误 "improperly signed",更新公钥以匹配新生成的 EdDSA 密钥对并重新签名所有更新包
- 修复安装时报错 "An error occurred while running the updater",使用正确的 Sparkle XPC 服务名称
- 修复安装时报错 "An error occurred while launching the installer",添加必要的沙盒权限并启用
SUEnableInstallerLauncherService - 修复手动检查更新无响应的问题,使用
SPUStandardUpdaterController替代手动组装的方式
- 实现密钥迁移支持,允许从旧版本平滑更新,添加
v1.5.87
Added
- 自动更新 (Auto Update): 实现混合更新策略,同时支持 Homebrew 和 DMG 安装用户。
- Homebrew 用户: 每周自动检查 GitHub API,发现新版本时提示运行
brew upgrade,一键复制更新命令。 - DMG 用户: 集成 Sparkle 2.8.1 框架,每天自动检查更新,支持 EdDSA 签名验证,自动下载安装。
- 智能检测: 自动识别安装方式(Homebrew Caskroom vs 手动 DMG),应用对应的更新策略。
- 安全验证: 使用 EdDSA 签名确保更新来源可信,私钥存储在
.sparkle-keys/(已加入.gitignore)。 - 自动化发布:
make release命令现在自动生成 Sparkle 签名、更新appcast.xml、更新 Homebrew Cask。 - 新增脚本:
generate-sparkle-keys.sh(密钥生成)、generate-appcast.sh(appcast 生成)。 - 新增文档:
docs/AUTO_UPDATE.md完整使用指南。
- Homebrew 用户: 每周自动检查 GitHub API,发现新版本时提示运行
Changed
- 项目结构 (Project Structure): 重组项目目录结构,提升可维护性。
- 将所有文档整理到
docs/目录:docs/features/(功能文档)、docs/testing/(测试文档)。 - 将所有测试文件整理到
tests/目录:tests/fixtures/(测试样本)、tests/scripts/(测试脚本)。 - 合并相关文档:将
ZOOM_FEATURE.md、ZOOM_STATUS.md、QUICK_START_ZOOM.md合并为docs/features/ZOOM.md。 - 更新所有文件引用路径,确保文档和脚本中的路径正确。
- 根目录现在只保留核心项目文件(README、Makefile、配置文件等)。
- 将所有文档整理到
Added
- 预览 (Preview): 实现实时文件监控和自动刷新功能。
- 使用
DispatchSource监控文件系统事件(写入、删除、重命名)。 - 当文件被外部编辑器修改时,预览自动更新内容,无需手动关闭并重新打开。
- 保留滚动位置和缩放级别,提供流畅的用户体验。
- 正确的生命周期管理,确保资源清理和内存安全。
- 使用
v1.4.81
Added
- 预览 (Preview): 添加缩放功能。
- 支持键盘快捷键:
Cmd +(放大),Cmd -(缩小),Cmd 0(重置)。 - 支持触控板/鼠标滚轮缩放:按住
Cmd键并滚动。 - 支持双指拉伸缩放:使用触控板双指拉伸手势进行缩放。
- 缩放范围:0.5x - 3.0x。
- 自动保存缩放级别,下次打开时恢复。
- 支持键盘快捷键:
- 安装 (Installation): 实现完全自动化的安装过程。
install.sh脚本现在自动设置应用为.md文件的默认处理程序。- 自动移除隔离属性 (
xattr -cr)。 - 自动启动应用完成 QuickLook 扩展注册。
- 支持
make install debug命令安装调试版本。 - 使用
duti(如果可用)或 LaunchServices API 设置文件关联。 - 添加
install,dmg,release,delete-release伪目标。 - 增强
app目标,添加构建日志和指定 arm64 架构。 - 支持自动检测和构建调试/发布配置。
Changed
- 文档 (Documentation): 更新安装说明,移除需要用户手动设置默认应用的步骤。
- 强调安装过程已完全自动化。
- 添加
make install debug命令说明。