主题
Marksmith 墨匠 发版记录
结构感知、本地优先的 Markdown 桌面工作台:删除也有语义
0.4.2 — 2026-10-20
打开项目 / 文档后命令行黑框一闪
- Windows 的 GUI 子系统进程没有控制台,启动
git.exe/mmdc(.cmd)/ headless 浏览器这类控制台子程序时,系统默认给子进程新建一个可见控制台窗口。Git 面板每 1.5 秒轮询一次git status,所以一打开项目或文档就不断有黑框闪一下;打开文档时applyLoaded也会立刻refreshGit - 新增
services::hide_console_window(Windows 加CREATE_NO_WINDOW 0x08000000,非 Windows 空操作),git / mmdc / headless 浏览器三处 spawn 统一调用 - 验证:同类 GUI 父进程起控制台子程序,不加标志时子进程
GetConsoleWindow()!=0,加标志后为 0;0.4.2 release 打开 README 后 12 秒内轮询 19 次 git,可见控制台窗口为 0;cargo test71 项、e2e smoke 18 步、screenshot 14 张全过 - 本站验收:安装包静默安装 → 注册版本 0.4.2 → 对已安装的 exe 跑
release-smoke(18 步全过)→ 静默卸载,安装目录已清空
0.4.1 — 2026-10-13
修「点 X 关不掉程序」,并把「保存」这条路放进关窗确认里
用户反馈的是三件事:「关闭时报错」「无法保存文件」「无法不保存退出」——三条出在同一个关闭路径上。
- 窗口关不掉:关闭请求由前端
onCloseRequested接管,确认之后要靠destroy销毁窗口,而 capabilities 里漏了core:window:allow-destroy(core:window:default不含它,只有allow-set-title这类只读权限)。结果是点标题栏 X 不会关:没有未保存修改时完全没反应;有修改时点了「放弃修改并关闭」同样原地不动,控制台只留一句window.destroy not allowed。权限是编译期写进二进制的,补齐后要重新构建后端 - 关窗前能保存了:原来的关闭确认走系统
confirm,只有「放弃修改并关闭 / 继续编辑」两个按钮,用户在关窗前没有保存这条路——这正是「无法保存文件」的来源。现在换成本应用内三选一:保存并关闭 / 不保存并关闭 / 继续编辑(Enter保存并关闭、Esc继续编辑);保存失败、或「另存为」被取消时窗口保持打开,原因写到状态栏,而不是把窗口卡在那里 - 不再丢最后一击键:编辑器到文档 store 的同步有 200 ms 防抖,在这一窗口内点 X 会因「还没有未保存改动」直接关掉;现在关闭 / 换文档前先 flush 待同步的改动
- 写盘入口排队等上一次写盘落地,避免「保存并关闭」撞上自动保存(或连点两次保存)时被静默丢掉
- 补 e2e:行为走查第 11 步发真实
WM_CLOSE,走通「继续编辑 → 窗口还在且仍是脏的」「保存并关闭 → 内容落盘 + 进程退出」「不保存并关闭 → 进程退出且不写盘」「保存失败后仍能退出」,发布产物上也走一遍关窗;视觉走查加入这张弹窗截图(13 → 14 张);顺带修掉 e2e 在 Windows 上自起 Vite 失败(bun是bun.cmd,spawn直接调用报 EINVAL)
0.4.0 — 2026-10-08
把「结构还原」的适用范围补全
- 代码块里的裸源码现在也能还原:
language=mermaid的代码块(从别处粘来、或围栏输入规则没触发时留下的形态)内容里没有围栏,上一版识别不到、右键没有入口;现在按语言判断并自动补围栏后解析 - 段里夹着源码时给引导:整段不是源码、但里面夹着表格或围栏源码时,右键会出现一条「还原为结构(先选中源码)」的提示项,选中那几行再右键即可还原
- 补测试:单元测试 9 条(识别规则、语言判断、裸 mermaid 自动补围栏、反例),端到端加 2 条,冒烟从 16 步增到 18 步
0.3.0 — 2026-10-08
补上「结构还原」:按文本合并不再是单向门
- 原本「删除意图 → 按文本合并」把表格 / 图表降级成一段 Markdown 源码后,界面上再没有任何入口把它变回结构
- 现在在源码上右键 →「还原为表格 / 还原为图表 / 还原为代码块 / 还原为公式」,走 Markdown 往返管线解析后原位替换;可识别 GFM 表格(含带冒号的对齐行)、
```mermaid围栏、其它围栏与块级$$…$$,普通段落不会误出这个入口 - 合并后的弹窗会提示「已按文本合并并保留 Markdown 源码;在这段源码上右键可选『还原为表格 / 图表』」,让用户知道这不是终点
0.2.1 — 2026-10-08
修掉行为测试暴露的三个用户可见缺陷
- 光标在正文里时全局快捷键失效:
Ctrl+N/Ctrl+O/Ctrl+Shift+F全都不响应——判断「焦点在输入框里就让位」时把可编辑的正文也算成了输入框;现在只让给真正的表单控件 - 窗口标题永远不更新:缺
core:window:allow-set-title权限,标题栏既看不到文件名也没有「已修改」标记;补齐权限并让网页标题与原生标题同步 - 状态栏图表缓存计数滞后:渲染出新图表后计数不动;改为 Rust 侧广播
render-cache-changed、前端订阅即时刷新(不轮询、不重载) - 行为测试补齐:新增编辑器行为走查(10 步)、浮层与菜单走查(16 步),视觉走查扩到 13 张截图
0.2.0 — 2026-10-08
菜单、最近文件与几处细节修补
- 新增自绘右键菜单:链接 / 图片 / 图表 / 公式 / 表格 / 文本各有专属动作,删除类动作继承「删除意图」语义不再二次询问;非编辑区屏蔽 WebView2 原生菜单,输入框里仍保留系统菜单
- 新增最近文件:侧栏只列最近 5 个,「更多最近文件」窗口支持按文件名 / 路径筛选、打开、单条移除与清空
- 修字号设置写错作用对象:设置显示 16px、正文实际却是 15px(设置写在容器上靠继承,被
.ProseMirror的固定字号覆盖);改走 CSS 变量--ms-doc-font-size,改设置立刻生效 - 修浮动菜单跑出屏幕:气泡菜单 / 表格菜单贴边时用「锚点中点 + 居中位移」定位,锚点靠顶或靠边就出界;统一走
placeFloating(偏好侧 → 放不下翻转 → 夹进视口),纯函数部分有单元测试 - 修导出菜单文案折行,并把实现术语(
headless)换成用户能懂的输出格式.html / .pdf / .md - 端到端基建:Vite 忽略
tests/(e2e 写轨迹不再触发整页重载)、多实例按端口分配独立 WebView2 数据目录,脚本可并行跑
0.1.0 — 2026-10-08
第一个可用版本:结构感知的 Markdown 编辑
- 桌面壳与文件读写:打开 / 保存 / 另存,窗口与最近文件
- Markdown 往返保真:没有改动的块逐字节保留原始源码,只有改动块重新序列化
- 块级所见即所得(TipTap 3 + ProseMirror):标题、列表、任务列表、表格、公式直接在编辑区渲染
- 删除意图解析器:在表格 / 列表 / 代码块 / 图片等结构边界按 Backspace、Delete 时弹窗选择删除语义(删字符 / 删整块 / 拆结构),不让用户猜
- 图表:Mermaid 本地渲染 + Rust 磁盘缓存(按「类型 + 主题 + 内容哈希」缓存),带防抖、超时与错误回退
- 图片:原始清晰度显示、点击进灯箱(滚轮 10%–1000% 缩放、可拖拽平移),粘贴/拖放的内容按内容寻址落盘
- 导出:单文件 HTML(内联 CSS 与 SVG)与 PDF(调用本机 Edge / Chrome 无头打印)
- Git 集成走本机命令行:状态、分支、领先/落后、变更列表、diff 与提交
- 主题与设计系统:浅色 / 深色 / 跟随系统,样式令牌与原语集中在
src/styles/ - 验证:前端单元测试 66 个、Rust 单元测试 68 个
与设计有意不同的地方
以下几条是明确不做,不是待办:PlantUML(不引入 Java 依赖)、shadcn-svelte(改用自研原语)、 独立预览面板(编辑器本身即所见即所得)、「光标行显示完整 Markdown 标记」(与输入法/选区语义冲突)、 Git 走 git2 库(改用命令行)。
下载
- Marksmith_0.4.2_x64-setup.exe —— 6.5 MB,Windows 10/11 安装包(NSIS,当前用户安装,带
.md/.markdown文件关联),SHA256eafa6d98…4ecf6892
未签名
个人项目、没有代码签名证书:安装包首次运行可能被 SmartScreen 拦一下(「更多信息 → 仍要运行」即可); 浏览器下载后若带「来自 Internet」标记,介意的话对文件跑一次 Unblock-File。