EaseInk, release by release.

This page is generated from the desktop project's changelog so product history stays aligned.

Changelog

Unreleased

0.1.25 - 2026-08-22

编辑

  • 左侧大纲连接线改为细的 L 型父子连线:每个目录只横向连接到自己的直接下一级;当某个下级展开时,父级通往后续同级目录的竖向续线会穿过展开子树,但不会向更深层后代画横向分支。每个子目录都有输入连接,最后一个子目录以轻微圆角收尾;可展开目录的输入线终点与箭头中心对齐,当前目录高亮只覆盖标题文字,不再横跨左侧连线。
  • 「格式」菜单新增「下划线」,快捷键 Ctrl/Cmd+U;选中文本会写为 Markdown 兼容的 <u>...</u>,CodeMirror 与 ProseMirror 两条路径都会隐藏标签并渲染为下划线。
  • 新增 ==高亮== 支持。这是 immersive Markdown editor 的扩展语法,CommonMark 与 GFM 都没有定义,此前 == 会原样显示;现在由 EaseInk 自带的 lezer-markdown 行内解析扩展提供,两条引擎路径(CodeMirror 实时渲染与 ProseMirror 原生 highlight mark)共用同一份定义。== 分隔符与其他 marker 一样在离开时折叠,光标进入时暴露。
  • 「格式」菜单新增「高亮」,快捷键 Ctrl/Cmd+Shift+H;HTML、PDF 与 Word 导出同步输出高亮,不再回退成字面量 ==
  • a = bx == y== 两侧留空 ===== 不会被误判为高亮。

