navigation-history
发布时间: 更新时间:
编辑器导航历史
用户行为
Alt+Left 执行“后退”,命令 ID 为 navigation.goBack。
Alt+Right 执行“前进”,命令 ID 为 navigation.goForward。
- 两个命令显示在命令面板和快捷键设置中,默认按键可由用户修改或删除。
- 原生主菜单提供
Go → 后退 和 Go → 前进,菜单点击复用同一组可配置命令。
- 导航历史与标签顺序、最近使用标签列表相互独立。
- 文件树连续打开的预览标签即使被替换,仍保留在导航历史中。
- 返回到已被替换的预览文件时,应用会从当前笔记库重新读取该文件,并继续使用预览标签。
- 后退后打开另一位置会清除原有的前进分支。
- 点击或按 Enter 激活文档大纲项时,跳转前后的位置都会加入历史;大纲内仅移动焦点不会产生历史。
- 点击当前文件标题链接或 Markdown 文件标题链接时,来源位置与最终标题位置会加入历史。
- 跨文件标题链接不会记录目标文件顶部这一临时位置;一次后退直接返回来源,一次前进恢复最终标题。
- 链接无效、越界或目标不存在时不会增加历史位置。
- 切换笔记库或恢复另一笔记库会话时会清空当前窗口的导航历史。
视图恢复
- 每个历史位置保存编辑器选区、选区方向、横向滚动位置和纵向滚动位置。
- 每个历史位置保存预览滚动位置以及离开时聚焦的编辑或预览窗格。
- 历史位置同时保存当前行及相邻行的文本锚点;前进或后退时根据最新正文动态解析实际行,因此在目标位置之前插入或删除内容不会造成跳转偏移。
- 返回已打开标签时复用该标签的原生编辑页,不重建其撤销与重做记录。
- 历史中的文件已关闭且不属于当前笔记库,或文件已移动、删除时,应用保留原历史游标并显示非模态提示。
实现与验证
src/renderer/navigation/history.mjs 维护有界的线性历史、当前位置和前进分支。
src/renderer/runtime/navigation.js 捕获资源标识和视图状态,并负责重新打开被替换的预览文件。
src/renderer/runtime/editor/view.js 在异步预览渲染完成后恢复预览滚动和焦点。
node --test test/navigation-history.test.mjs 覆盖前进、后退、视图更新、分支截断和失败回滚。
npm run test:smoke:navigation-history 在真实 Electron 渲染器中覆盖预览替换、按键分发、选区恢复、前进分支截断,以及同文件和跨文件标题链接的前进/后退。