v0.1.0-beta.3
Pre-releaseAdded
-
Custom dash autoformat. Settings → Editing → "Custom dash" turns a typed
---into an en or em dash (with or without surrounding spaces) the moment you type the third hyphen. Press Backspace right after to revert to the literal---. Off by default. -
Custom filename prefixes for preset saves. Settings → General now lets you change the Send Doc / Read Doc / Marked Doc filename prefixes (defaults
SEND_/READ_/MARKED_; leave one empty for no prefix). They apply to both the Save As preset buttons and the silent Save Send Doc / Save Marked Cards commands, gated on the existing "Prefix preset saves" toggle. -
Paste and Destructively Condense (desktop). A command that pastes the clipboard's plain text and immediately condenses just what you pasted, merging its paragraphs (paragraph integrity off, destructive) — the result of an F2 paste followed by Alt-F3 over the pasted text. Unbound by default (bind it under Settings → Keybindings). Desktop only — the web build can't read the clipboard.
-
Save Marked Cards. Pull out just the cards you've placed a reading marker in and save them on their own, in your chosen format. Two ways in: a "Marked Doc" button in the Save As dialog, and a Save Marked Cards command (default Mod-Alt-M, rebindable) that saves silently to a configurable destination — Settings → Marked Cards destination (same folder / fixed folder), with the
MARKED_filename prefix and your default format — mirroring Save Send Doc. Cards only (analytics and headings are dropped); if nothing is marked it does nothing and says so. -
Smart quotes (optional). Turn on Settings → Editing → "Smart quotes" and a straight
'or"you type curls to the right direction by context — opening after a space, dash, bracket, or start of line; closing (and the apostrophe) otherwise — sodon'tand(he said "hi")come out right. Press Backspace immediately after a curl to revert it to the straight character. Off by default. -
New "Flip Quote Direction" command. Bindable (unbound by default); with a selection it flips every curly quote to its opposite direction (left ↔ right), preserving formatting — the manual fix for cases like
'tisor'90sthat smart quotes (like Word) guess wrong. -
Edit the timer's prep clocks directly. When an Aff/Neg prep clock is loaded and paused, click the big display to type a new time — handy if you started or stopped prep a beat late. The edit saves to that side's prep balance, so it sticks when you switch to another clock and back (until you Reset).
-
The timer shows which prep clock is loaded. The Aff/Neg "differentiate by" setting (color / text / both) now also styles the big display when a prep clock is showing — so it's clear at a glance that the time is prep, and which side.
-
New "Cycle Timer Preset" command. Bindable (unbound by default — set it under Settings → Keybindings); it cycles the timer profile College → High School → Pomodoro, applies that profile's durations, and surfaces the timer.
-
Controls for formatting-gap bridging. When you format a word next to an already-formatted word, the editor bridges the small gap between them so the styling is continuous. Two new Editing settings govern this: a toggle to turn the automatic bridging on or off (the manual "Fix Formatting Gaps" command is unaffected), and a choice of which gaps get bridged — whitespace and punctuation (default) or whitespace only. Bridging also no longer happens inside structural paragraphs (tags, analytics, headings, undertags) — only in body text — so a selection spanning both bridges in its body paragraphs and leaves its structural lines alone.
-
Open a file by dragging it into the window. Drag a
.docx,.cmir, or.cmir-journalfrom your file manager onto any CardMirror window — the editor, the navigation pane, or the home screen — to open it, the same as File → Open (including the unsaved-changes prompt, and focusing an already-open copy). Desktop only; other file types are ignored, and dragging cards around the editor is unaffected. -
Move a card or section up/down in the outline. New Move Container Up / Move Container Down commands (default ⌘/Ctrl-Alt-↑ / ↓) grab the cursor's smallest enclosing outline item — a card / analytic unit, or a heading and its whole section — and move it one spot among same-level items in the navigation pane. Cards reorder among cards, blocks among blocks, and so on; moving past the edge of a section flows into the adjacent one. Rebindable in Settings (listed under Editing utilities).
Changed
-
The command bar and settings search find more by synonym. "fix", "repair", and "restore" now find each other (e.g. "restore" surfaces the Repair commands), as do "delete" and "remove" ("remove" finds the Delete Row / Column / Table commands). "add" and "insert" find the same element commands — "add table", "add row" / "add column", "add image", or "add received card" surface the corresponding Insert command, and vice versa (the create-type commands — Add Quick Card, Add Comment, Add Note — are intentionally left out, since they make something new rather than placing it). And "timer profile" and "timer preset" are interchangeable, each finding the Cycle Timer Preset command and the Timer profile setting.
-
Repair Paragraph Integrity: Ctrl-Enter can mark an already-broken paragraph for indent. When the phrase already starts its paragraph, plain Enter still does nothing (no break is needed), but Ctrl-Enter now marks that paragraph for indent-on-exit — so a card's first body paragraph, which can't be split, can still be marked to indent.
-
AI operations now also lock styling and marks in the passage they're working on. While an AI operation runs on a passage, the editor already refused typed edits there; it now also refuses style and mark changes (highlight, underline, font size, named styles, etc.) to that passage, so the operation's content can't shift under it mid-run.
-
Document zoom is now per-editor, not global. Body-text zoom (the zoom buttons, Ctrl-= / Ctrl--, pinch / Ctrl-scroll) now applies only to the editor you're in — zoom one document in while another stays zoomed out, including independently per pane in the three-pane workspace. It no longer syncs across windows or persists; instead, documents open at a configurable default (Accessibility → "Default document zoom", 100% by default) and reset to it on reload. Chrome scale (Mod-Alt-=) is unchanged and still scales the whole window uniformly across windows.
-
Find and Paragraph Integrity match across dashes and ellipses. Searching (or typing a paragraph-start phrase) now treats every kind of dash — hyphen, en-dash, em-dash, minus sign, and the rest of Unicode's dash family — as interchangeable, and treats an ASCII
...and the single…character as the same. This joins the existing curly-vs-straight quote matching, so text pasted from Word matches whether you type the fancy character or the plain one. (The invisible soft hyphen is left as-is.) -
Timer durations are capped at 99 minutes in settings (speech presets and prep), up to which any value is allowed.
-
Saving a quick card now captures whole cards and sections. Add Quick Card used to save exactly your raw selection — which could be half a card or a stray fragment. It now snaps the selection to the whole cards/sections it covers (re-highlighting them so you see what's saved), and you can save with no selection at all — it captures the card or section your cursor is in. This matches how sending to the dropzone, a starred recipient, or the speech doc already works.
-
Deleting a quick card now uses a two-click confirm instead of a popup. The Delete buttons in the Quick Cards manager (both per-card and bulk) arm on the first click ("Delete?") and delete on a second click within a few seconds — matching the flashcard manager, and replacing a confirmation dialog that didn't fire reliably in the desktop app.
-
Quick card buttons are now hidden by default, behind a setting. The Quick Cards ribbon cluster (command bar, tag picker, manage, add) is off by default — turn on Settings → Editing → "Show quick card buttons" to show it, mirroring the dropzone shelf toggle. Quick cards still work while hidden, and the command bar still opens with its keyboard shortcut.
-
Re-pressing a structural style now consistently resets indent, font size, and font color. Pressing a Pocket / Hat / Block / Tag / Analytic / Undertag shortcut on text that's already that style resets it toward the style's canonical look — clearing the paragraph indent, any direct font-size override, and any direct font-color override — while leaving line spacing alone. Previously this was inconsistent: tags and analytics didn't clear indent, undertags didn't clear font size, and none cleared font color.
Fixed
-
Nav pane no longer flickers while typing just above a heading. Typing on the bottom-most line directly above a heading used to make the outline's highlight briefly jump to the next heading and snap back. The nav pane now keeps its cached heading positions in sync with every edit, so the active-heading highlight stays put (this also fixes the same brief staleness for nav click-to-jump).
-
Silent Send/Marked Doc saves won't overwrite the original document. The Save Send Doc / Save Marked Cards commands now refuse to clobber the source file when the export would land on its exact path (e.g. an empty prefix at the same folder and format) — in fixed-folder mode as well as same-folder mode — falling back to the Save As dialog so you can rename. (More reachable now that the prefix is customizable.)
-
The bottom scroll runway now accounts for the send/receive pills. The extra space that lets the last line of a document clear the bottom-left shelf was only added when the dropzone pill was showing. With pairing enabled but the dropzone pill hidden, the send/receive pills sat in that same band yet the runway was missing, so the last line clipped behind them. It now appears whenever any tray pill is showing — in both single-pane and multi-pane.
-
Timer duration fields no longer lose focus while typing. In the timer durations settings, the field used to deselect after a single digit, so you couldn't type a two-digit value like "10" without it jumping away. It now stays focused as you type.
-
Timer prep buttons no longer crowd the label at 10:00. In the text / both prep-label modes, the "A:" / "N:" prefix had too little room next to a 4-digit time; the buttons now have a bit more horizontal padding.
-
Open .cmir files on iPhone / iPad (web). On iOS the file picker greyed out
.cmir/.cmir-journalfiles — the browser can't map their custom extension to a recognized type — so you couldn't select them. The web open picker now lets you choose any file on iOS (the format is still checked after you pick); other browsers keep the type filter. -
Escape now exits the Repair Paragraph Integrity workflow from anywhere. Escape previously only worked while the workflow's input box was focused — once you clicked back into the card there was no obvious way out. It now exits the workflow regardless of focus, while still deferring to anything layered on top that should close first (a modal dialog, or the command bar).
-
Repair Paragraph Integrity: undo works inside the workflow. Ctrl/Cmd-Z now undoes the most recent action without leaving the workflow — re-merging the last paragraph break and/or removing its deferred indent mark. Previously it did nothing (the bar's input swallowed it). It won't reach back into edits made before the workflow opened, and defers to a modal or the command bar layered on top.
-
The navigation pane now follows the cursor in three-pane mode. Clicking or moving the cursor in a document highlights the heading it lands in in the nav pane — that already worked in single-pane view, and now works in each pane of the multi-pane workspace too (each pane tracks its own cursor), including right after a pane opens and after structural edits like moving a card.
-
Ctrl/Cmd+A no longer selects the whole interface. When CardMirror was focused but you hadn't clicked into the document (e.g. just after alt-tabbing back), Ctrl/Cmd+A selected the entire GUI. It now selects everything within whatever text box you're in — the editor, a settings field — and does nothing when focus isn't in a text box, rather than selecting the chrome.
-
Pasting over a selection inside a card no longer breaks the card. Pasting a cite, body, or undertag copied from inside a card on top of selected text in a card used to tear the card apart — detaching its tag and leaving a stray empty-tag card behind. The paste now replaces the selected text and fits the content into the card with its structure intact. Pasting a tag, analytic, heading, or whole card over a selection still starts a new card, as before.
-
Analytics no longer sit inside cards. An analytic that ended up tucked inside a card — from an older document, or a Word file where an analytic line was placed under a tag — now becomes its own analytic unit (taking the content below it with it), exactly as pasting an analytic into a card already does. This removes a class of glitches where editing around such an analytic (e.g. backspacing at its start) could fold it into the tag or scramble the card. Existing files are repaired automatically when opened.
-
Inserting a saved card no longer splits the card you're in. Clicking a card on the dropzone shelf, inserting a quick card, or inserting a card a partner sent you used to drop it at the exact cursor — splitting the surrounding card and leaving a broken, stray card behind (with a "insert into the middle of text?" prompt to warn you). It now lands as a clean separate card just above or below the one you're in, the same as dragging it there would. The mid-text confirmation prompt — and its "Skip mid-text confirm" setting — are gone.
-
Sending to the dropzone, a starred recipient, or the speech doc snaps your selection to whole cards and sections. You could previously send an arbitrary selection — half a card, a stray paragraph — which arrived broken on the other side. Now the selection is rounded to the whole cards/sections it covers and re-highlighted so you see exactly what's sent: a partial card grows to the whole card, a card you only grazed is dropped, an intro paragraph comes along (with its heading) only if you selected most of it, and a selection with nothing structural in it sends nothing. Putting your cursor in a card or heading with no selection still sends that whole card/section, as before.
-
Pasting body text together with a heading or card no longer breaks the card. Copying a paragraph along with a following heading (or a whole card) and pasting it into the middle of a card used to split the card and leave a broken, stray card behind. Now the body text merges into the card, the heading/card starts its own section, and the rest of the card you pasted into follows under it — the same way pasting a heading on its own already behaved.
-
Tagging content that includes a table now wraps the whole card. When you put a tag on a run of paragraphs (with a cite and a table) to turn it into a card, the card used to stop at the table, leaving the table and everything after it stranded outside. Tables are now pulled into the card along with the rest, so the card covers the whole thing.
-
Dissolving a blank-tag card no longer leaves card-body-styled text loose. In the edge case where a card with an empty tag is removed (Backspace at the start of the blank tag) and its body moves out to the document, the body now becomes a normal paragraph instead of keeping card-body styling with no card around it. (A cite stays a cite — it's a valid loose node.)
-
Repair Paragraph's deferred indents stay inside the card you're working on. The Repair Paragraph workflow's indent-on-exit can now only ever apply inside the card it was opened on, never spill into a neighboring card.
-
A card made with the "new card" voice command is now tracked in the nav pane. Such a card used to get a tag with no internal id, making it invisible to the navigation pane and the outline level filter until the next save. It now gets a real id like every other card.
-
Home screen number shortcuts no longer fire over a dialog or the command bar. The 1–9 shortcuts on the home screen used to trigger even when a dialog or the command bar was open on top of it — running the wrong action and eating the number you were trying to type. They now stand down whenever a modal is up or a text field is focused.
-
Highlighting or underlining part of a ligature no longer decorates the whole ligature. With a ligature font, applying highlight, shading, underline, or emphasis to only some characters of a ligature (like the "fi" in "find") used to paint the entire joined glyph. The ligature now splits at the formatting boundary, so only the marked characters are decorated. (As a result, highlighted / underlined text no longer forms ligatures.)