Uninote
Uninote
用户根目录
brdr
common
programming
docs
后端试题
问题讨论

编辑器导航历史

用户行为

  • 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 渲染器中覆盖预览替换、按键分发、选区恢复、前进分支截断,以及同文件和跨文件标题链接的前进/后退。

keyboard-mvp

phase-0-baseline

点赞(0) 阅读(2) 举报
目录
标题