主题

  • 新增沉浸式 [Mdmdt](https://theme.immersive Markdown editorio.cn/theme/Mdmdt) 主题的 Mdmdt(浅色)与 Mdmdt Dark(深色):#FAFAFC / #1B1B1F 画布、#ECECEE / #282A32 内容面,以及贯穿链接、列表符号、引用左线和行内代码的 #3E69D7 蓝色强调;上游主题按系统模式自动切换明暗,EaseInk 将其拆成可分别选择的两套主题。
  • 新增沉浸式 [Lapis](https://theme.immersive Markdown editorio.cn/theme/Lapis) 主题的 Lapis(浅色)与 Lapis Dark(深色):#4870AC / #8393AD 蓝调标题、链接与行内代码,#A2B6D4 / #7D8A9F 列表符号,以及该主题标志性的 H2 蓝底反白填充标签。
  • Lapis 浅色主题的引用块改为参考图样式:#F6F8FA 无圆角整块背景、4px 宽 #4870AC 左侧色块,以及左右 24px、上下 9px 文字内边距;连续引用行无缝连接,块内鼠标拖选使用可见的 #F4DCBF 选区,引用底色、选区与文字分层绘制以保持文字可读,HTML/PDF 导出同步使用该外观。
  • 主题总数由 16 套(8 浅 + 8 深)增加到 20 套(10 浅 + 10 深),菜单仍按「浅色组 → 分隔线 → 深色组」排序。
  • 文字选中底色和 ==高亮== 底色现在统一按主题生成。GitHub 的高亮改为协调的浅蓝 #DDF4FF 配正文色 #1F2328Lapis 使用 #4868D0(RGB 72, 104, 208)高亮底和 #F4DCBF(RGB 244, 220, 191)沙色鼠标选中底。其余主题默认由强调色派生,测试遍历注册表守住高亮文字对比度下限。
  • Mdmdt 的链接现在带上游主题的锁链图标,并在悬停时转为 #F59102 琥珀色;图标以 currentColor 遮罩绘制,一份资源同时适配明暗两版与悬停态。

修复

  • 修复主题已写入 --selection-bg、但默认 ProseMirror 编辑器未把它用于鼠标文本选区的问题;CodeMirror 普通文本、代码块与源码模式的选区也统一使用该变量。
  • 使用 H2 填充样式的主题(Amber Ledger、Lapis、Lapis Dark)在光标停留于 H2 所在行时,不再被编辑器的活动行透明规则打穿出一条断带。
  • 点击左侧大纲节点现在只把目标标题滚动到编辑区顶部,不再把光标移动到标题处,避免跳转后在标题旁出现异常尺寸的闪烁光标。

0.1.24 - 2026-08-21

编辑

  • 「正文」(把标题降回普通段落)新增快捷键 Ctrl/Cmd+Alt+0。此前该命令只有菜单项没有快捷键——裸的 Ctrl/Cmd+0 已经是「实际大小」(缩放重置),不能占用;Alt+0 的组合取自 Google Docs 的 Normal text。
  • 有序列表新增 Ctrl/Cmd+Shift+7、无序列表新增 Ctrl/Cmd+Shift+8(与 Google Docs / Word 一致,比方括号好记,也避开了某些键盘布局上 [ ] 本身就要带修饰键的问题)。原有的 Ctrl/Cmd+Shift+[Ctrl/Cmd+Shift+] 继续有效。

主题

  • Amber Ledger 的 H2 标题现在使用浅灰整行分区背景和左侧琥珀色块,以贴近参考图中的履历/条目分组样式。

修复

  • 实时渲染下的裸链接(https://example.com)、尖括号自动链接(<https://example.com>),以及粘贴网址生成的 [网址](网址),都不再整段消失:此前所有 URL 语法节点都被无条件折叠,但只有链接/图片的目标才有可见的替身(链接文字、图片);裸链接挂在 Paragraph 下、尖括号形式挂在 Autolink 下,而 [网址](网址) 的链接文字本身也是一个 Link 名下的 URL 节点。现在按位置识别目标——只折叠紧跟在 ]( 之后的那个 URL。

0.1.23 - 2026-08-21

改进

  • 重复打开同一个磁盘文件时(文件关联、最近文件、打开对话框、工作区文件树或本地 Markdown 链接),EaseInk 现在会恢复并聚焦已有文档窗口,不再默认创建第二个独立编辑副本,避免两个窗口互相触发外部变更和保存冲突。

0.1.22 - 2026-08-21

修复

  • 文件树行现在可获得键盘焦点,选中文件或目录后按 F2 会直接进入内联重命名,与右键菜单共用同一校验和提交流程。
  • 长 Markdown 文档的右侧竖向滚动条改为 EaseInk 自绘 overlay,拖动 thumb 时直接驱动实际编辑器滚动层的 scrollTop,避免原生滚动条在长文档或页面缩放下移动慢于鼠标。
  • 点击左侧大纲节点时,目标标题现在一次性滚动到编辑区顶部并只保留必要留白,而不是贴在视口底部、被顶部遮挡、露出上一行残留内容或落位后再二次跳动,减少跳转后还要继续手动滚动的情况。
  • 选中文本触发的相同内容高亮现在会忽略选区首尾空白;纯空白选区不再产生关联高亮。
  • 修复 Windows/Electron 下编辑器右侧同时露出原生滚动条轨道/按钮和 EaseInk 自绘 thumb 的“双影子”问题;竖向原生 scrollbar 现在完全隐藏,只保留自绘滚动条。
  • 更新 DOMPurify 与 Mermaid 的锁定版本,清除当前生产依赖安全审计中的中危公告。

0.1.21 - 2026-08-04

修复

  • 修复简体中文 Windows 安装器的匿名统计同意页显示 {cm:TelemetryConsent…} 占位符:自定义向导页改由 Inno Setup Pascal Script 的 CustomMessage() 按当前语言读取标题、说明和选项,并新增回归测试防止未展开的本地化常量再次发布。

0.1.20 - 2026-08-03

修复

  • 修复中文 Windows 上安装向导仍显示英文:安装器现在按 Windows 显示语言自动使用官方简体中文或英文资源;自定义的匿名统计同意页也已完整本地化。

0.1.19 - 2026-08-02

界面

  • 状态栏右下角新增当前缩放百分比,菜单、快捷键和 Ctrl + 鼠标滚轮 缩放会实时更新显示。
  • Ctrl/Cmd+F 查找现在高亮全部匹配结果,并以深蓝底白字显示当前结果。
  • 修复 Windows 任务栏右键菜单显示「Electron」:除在主进程设置 EaseInk 运行时名称及专属 AppUserModelID 外,开发启动器与 npm start 还会启动写入 EaseInk 版本资源的 Electron 副本,开发目录和发布包均显示 EaseInk。
  • 「帮助」菜单新增 What's New(EaseInk 下载页)与「官方网站」入口,均使用系统浏览器打开。

0.1.18 - 2026-07-31

界面

  • 「帮助 ▸ 关于」窗口移除个人作者署名,保留版本和官方网站链接作为产品信息入口。
  • Gruvbox Light 更换为白底深蓝配色体系,覆盖标题、链接、代码面、表格、大纲、状态栏与语法高亮。

数据安全与同步

  • 干净文档在被云同步客户端、AI 工具或其他编辑器改写后会自动热重载;有本地修改时可选择比较、保留、重载或三方合并。
  • 三方合并仅自动应用互不重叠的改动;重叠改动保留为清晰的冲突标记,避免任何静默内容丢失。

导出

  • 新增原生 Word .docx 导出:保留 Markdown 的标题层级、加粗/斜体/行内代码、列表、引用、表格、代码块、页面尺寸与页码;本地图片会嵌入文档。

0.1.17 - 2026-07-26

内部架构

  • ProseMirror 现为正式默认富文本引擎:已映射的段落、标题、行内格式和列表使用原生 DOM、选区与事务;文档含未迁移的复杂 Markdown 构造时,会在加载或从源码模式返回时无损切回既有 CodeMirror 富文本路径。EASEINK_EDITOR_ENGINE=codemirror 保留为兼容性覆盖。

安全

  • 将 DOMPurify 升级至 3.4.12,消除发布前生产依赖审计发现的已知漏洞。

修复

  • Windows 与 macOS 打包现在显式携带主进程加载的 src/editor/engine-selection.cjs;此前发布脚本遗漏该本地模块,会使采用 ProseMirror 默认引擎的安装版无法完成启动。新增 Windows/macOS 打包契约和便携 ZIP 负载守卫。

迁移阶段记录(已完成)

内部架构

  • 加入尚未接入正式 UI 的 ProseMirror 源码保真基础层:原始 Markdown 继续作为唯一持久化数据,真实同块文本 transaction 转换为 revision-checked 最小源码补丁,未知结构保持 opaque 原文;当前可见编辑器和全部 UI 仍使用原 CodeMirror 路径。
  • 加入仅供测试和未打包开发启用的真实 ProseMirror DOM 路径(EASEINK_EDITOR_ENGINE=prosemirror):普通段落/ATX 标题编辑、history、源码模式和 composition 已接入 raw store;CodeMirror 的 LF 坐标通过源码桥映射回原始 CRLF/LF,跨块或结构事务在零写入后自动回退。正式打包仍默认 CodeMirror,未增加任何 UI。
  • ProseMirror 开发路径新增原生加粗、斜体、删除线、行内代码 mark,以及标题 1~6/正文节点命令;菜单、快捷键和主题视觉保持原 EaseInk 交互,事务只改写精确 Markdown 分隔符或标题前缀。空选区、链接和复杂结构继续在保留原选择区后安全回退 CodeMirror,正式默认引擎不变。
  • ProseMirror 开发路径新增原生无序、有序、任务与两空格嵌套列表:列表切换、Enter/Backspace、Tab/Shift+Tab 和任务 checkbox 均使用原生事务,提交前预演最小源码补丁并重解析校验,保留原 marker、编号分隔符、任务大小写、缩进与 CRLF/LF;松散/多段落列表和复杂嵌入块仍零写入回退 CodeMirror,正式默认引擎与 UI 不变。
  • 修正 ProseMirror 列表安全边界:未触及的显式有序编号不再被归一化,懒惰续行整块保持 opaque,非首项行首 Enter 精确定位当前项;提交前等价校验纳入 marker/delimiter。首项 Tab、顶层 Shift+Tab、被安全校验拒绝的 Enter/Backspace/Tab 和产生歧义 Markdown 的列表命令会携带精确源码选择区,在同一次操作中回退并重放 CodeMirror;隐藏 mark 边界不再落入 closing marker,任务 checkbox 点击保持编辑器焦点。

编辑

  • 中文 IME 组合输入期间,EaseInk 同时冻结 WYSIWYG 装饰重建与拼写检查 DOM 重扫;五笔、微信输入法等候选确认后,焦点和已提交文字保持稳定。

0.1.16 - 2026-07-14

界面

  • 底部状态栏改版:左下角「模式切换」按钮改为显示当前模式名——富文本模式显示「<> 富文本模式」、源代码模式显示「<> 源代码模式」(两者均带 <> 前缀、统一使用等宽字体),点击在两种模式间切换(快捷键仍为 Ctrl/Cmd+/,「视图」菜单沿用「源代码模式」名称)。左下角不再显示「就绪」与主题名。字数统计移到右下角,带一个柱状图图标,显示千分位分隔的「N 字符」。

编辑

  • 修复 YAML 元数据面板渲染后 key(如 title/date)不显示的问题:key 单元格为收缩宽度(width:1%),其内的 width:100% 输入框被压成近零宽导致 key 不可见。现将 key 渲染为纯文本、value 为完全无边框的内联输入。
  • YAML 面板在富文本模式下就地编辑:点击 key 或 value 均可直接修改不切换为源代码视图、不显示原始 ---/Markdown 标记、也不出现输入框边框(连聚焦描边都去掉)。key 输入按内容自适应宽度(field-sizing + size 兜底),无新增/删除字段控件。
  • YAML 面板的保留行(如 tags: 下的 - Kafka 列表项、嵌套映射、注释)也改为可就地编辑的无边框输入,按原文逐字改写该行。整个单元格显示文本 I-beam 光标,点击短 key(如 tags)右侧的空白区域也会聚焦该输入框,不再出现"悬停无光标、无法修改"的死区。
  • 源代码模式下,行号使用等宽字体、字号比正文小 2px。
  • 修复打开文件后第一次按 Ctrl/Cmd+/ 不切换源代码模式(有时要按两次)的问题:打开文件时编辑器有意保持未聚焦(不在开头显示光标),而该快捷键由 CodeMirror 键位映射处理、只在编辑器聚焦时才生效。现新增文档级兜底监听:编辑器未持有光标时,Ctrl/Cmd+/(源代码模式)与 Ctrl/Cmd+Shift+1(大纲)也能在文档层生效;编辑器聚焦时仍由 CodeMirror 处理,二者不会重复触发。

0.1.15 - 2026-07-11

质量

  • 修复 Windows 上自动化测试窗口被其他窗口完全遮挡时,Chromium 暂停 requestAnimationFrame、导致大纲滚动同步场景等待 120 秒超时的问题;仅在 EASEINK_TEST=1 时禁用遮挡窗口后台节流,正式应用行为不变,并新增静态回归契约。

编辑

  • YAML Front Matter 面板支持直接编辑顶层 key/value、新增和删除字段,全程不显示 --- 或原始 YAML;空/重复 key 不写回,嵌套、列表、注释与多行值作为保留行原样保存。
  • 标题、引用和水平分割线在非源码模式下直接编辑可见内容,光标进入后也不再暴露 #>--- 等块级结构标记。
  • 公式块从段落菜单插入时自动保证 $$ 独占行,选区可直接包入块中,输入 LaTeX 并离开后正常渲染。
  • 「段落」菜单新增「列表缩进」子菜单(增加 Ctrl/Cmd+]、减少 Ctrl/Cmd+[)和「脚注」;脚注自动编号、追加文末定义,非源码模式渲染可跳转上标并支持 HTML/PDF 导出。
  • 表格列宽可拖拽调整(渲染视图):鼠标移到表头列边界拖动即可改变该列宽度。首次拖动会冻结当前布局(切 table-layout:fixed 并快照各列当前宽度)再调整。宽度仅在会话内有效、不写回 Markdown(GFM 无列宽语法),编辑单元格触发表格重建即恢复默认。
  • 新增英文拼写检查:编辑器对英文单词做拼写检查(红色波浪线 + 右键建议/添加到词典),基于 Chromium/Electron 内置拼写检查器(en-US)。可在「文件 ▸ 偏好设置... ▸ 常规」中开关,默认开启,设置持久化到 settings.json
  • 修复 Markdown 图片从源码编辑态恢复为渲染态时短暂闪回“图片加载中…”的问题:当前文档内复用已加载图片的解析结果和尺寸,点击离开图片后立即保持 loaded 渲染状态。

界面

  • 「文件 ▸ 属性」改名为「文件 ▸ 偏好设置...」,并新增快捷键 CmdOrCtrl+,(Windows/Linux Ctrl+,、macOS Cmd+,),与其他菜单项右对齐同列。注:中文 Windows 上系统会把逗号键名显示为「逗号」(Chromium/Windows 本地化按键名、无法逐项改显示文字),在「与其他快捷键对齐」与「字面显示 Ctrl+,」冲突时按用户选择优先保证对齐。

  • GitHub 主题代码块背景再调浅一档:#F5F5F5#F8F8F8(仍为中性灰,边框与其余配色不变)。

  • 打开文件时不再把光标自动停在文档开头:编辑器保持未聚焦、不显示光标,由用户首次点击决定落点;新建空白文档与会话恢复仍保持聚焦以便直接输入。

  • 大纲缩进与竖线按实际结构深度(真实祖先数量)计算;每个真实祖先列都保留引导线,因此只有一个下层节点时也能清楚显示父子连接。全 ### 文档仍平铺顶层,跳级标题只缩进一个真实层级。

  • 偏好设置「常规」页改为现代设置排版:分区小标题(「界面」/「校对」)+ 每项左侧标题与说明文字、右侧控件;英文拼写检查开关改用 iOS 风格拨动开关(开为强调色),界面语言的中英文单选移到行右侧,并为每项补充说明文案。

  • 文件夹工作区的目录和文件行新增跟随主题前景色的 SVG 图标:目录显示文件夹轮廓并保留展开箭头,文件显示文档轮廓,整体更接近系统文件列表。

  • 大纲滚动同步高亮:浏览正文时随滚动条移动,即使不把光标点进正文,左侧大纲也会在当前视口所在章节上高亮(效果同点击后)。基于 CodeMirror 高度图实现(lineBlockAtHeight)、不做逐标题 DOM 测量,大文档也不卡;与既有光标高亮共用一套 active 计算,滚动与点击互不抖动。

  • 修复文件树重命名(及新建/删除)后文件树“闪一下”:renderTreehost.innerHTML="" 再异步 listDir 重填,中间文件行短暂消失。改为离屏(DocumentFragment)构建整棵树、填充完成后一次性 replaceChildren 原子替换,中途不再出现空树。

  • 文件树支持右键新建文件/文件夹、重命名、删除到系统回收站:新建/重命名在树内直接内联输入(回车确认、Esc 取消),删除经 shell.trashItem 进回收站可还原;所有写操作在主进程侧经 resolveInside 校验位于工作区根内。命中当前打开文档的重命名会同步窗口标题与最近文件。

  • 侧边栏底部「文件树」切换图标由彩色 emoji(黄色文件夹 🗂️)改为跟随主题前景色的灰色线性 SVG 图标。

  • 文件树自动定位:窗口已打开文档而尚无工作区时,侧栏文件树自动把文档所在目录设为工作区并高亮当前文档,无需再手工「打开文件夹」;已有工作区(含恢复的会话)不受影响。「打开文件夹…」对话框也在已打开文档时默认定位到该文档所在目录(此前总是从系统默认位置开始)。

  • 文件树的目录名/文件名字号改小(继承的 16px → 13px,与大纲视图一致),行距增大(1.7),信息密度与可读性更接近 immersive Markdown editor 侧栏。

  • 文件树区分目录与文件:目录行左侧显示跟随主题前景色的展开箭头(三角形,展开时旋转 90°)且名称字重加粗,文件行保留等宽占位以对齐名称、不显示箭头,一眼可辨目录还是文件。

安装

  • Windows 安装向导新增「为所有用户 / 仅为我」选择(Inno Setup PrivilegesRequiredOverridesAllowed=dialog):选「为所有用户」默认装到 C:\Program Files\EaseInk(触发 UAC 提权),选「仅为我」默认装到 %LocalAppData%\Programs\EaseInk(无需管理员);Markdown 文件关联由 HKA(HKEY_AUTO)随所选范围写入 HKLM 或 HKCU。

0.1.14 - 2026-07-06

修复

  • 修复 Windows 安装版(及 macOS 包)启动即崩溃 Cannot find module 'chokidar'main.js 在 Electron 主进程 require('chokidar'),但打包脚本只暂存手选文件、从不复制 node_modules,而渲染进程依赖是被 esbuild 内联进 dist/renderer.js 的,故主进程运行时依赖缺失。新增 scripts/copy-runtime-modules.js 递归复制 chokidar 及其传递闭包(readdirp)到 resources\app\node_modules(macOS 为暂存目录),Windows/macOS 打包脚本均已接入;并新增快速回归测试与打包产物负载守卫。
  • 修复主题契约测试在 Windows(CRLF 检出)下误报 dark mismatch for githubproject.test.js 解析 themes.js 的 dark 标志时用 \{\n 硬编码 LF,遇到 {\r\n 全部匹配失败致 paletteDark 为空;改用 \{\s* 兼容行尾,漂移检测不变。
  • 修复打包冒烟测试(tests/full/release.test.js)在盘符路径下 tar: Cannot connect to D: resolve failed:Windows bsdtar 把 D:\...zip 当作 rsh host:path;改用 PowerShell Expand-Archive 解压。此测试现能真正启动打包后的应用验证 chokidar 加载(此前 0.1.13 因跳过 test:full 而未暴露该门禁缺陷)。
  • 调整 GitHub 主题代码块视觉:代码块背景改为 #F5F5F5 中性灰;JSON 语法高亮使用专门配色(标点 #1F2328、键名 #0550AE、字符串 #116329、数值 #953800、布尔/null #CF222E),并新增静态契约测试锁定这些色值。
  • 彻底修复选区高亮与点击坐标的"漂移/抖动":当文档中存在水平分割线(---)或原始 HTML 块(如 README 顶部居中 Logo)时,其 CSS 垂直外边距(.cm-md-hrmargin: 13px 0 12px.cm-md-html-blockmargin: 8px 0)对 CodeMirror 高度测量不可见,导致该元素之后全文档的 posAtCoords 坐标映射与 drawSelection 选区层整体下移——典型表现为选中两行文本却高亮三行、点击/拖选落到相邻行。现改为等效的盒内布局:分割线为 26px 高的 padding 行盒(1px 规则线由脱离文档流的 ::after 绘制,颜色仍随主题),HTML 块外边距改为内边距,视觉完全不变而测量精确归零。
  • 新增端到端回归测试(分割线 + HTML 块下方两行选区的高亮矩形与坐标往返映射)与静态契约守卫(禁止 theme.css 及插件主题对 .cm-line / 块级组件声明非零垂直外边距),防止此类问题复发。
  • 顺带修复:水平分割线颜色此前在所有主题下都停留在浅灰默认值(主题的 borderTopColor 覆盖与基础主题同特异性、层叠平局落败);现经 paintChrome--md-rule CSS 变量下发,真正跟随当前主题(如 Dracula 下为 #44475a)。
  • 修复测试钩子:文件菜单新增「打开文件夹…」后,「打开最近文件」子菜单快照因硬编码下标取错菜单项而恒为空;改为按结构查找首个子菜单。
  • 修复测试钩子读取选中框位置的脆弱点:此前取第一个 .cm-selectionBackground div 的矩形,而选区层会复用零宽度残留 div,导致读到过期位置产生假回归;现取全部可见矩形的并集并输出 allSelectionRects 供诊断。
  • 修复同一行内选中背景框高度不一致:drawSelection 的矩形高度取选区两端点光标矩形的并集,而隐藏 Markdown 标记的 bdi 锚点(inline-block 吃满整行行高、基线在盒底)与无序/有序列表标记的 inline-block 盒都高出正文文本带,拖选端点落在这些位置时背景框明显偏高(用户报告:终点越过隐藏的闭合 ** 时框变高)。现将锚点盒约束为 height:1.2em; vertical-align:-0.2em、bullet/序号盒以负半行距(line-height 0.8/1.2)收进文本带,字形位置不变;同一行内任意起止点的选中框高度一致,且含隐藏标记的行不再比普通行高约 7px(行高恢复统一)。新增回归:扫描整行光标矩形必须嵌于文本带 + 标记行与普通行等高。

0.1.13 - 2026-07-05

文件夹工作区(阶段一)

  • 新增文件夹工作区(沉浸式,每窗口一个):「文件 ▸ 打开文件夹」把文件夹设为当前窗口工作区,左侧栏以文件树浏览(懒加载、默认只显示 Markdown/文本、「视图 ▸ 显示所有文件」可切换全部);底部图标条在文件树 / 大纲间切换,「视图 ▸ 显示/隐藏侧边栏」控制显隐。
  • 点击文件树中的文档在当前窗口替换打开(当前文档有未保存修改时先弹保存/不保存/取消),非文本文件交系统默认程序打开。
  • 外部对工作区的增/删/改经 chokidar 监听增量同步到文件树;每窗口的工作区根、当前文档与侧栏视图持久化到 userData/workspace.json,下次启动自动恢复。
  • 安全:新增能力经窄 preload API(window.easeink.workspace)暴露,所有列目录/打开路径在主进程侧校验位于工作区根之内。
  • 侧栏容器由 #outline 升级为 #sidebar 多视图,宽度键迁移 easeink-outline-widtheaseink-sidebar-width
  • 新增 easeink:open-folder/set-folder/list-dir/open-workspace-file/reveal-external IPC 与 workspace.json 契约测试、workspace 端到端场景(打开文件夹→文件树→过滤→替换打开)。
  • (后续阶段:文档列表视图、工作区全文搜索、文件增删改。)

主题

  • GitHub 主题的代码块、表格(表头/斑马纹)、行内代码、YAML front matter 背景与代码块边框由偏蓝的 GitHub 灰(#f6f8fa / rgba(175,184,193,.2) / #e3e6ea)改为中性灰(#f7f7f7 / rgba(0,0,0,.06) / #e3e3e3),去除蓝色偏色。
  • 修复 H1/H2 标题紧跟代码块时标题规则线下方多出一条"横线":此前开栏折叠会吞掉标题与代码块之间的空行,使代码块的 1px 上边框与标题规则线上下相贴、叠成双线。改为当代码块前有空行时只折叠围栏文本、保留该空行作为间距(沉浸式),标题规则线与代码块之间恢复留白,不再叠线。空行是真实编辑行,故行高与光标坐标不受影响(区别于会破坏坐标映射的外边距)。
  • 代码块边框改用主题变量 var(--code-border)(细 1px),四边颜色统一跟随当前主题。
  • 新增契约测试:GitHub 主题表面背景为中性灰(各通道相等、无蓝色偏色)、代码块使用细的主题化边框且与标题规则线之间有间距。

渲染

  • 新增原始 HTML 渲染(沉浸式):Markdown 中的 HTML 块(如 README 头部居中的 <p align="center"><img></p> Logo、<h1 align="center"> 标题)与内联 <img> 标签现在直接渲染为图片/居中内容,而不再显示为原始 HTML 文本;光标进入时揭示源码以便编辑,移开后复原。
  • HTML 在渲染前经 DOMPurify 清洗(与导出同一套信任模型),<script>onerror 等事件处理器一律剥离;HTML 中的相对图片路径按当前文档目录解析,与 Markdown 图片一致。
  • 实现:HTML 块为 htmlBlockField(StateField,块级替换,CM6 不允许 ViewPlugin 提供块级装饰),内联 <img> 为 wysiwyg ViewPlugin 的内联替换;均贡献 atomicRanges。新增 html-render 回归测试覆盖渲染、居中保留、源码揭示/复原与清洗(XSS 拦截)。

0.1.12 - 2026-06-30

关于窗口

  • 「帮助 ▸ 关于」窗口新增官方网站链接(http://www.easeink.com),点击交系统浏览器打开;扩展 about.html 契约测试断言链接存在且以 target="_blank" 外开。

Windows 安装器

  • Windows 安装器从 IExpress 自解压包改为 Inno Setup 编译的向导式 GUI 安装器:欢迎页、选择安装位置、桌面图标选项、进度条、完成并可勾选启动,安装过程不再闪出命令行窗口,更符合常规桌面软件的安装体验。
  • 安装器保留原有行为:单用户安装到 %LOCALAPPDATA%\Programs\EaseInk、开始菜单/桌面快捷方式、.md/.markdown 文件关联,并使用 Inno 自带卸载程序登记到「添加或删除程序」。
  • 新增 scripts/windows/easeink.issscripts/package-windows.ps1 改为调用 ISCC.exe 编译安装器,移除 IExpress/.sed/payload.zip 与 PowerShell 安装脚本路径,删除已废弃的 scripts/windows/install.ps1
  • 新增契约测试校验安装器改用 Inno Setup(.iss 关键指令、ISCC 调用、不再使用 IExpress)。构建该安装器需打包机预装 Inno Setup 6。
  • 修复打包出的 EaseInk.exe 在 Windows「打开方式」、任务栏和文件属性中显示为「Electron」而非「EaseInk」:打包时用 rcedit 覆盖可执行文件的版本元数据(ProductName/FileDescription=EaseInk、CompanyName=cheyo、版权、原始文件名、文件/产品版本号),不再沿用 Electron 自带信息。新增契约测试校验这些 rcedit 版本字符串。

0.1.11 - 2026-06-25

设置与菜单

  • 新增「文件 ▸ 偏好设置...(Preferences...)」独立窗口:左侧分类(常规 / 快捷键)+ 右侧内容;常规页选择界面语言,快捷键页只读列出全部快捷键;结构可扩展。
  • 界面语言改由偏好设置窗口设置;「代码块行号」移到「视图」菜单(源代码模式之后,单独成组);移除空的「设置」菜单。

主题

  • 主题的 id、顺序与显示名收敛到唯一数据源 src/themes.json,主进程菜单与渲染端不再各存一份。
  • 主题显示名统一为英文,中英文界面与状态栏一致(状态栏由显示原始 id 改为英文名,如 Solarized Dark)。
  • 主题集合再平衡为 8 浅 + 8 深 = 16:新增 Catppuccin Latte、Gruvbox Light 两个浅色主题,移除 Panic Mode、Dieci、Gotham、Charcoal。
  • 主题菜单按「浅色组 → 分隔线 → 深色组」分组排序。

修复

  • 「段落」菜单的 YAML Front Matter 移到子菜单最下方(沉浸式 顺序)。
  • 修复通过「段落 ▸ 表格 ▸ 插入表格」从原生菜单插入时,第一次点击网格选择器不插入、需重复操作的问题:从菜单打开选择器前先聚焦编辑器,避免首次点击被当作窗口激活点击吞掉。
  • 修复表格右键菜单弹出后点击菜单外区域不关闭的问题:关闭监听器改为捕获阶段注册(并对菜单内点击放行),不再被编辑器指针选择兜底逻辑的 stopPropagation 拦截。

YAML Front Matter(沉浸式)

  • 「段落」菜单新增 YAML Front Matter,在文档开头插入空白头部块(--- / 空行 / ---,光标停在中间);已存在头部时只把光标移入现有块,不重复创建。
  • 在文档开头第 1 行输入 --- 按回车,自动展开为头部块;正文(若有)保留在闭合 --- 之后。处理器 expandFrontMatterOnEnter 置于 insertNewlineContinueMarkup 之前,仅在折叠光标位于第 1 行、该行为 --- 且尚无闭合头部时接管回车。
  • 复用 wysiwyg.js 导出的 frontMatterRange 作为唯一探测真相源。
  • 新增 frontmatter-insert 回归测试,覆盖空文档插入、已有正文置顶、已存在去重、首行 --- 回车自动成块,以及中部水平线、已闭合块两条负路径;快速回归测试增至 80 项。

0.1.9 - 2026-06-25

0.1.10 - 2026-06-25

粘贴数据创建表格

  • 粘贴 CSV(逗号分隔)或 TSV(制表符分隔)数据时自动转换为 GFM 表格。
  • 支持带引号的 CSV 字段和嵌入分隔符;列数不一致时回退到纯分隔符解析。
  • 新增 paste-table 回归测试。

0.1.9 - 2026-06-25

表格增强

  • 新增沉浸式 的表格编辑:右键单元格弹出菜单,可在上方/下方插入行、在左侧/右侧插入列、删除行、删除列、设置列对齐(左/居中/右)、删除表格。
  • 「段落」菜单新增「表格 ▸ 插入表格…」,弹出 N×M 网格选择器,悬停选择列数×行数、点击即插入空白 GFM 表格。
  • 表格上方新增悬浮工具栏(鼠标移入/聚焦时显示):网格按钮改变行列数(同一个 N×M 选择器)、快速左/中/右对齐(当前光标所在列)、 打开完整操作菜单、垃圾桶删除表格。
  • 结构化操作从渲染 DOM 读取当前(含未提交编辑)的表格内容,整体替换源码区间;列对齐写入分隔行(:--- / :---: / ---:)。
  • 新增 table-edit 回归测试,通过真实右键菜单、悬浮工具栏与网格选择器验证增删行列、对齐切换、插入,以及工具栏的快速对齐/缩放/删除。

智能列表与块编辑

  • 在列表或引用块行尾按回车自动续接:无序列表续出 - 、有序列表自动递增编号、引用块续出 > ;在空列表项上按回车则移除标记、退出列表。
  • 在列表项内容起始处按退格删除该行的列表/引用标记。
  • Tab / Shift+Tab 对列表项缩进/反缩进,仅当选区落在列表项上时生效,其它位置不拦截、回退默认行为。
  • 基于 CodeMirror 的 insertNewlineContinueMarkupdeleteMarkupBackwardindentMore/indentLess,绑定在最高优先级 keymap。
  • 新增 smart-list 回归测试(派发真实 Enter/Tab 键盘事件),覆盖续接、递增、空项退出、引用续接与 Tab 缩进/反缩进。

段落菜单

  • 新增沉浸式 的「段落」菜单(位于「编辑」与「格式」之间),集中放置块级命令:一至六级标题、正文、提升/降低标题级别、引用、代码块、公式块、有序/无序/任务列表、在上方/下方插入段落、水平分割线。
  • 「格式」菜单收敛为行内格式:加粗、斜体、行内代码、删除线、链接、图片、清除格式;标题、引用、代码块等块级项移入「段落」菜单。
  • 新增块级命令与快捷键:公式块 Ctrl/Cmd+Shift+M、有序列表 Ctrl/Cmd+Shift+[、无序列表 Ctrl/Cmd+Shift+];提升/降低标题级别、正文、任务列表、插入段落、水平分割线为菜单项(正文/标题级别不占用 Ctrl+0/=/-,避免与缩放冲突)。命令复用现有 runFormat,直接改写原始 Markdown,源码与渲染模式一致。
  • 列表命令在已是同类列表时再次执行即取消;有序列表按选区顺序重新编号;标题级别提升到一级封顶,六级再降回正文。
  • 新增 paragraph-menu 回归测试覆盖每个块级命令的文档结果,并校验「段落」菜单存在、「格式」菜单收敛为行内。

数学公式

  • 新增行内 $...$ 与块级 $$...$$ LaTeX 数学公式,使用 KaTeX 渲染:光标在公式外显示渲染结果,选区进入公式时暴露原始 $...$ / $$...$$ 源码以便编辑和原生复制,与所见即所得编辑行为保持一致。
  • 数学公式完全离线渲染:KaTeX 样式与 woff2 字体内嵌为 data URL(src/katex-assets.js,由 scripts/generate-katex-css.cjs 生成),不发起任何网络请求;编辑器 CSP 增加 font-src 'self' data:
  • KaTeX 样式改为首次渲染公式时按需注入(不再在每个窗口启动时注入约 368KB 样式表),减轻无公式文档的启动与样式开销。
  • PDF 与 HTML 导出通过 marked 扩展渲染相同的 KaTeX HTML,并内嵌自包含的字体样式表,导出件离线可用。
  • 行内扫描跳过行内代码、围栏代码和表格;$5 和 $10 这类货币、转义的 \$ 不会被误当作公式;解析失败的公式内联显示红色错误而不影响其余文档。
  • WYSIWYG 标记隐藏层不再装饰公式范围,避免与数学替换装饰重叠;新增 math-scenario 回归测试覆盖行内/块级渲染、光标进出暴露源码、货币与错误处理,并扩展导出测试断言 KaTeX 输出与内嵌字体。

编辑与导航

  • 支持点击同一 Markdown 文档内的 #fragment 链接跳转到匹配标题;锚点兼容中文标题去标点形式和英文 GitHub 风格 slug,且不会误开新窗口。

格式化

  • 新增 沉浸式的格式化快捷键与「格式」菜单(位于「编辑」与「视图」之间):加粗 Ctrl/Cmd+B、斜体 Ctrl/Cmd+I、行内代码 Ctrl/Cmd+E、删除线 Ctrl/Cmd+Shift+X、链接 Ctrl/Cmd+K、清除格式 Ctrl/Cmd+\、一至六级标题 Ctrl/Cmd+1~`6、引用 Ctrl/Cmd+Shift+Q、代码块 Ctrl/Cmd+Shift+K`,以及菜单中的图片插入与「正文」。
  • 行内命令对选区切换包裹标记(再次执行即取消);无选区时插入空标记并把光标停在中间。标题、引用对所选行整体套用或移除前缀,对已是同级标题的行再次执行会回退为正文。命令直接改写原始 Markdown,源代码模式与所见即所得模式下行为一致。
  • 菜单项快捷键为展示用(registerAccelerator: false),实际由渲染进程的 CodeMirror keymap 处理,菜单点击与快捷键不会重复触发。
  • 新增 format-shortcuts 回归测试,覆盖加粗包裹/再切换、空选区插入、删除线、行内代码、链接、标题切换、引用、代码块、清除格式,并校验「格式」菜单存在。

0.1.8 - 2026-06-23

编辑与渲染

  • WYSIWYG 改为拖拽感知的“隐形标记”模型,完全依赖原生 CodeMirror 选区,移除渲染器中手工拆分选区与 DOM 字形命中接管的逻辑:
    • 修复非源代码模式下跨隐藏 marker 拖选时光标/选区漂移、抖动的问题:拖拽改为"冻结"策略,由普通模块布尔量 pointerDragging 跟踪(mousedown 只置真、绝不派发事务,从而不会在拖拽起点触发重建、摧毁锚点);ViewPlugin.update 在拖拽期间冻结装饰集、完全不重建(仅在文档编辑时重映射已有 range),整个拖拽过程 DOM 不变、原生选区锚点稳定。
    • 鼠标松开/移出(mouseup/mouseleave)置假并派发无内容的 settleReveal StateEffect,触发一次重建;键盘移动光标也按选区变化重建——按选区与标记父级 AST 构造(强调、标题、行内代码、删除线、引用、链接、图片等)的相交关系暴露对应标记,从而让系统原生 Ctrl+C 直接复制 Markdown 源码。
    • 新增 drag-reveal-stability 回归测试,覆盖“光标进入构造后暴露标记、离开后重新隐藏”。
    • 隐藏 Markdown 标记改用 HiddenMarkerWidget 占位,替代会塌陷成 DOM 空洞的裸 Decoration.replace(空洞会让原生指针光标解析到 .cm-line 行级边界、把选区扩成整行)。该 widget 是一个 bdi.cm-hidden-markerunicode-bidi: isolate<bdi> 隔离中英文方向以消除 CJK/Latin 边界处的选区截断;内含裁剪到 1px、透明的不换行空格(U+00A0)提供物理锚点,使 posAtCoords 拿到非退化矩形、避免整行塌陷;并设 contentEditable="false"。同时把相同的隐藏范围通过 EditorView.atomicRanges facet 提供给 CM6 选区模型,从状态层禁止选区端点落入隐藏 marker(样式 mark/line 装饰除外)。HiddenMarkerWidget.eq() 恒为真以复用 DOM 节点。新增 hidden-marker-anchor 回归测试锁定该 <bdi> + NBSP 锚点契约。

0.1.7 - 2026-06-21

编辑与渲染

  • 修复行首加粗文本(如 **功能说明**:)跨过闭合 ** 继续拖选时,源选区会包含隐藏 Markdown marker、进而导致选区抖动或整行化的问题;可见连续但源文档不连续的拖选现在使用多段 CodeMirror 选区,并新增用户反馈场景回归测试。
  • 修复非源代码模式下在 > 引用块中拖选短文本时,隐藏粗体、引用和行内代码 marker 的连续归一化可能把选区自动扩成整行或跳到下一条引用的问题;新增用户最小 Markdown 场景回归测试,覆盖连续拖动过程中选区稳定停留在目标文字上。
  • 修复非源代码模式下拖选有序或无序列表文字时,选区视觉位置可能漂移到相邻行的问题。
  • 选区层现在仅在选中普通围栏代码块时提升;普通文本和列表恢复 CodeMirror 原生层级。
  • 新增真实 Electron 鼠标拖选有序、无序列表文字的回归测试。
  • 修复 Mermaid 或表格之后的正文被点击、拖选时可能命中下一行的问题。
  • 块级组件改用可测量的内部留白;普通选区变化不再触发全部 Mermaid 装饰重建。
  • 新增长技术文档中块组件后正文的坐标映射和真实鼠标拖选回归测试。
  • 修复长文档冷启动后深层表格偶发保留为原始 Markdown、需要切换源码模式才渲染的问题。
  • 普通任务列表文字双击期间不再重建 WYSIWYG 装饰,降低长文档中点击命中相邻行的风险。
  • Mermaid 与图片异步完成渲染/加载后会主动刷新编辑器测量,避免下方内容沿用旧高度坐标。
  • 修复引用块行首包含隐藏 Markdown 标记时,点击或拖选第一行文字可能实际命中下一行的问题。
  • 修复引用块短文本拖选时,同一行内坐标映射可能漂移到可见行首、导致选区从 v2.2+ 扩到"质量达标"的问题;新增真实鼠标拖选"质量达标"和 DOM caret 兜底判断回归测试。
  • 修复有序引用块中包含隐藏引用符、列表编号和粗体标记时,短文本拖选可能被扩成整行的问题;普通渲染文本现在统一使用 DOM 字形命中接管鼠标拖选,并新增"知识不再区分 / 同一条知识"回归测试。
  • 修复非源代码模式下光标在隐藏粗体标记边界闪烁漂移的问题;拖选时会跳过不可见 Markdown marker,且轻微鼠标抖动不再被当作拖选。
  • 修复连续尝试拖选引用块短文本时,浏览器把后续按下识别为双击或三击后导致选区被默认逻辑扩成整行的问题;新增最小 Markdown 场景,覆盖重复点击后的块引用短语拖选和连续拖动过程。
  • 修复单击拖选 tmp/short.md 这类引用块短文本时,EaseInk 已经设置精确选区但事件仍落回 CodeMirror 默认拖选、造成选区忽大忽小的问题;新增真实短文档引用块拖选序列和静态事件消费契约测试,同时保留无拖动双击选词。
  • JSON 代码块在非源代码渲染态改为 4 空格视觉缩进层级,缩进引导线同步按 4 空格对齐,并新增渲染位置回归测试。
  • 修复在带隐藏 Markdown marker(引用 >、列表 1./-、任务 [ ] 或任意行内加粗/斜体等)的一行上点击或拖选时,选区会被 CodeMirror 默认行为扩成整行或在不同拖动距离上反复震荡的问题;pointerSelectionRescue 现在在携带隐藏 marker 的行上始终接管,确保 anchor 精确落在指针处。

0.1.6 - 2026-06-15

编辑与渲染

  • 修复非源代码模式下代码块文本选区被不透明背景遮住的问题。
  • 代码块现在会显示跟随主题的半透明选区,并可用鼠标拖选部分文本后正常复制。
  • 新增真实 Electron 鼠标拖选与标准剪贴板事件回归测试。

0.1.5 - 2026-06-14

品牌资源

  • 使用新的透明背景 EaseInk Logo,并统一应用于窗口、About、开发启动器及 Windows/macOS 发布包。
  • 主 Logo 归档为稳定文件名,删除旧版本号图标和重复品牌素材。

0.1.4 - 2026-06-13

外观与启动

  • 使用新的 EaseInk 应用图标,并写入 Windows 可执行文件和 macOS App Bundle。
  • 新增项目根目录 EaseInk.exe 开发启动器,双击即可构建并启动当前源码。
  • About 窗口根据实际运行系统显示 Windows、macOS 或 Linux。

0.1.3 - 2026-06-13

查找与替换

  • 新增 Ctrl/Cmd+F 查找和 Ctrl/Cmd+H 替换。
  • 支持区分大小写、正则表达式和全字匹配,适用于超长技术文档。

图片

  • 支持渲染本地图片、Data URL 和 HTTP/HTTPS 网络图片。
  • 支持粘贴截图和拖放图片文件,自动保存到文档同目录的 assets/ 并插入相对路径。
  • 增加图片路径失效提示和 25%、50%、75%、100% 缩放。
  • PDF 与 HTML 导出保留图片缩放设置。
  • 图片功能只读取网络资源,不会上传文件或执行网络写入。

图表与质量

  • 修复 Mermaid 另存为 SVG 时左右出现大块空白的问题。
  • 自动化测试扩展至 42 项应用测试和 3 项安装包测试。

0.1.2 - 2026-06-11

导出

  • PDF 与 HTML 导出现在遵循"代码块行号"设置。
  • 开启行号时,导出的普通围栏代码块显示主题匹配的逐行编号。
  • 关闭行号时,导出内容保持无行号;Mermaid 图表不受影响。

质量

  • 新增行号开启与关闭两种导出场景的自动化测试,当前应用测试共 39 项。

0.1.1 - 2026-06-11

数据安全

  • 增加定期恢复快照,异常退出后可提示恢复未保存内容。
  • 增加外部文件变更检测,支持重新加载,并在保存前阻止覆盖磁盘上的新版本。

导出

  • 增加 PDF 导出,复用 Electron 打印能力并保留当前主题。
  • 增加独立 HTML 导出,内嵌样式、图片和 Mermaid SVG。
  • 修复 Solarized Dark 导出 PDF 时页面外围出现黑色边框的问题。

编辑与渲染

  • 优化 YAML、列表、分隔线和源代码模式代码块的 沉浸式渲染。
  • 改进中文字体回退和代码字体显示。
  • 完善最近文件、相对 Markdown 链接和多窗口打开流程。

质量

  • 自动化测试扩展至 38 项应用测试和 3 项安装包测试。
  • 修复 Windows 安装包构建等待逻辑,提高发布构建稳定性。

0.1.0 - 2026-06-09

首个正式发布版本。

结构化内容

  • 代码语法高亮、复制按钮和可选行号。
  • JSON 缩进引导线、对象/数组折叠及原始行号保持。
  • Mermaid 实时预览和 SVG、PNG、JPEG 导出。
  • GFM 表格网格渲染及单元格就地编辑。
  • 大型 Markdown 文档深处的代码块和标题完整解析。

文件工作流

  • 多窗口的新建、打开、保存、另存为和未保存关闭确认。
  • 最近文件列表,最多 10 条。
  • 相对 Markdown 链接在新 EaseInk 窗口打开。
  • 单实例启动和 Markdown 文件关联。

外观与质量

  • 18 套亮色与暗色主题。
  • 中英文界面和 EaseInk 应用图标。
  • 11 项真实 Electron 自动化测试。