Releases: aisahpA/obsidian-position-restore
Release list
1.4.0-beta.5
New: a resident navigation history sidebar. The VSCode-style browser has a permanent form now — Open navigation history in sidebar puts the same list in the workspace, where it follows the history as it moves, keeps the place it was given, and stays standing when you jump. The dialog and the panel are one browser in two shells, sized by the room they have rather than by device: a phone held sideways gets the two-column layout, a narrow window gets the in-flow panel under the tapped row.
The list is one row per note. The row stands for the last spot you were at in that note — what the panel describes, and where the row's arrow travels — and the setting moved onto the panel's own toolbar, where the reader is looking at what it changes. Older spots are found with the search box, or by switching to Every landing.
The whole panel is click-only. Nothing answers a pointer any more: a jump is one click on the arrow in front of a row (or a right-click on the row), a click on a note describes that note, and links in the panel are links again.
Data storage. Settings → Position Restore → Data storage → Database file now states where the database sits — inside the plugin folder, inside a "."-folder, or out in the vault as an ordinary file. The path dialog carries the Obsidian Sync rule, folded away behind the question it answers ("Will Obsidian Sync carry this file?"): which four files Sync takes out of a community plugin's folder, and what a vault path needs (Sync → Selective sync → Sync all other types, on every device) for positions to follow you between devices. The path field no longer gets autocapitalized, autocorrected or spell-checked on mobile, and on a phone each of the three picker buttons takes a row of its own.
Also in this build: corrupted-database recovery (an unreadable file is copied aside and reported instead of silently starting from empty), records no longer lost when a sync client replaces a file, the history stack cap applied at once with deleted files swept from the history, a traversal that crosses files landing on the entry's own position, the duplicate-title fix in the history settings item, and rows a screen reader can hear.
Full changelog: 1.4.0-beta.4...1.4.0-beta.5
1.4.0-beta.4
Refactor navigation history browser panel
1.4.0-beta.3
New structured anchor repositioning for navigation history: precise anchoring based on outline titles/block quotes (case-, space-, and punctuation-insensitive), replacing fuzzy text-fragment matching; dedup now also matches normalized titles.
1.4.0-beta.2
Refined
- New navigation entry types — the history popup now distinguishes Switch (panel/tab switches) and inferred jumps (Teleport), shown with subdued styling in dark mode, alongside the existing Visit / View entries.
- Better off-screen cursor handling — when the cursor is outside the viewport in source mode, navigation descriptions and restore behavior now detect and handle it correctly.
- Lighter hot path — ephemeral state now stores only position data; navigation display fields are generated separately on demand, reducing overhead while navigating.
- Popup polish — improved entry type display and styling in the navigation popup, plus smarter duplicate-entry detection.
- Misc: selection events are now skipped entirely when navigation recording is disabled.
This is a beta release — feedback is welcome.
1.4.0-beta.1
1.4.0-beta.1 Release Notes
Added VSCode-style back/forward navigation history with support for viewing and jumping to history entries. This is a beta release — feedback is welcome.
1.3.0
New Features
- Frontmatter-based recording control — exclude whole classes of files via an existing frontmatter property configured in settings (e.g. publish: true); entries can be a bare property name (publish, presence-only) or name: value (publish: true, value-matched). The properties usually already exist for another plugin, so no file needs editing
- Per-file override — add position-restore: false to a note's frontmatter to never record it (and drop its saved record), or position-restore: true to always record it regardless of excluded folders, the minimum-length filter or property rules
Bug Fixes
- Fixed a race where a refresh during a sync merge could overwrite newer external database changes
- Fixed search-navigation landing: clicking a search result (cross-file or same-file) or a link target no longer records the jump as your own movement, which could overwrite the saved position
新功能
- 按 frontmatter 属性排除记录 — 在设置中配置一个已存在的属性(如 publish: true)即可排除整类文件;条目可以是裸属性名(publish,只看属性是否存在)或 属性: 值(publish: true,值匹配才排除)。这些属性通常已为其他插件而存在,因此无需修改任何文件
- 单文件覆盖 — 在笔记 frontmatter 中写 position-restore: false 可单独关闭该文件的记录(并删除其已保存记录);写 position-restore: true 则强制记录,不受排除文件夹、最小行数或属性规则的约束
Bug 修复
- 修复同步合并期间刷新可能覆盖较新的外部数据库更改的竞态问题
- 修复搜索导航落点:点击搜索结果(跨文件或同文件)或链接目标时,跳转不再被误记为你的移动而覆盖已保存的位置
Full Changelog: 1.2.0...1.3.0
1.2.0
New Features
- Independent per-tab positions: when the same note is open in multiple tabs, each tab restores its own saved cursor position (device-local), no more conflicts between tabs
- Background tab auto-settle: after a restart, background tabs automatically settle back to their saved landing position instead of drifting until first activated
新功能
- 多标签页独立位置恢复:同一篇笔记在多个标签页打开时,每个标签页独立恢复各自保存的光标位置(设备本地记录),不再互相干扰
- 后台标签页自动校准:重启后后台标签页会自动落回保存的位置,不再停留在漂移位置直到首次被激活
1.1.0
Position Restore v1.1.0
English | 简体中文
Improvements
Smoother, more accurate restoration
- Rewrote the source-mode restore flow: while the brief blank cover hides the view, the landing point is verified at pixel level; the view is revealed only once the position is settled — fixing the position offset when opening notes via injection on desktop
- Fixed flickering when switching tabs
- Fixed overlay flicker and double-jump caused by duplicate restores, background opens, and rapid tab switching
- Shortened the unnecessary blank-cover duration — restored positions appear sooner
Smarter scroll recording (desktop)
- User-intent detection: programmatic scrolling (layout shifts from dynamic re-renders, scrolls triggered by other plugins) is no longer mistaken for your reading position
- Embedded-content protection: scrolling inside embeds (
![[embedded note]], Dataview blocks, etc.) no longer overwrites the host note's saved position — no more "position drift" on Dataview dashboards and other dynamic pages
Friendlier multi-device sync
- When switching the database file location, an existing database file at the target path (e.g. synced from another device) is now merged automatically instead of being rejected
Other
- Internal refactor: restore logic extracted into standalone modules, with full unit test coverage added for core logic
- Updated README badges and demo GIF
改进
恢复过程更稳、更准
- 重写了源码模式的恢复流程:打开笔记时的短暂空白期间完成落点校准(像素级核对),确认稳定后才揭开画面——修复了桌面端注入式打开时的位置偏移
- 修复切换标签页时的闪烁问题
- 修复重复恢复、后台打开、标签快速切换时的闪屏与二次跳动
- 减少了不必要的空白遮盖时长,恢复更快露出画面
滚动记录更聪明(桌面端)
- 新增用户意图识别:程序驱动的滚动(如动态渲染引起的布局位移、其他插件触发的滚动)不再误记为你的阅读位置
- 嵌入内容保护:在
![[嵌入笔记]]、Dataview 块等嵌入内容内部滚动时,不再错误覆盖宿主笔记的保存位置——使用 Dataview 看板等动态页面的用户不再出现"位置莫名漂移"
多设备同步更友好
- 切换数据库文件位置时,若目标位置已存在数据库文件(例如从另一台设备同步过来的),现在会自动合并其中的记录,而不是直接拒绝操作
其他
- 内部重构:恢复逻辑拆分为独立模块,新增完整的单元测试覆盖(构建与核心逻辑)
- 更新了 README 徽章与演示动图
1.0.1
v1.0.1
This release contains no new features, focusing on code quality:
Refactoring
- Replaced all @ts-ignore comments with type-safe type conversions
- Unified style modification to use the setCssStyles API
- Improved error handling and type declarations for asynchronous calls
Developer Experience
- Added complete ESLint configuration and lint scripts; the codebase now passes all checks
v1.0.1
本次发布不包含新功能,主要是代码质量改进:
重构
- 用类型安全的类型转换替换所有 @ts-ignore 注释
- 统一样式修改方式,改用 setCssStyles API
- 优化异步调用的错误处理与类型声明
开发体验
- 补全 ESLint 配置及 lint 脚本,全量代码通过检查
1.0.0
Position Restore 1.0.0 🎉
First stable release of Position Restore. It remembers the cursor and scroll position for each note and drops you right back when you reopen it — the saved position is handed to Obsidian's native restore as part of the file open: flicker-free in source mode, no "top-first then jump" flash in reading mode.
Highlights
- Flicker-free in source mode — the saved position is merged into the ephemeral state of the file open and applied by Obsidian's native restore, so the first frame already lands at the target position; reading mode applies it before render, removing the jump flash
- Cursor and scroll, both restored — back to the exact line and column; records persist with the vault and survive app restarts and device switches (via vault sync)
- Smooth opening experience — source / reading mode can each choose instant or glide (smooth scroll) restore; an optional restore indicator (breadcrumb / notice) shows your current position in the folder hierarchy
- Clean, controllable database — compact array storage with automatic recency-based pruning; short files and excluded folders can be skipped
Options
- Default behavior when no saved position exists: Obsidian's default / jump to end of file
- Link-open behavior: restore saved position / always open at file start (heading & block anchor links automatically yield to the link target)
- Restore method (source / reading, configured separately): instant / glide
- Restore indicator: off / breadcrumb / breadcrumb + notice
- Excluded folders and minimum length filter
- Optional scroll recording in Obsidian Bases views
- Customizable database file path
Notes
- The data format differs from Remember Cursor Position; existing positions won't carry over automatically. It's best to disable the original plugin after installing this one to avoid interference.
- All data is stored in a local JSON file inside your vault; no network access.
Found a bug or have a suggestion? Please open an issue.
Position Restore 1.0.0 🎉
Position Restore 的首个正式版本。为每篇笔记记住光标与滚动位置,重新打开时直接回到原处 —— 保存的位置随文件打开一并交给 Obsidian 原生恢复:编辑(源码)模式无闪烁,阅读模式无"先顶部后跳转"的闪跳。
核心特性
- 源码模式无闪烁 — 保存的位置合并进文件打开时的 ephemeral state,由 Obsidian 原生恢复机制应用,首帧即落在目标位置;阅读模式在渲染前应用,消除"顶部→跳转"闪动
- 光标与滚动双恢复 — 精确回到行与列;记录随仓库持久化,重启应用、跨设备(通过仓库同步)均有效
- 平滑的打开体验 — 源码 / 阅读模式可分别选择瞬间或滑动(平滑滚动)恢复;可选的恢复指示器(面包屑 / 通知)显示当前在文件夹层级中的位置
- 干净可控的数据库 — 紧凑的数组存储,按最近使用自动清理;可跳过短文件与排除文件夹
可配置项
- 无记录时的默认行为:Obsidian 默认 / 跳转文件末尾
- 链接打开行为:恢复保存位置 / 始终从文件开头打开(标题、块锚点链接自动让位于链接目标)
- 恢复方式(源码 / 阅读分别配置):瞬间 / 滑动
- 恢复指示器:关闭 / 面包屑 / 面包屑 + 通知
- 排除文件夹、最短文件长度过滤
- 可选记录 Bases 视图滚动位置
- 自定义数据库文件路径
说明
- 数据格式与 Remember Cursor Position 不同,已有位置记录不会自动迁移;建议安装后禁用原插件,避免相互干扰
- 所有数据存储于仓库内本地 JSON 文件,无网络访问
如有问题或建议,欢迎 提交 issue 。