ZenNotes 2.35.0: editing and navigation stay predictable
Cloud catch-up, Markdown layout, Atlas navigation, and counted Vim motions now agree with what you wrote and what the interface shows.
🐛 Fixes
-
Cloud catch-up no longer multiplies rolled-over daily notes and tasks. (#661, reported by @uNyanda) When one device filled a daily note while another was offline, the returning device could replay every intermediate revision as a real conflict. That produced numbered copies and repeated the rolled-over task across the app. Catch-up now skips superseded content while preserving moves and deletes, so it applies the final note once. How to test locally: sync two clients to the same vault, take one offline, create today's daily note and roll an open task into it on the other, then reconnect the first client; today's note and task appear once with no numbered cloud conflict copies.
-
Preview lets ordinary Markdown paragraphs wrap naturally. (#656, reported by @rrpolanco) A newline inside a paragraph was treated as a forced visual break, so Preview preserved the editor's source-line lengths and could leave awkward short lines. Ordinary source newlines are soft again and reflow with the preview width. Markdown's explicit hard-break syntax, two trailing spaces before a newline, still starts a new visual line. How to test locally: write one paragraph across several source lines, open Split or Preview, and resize the pane; the prose reflows as one paragraph. Add two trailing spaces to one source line and confirm only that line forces a break.
-
Atlas region keys now reach Atlas. (#657, reported by @uNyanda) The global Vim listener claimed
[and]as the first key of buffer-navigation sequences before Atlas could act on its own visible region hints. Atlas now declares itself as a self-keyed surface, so those keys move to the previous or next region while Atlas has focus. Brackets produced through AltGr and Wayland dead/process key events are normalized too. How to test locally: put notes in at least two top-level vault regions, open Atlas with Vim mode on, press]and[, and confirm the status label and centered region change in both directions. -
Counted Vim
jandkmotions follow logical line numbers. (#660, reported by @ryanthara) A barejorkintentionally moves through visual rows when a long line wraps, but a count such as8jshould match the relative-number gutter. The Vim adapter passed the count without marking it explicit, so ZenNotes incorrectly measured eight wrapped rows and could land only a few logical lines away. Counted motions now read the adapter's original digit buffers and move by logical lines. How to test locally: enable word wrap, relative line numbers, and Vim mode; start above a long wrapped paragraph and press8j, then8k; the cursor moves eight numbered lines down and back.
🧰 For contributors
-
CloudSyncCoordinator.pullChangesgathers each remote change window before applying it. Same-path upserts are coalesced to the newest body, while structural changes still run and every revision advances the tracked state and cursor. -
The shared Markdown processor no longer loads
remark-breaks. CommonMark soft breaks now remain text, while the parser's native hard-break nodes continue through the existing rendering and sanitizing pipeline. -
Atlas now carries
data-atlas-viewand participates inSELF_KEYED_SURFACES, making VimNav yield before its global buffer-prefix handling.atlasRegionDirectionresolves literal, AltGr, dead, and process bracket events without treating other modified keys as region navigation. -
zenMoveByDisplayLinenow readsprefixRepeatandmotionRepeatfrom codemirror-vim's fifth motion argument. The Electron Vim smoke test starts a counted motion on its intentionally wrapped first line, so visual-row counting cannot masquerade as a passing logical-line test again.
Local-first and keyboard-first, as always.