github ZenNotes/zennotes v2.35.0
ZenNotes 2.35.0: editing and navigation stay predictable

6 hours ago

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 j and k motions follow logical line numbers. (#660, reported by @ryanthara) A bare j or k intentionally moves through visual rows when a long line wraps, but a count such as 8j should 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 press 8j, then 8k; the cursor moves eight numbered lines down and back.

🧰 For contributors

  • CloudSyncCoordinator.pullChanges gathers 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-view and participates in SELF_KEYED_SURFACES, making VimNav yield before its global buffer-prefix handling. atlasRegionDirection resolves literal, AltGr, dead, and process bracket events without treating other modified keys as region navigation.

  • zenMoveByDisplayLine now reads prefixRepeat and motionRepeat from 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.

Don't miss a new zennotes release

NewReleases is sending notifications on new releases.