Skip to content
← Changelog

Riffle 1.6: fix it where you found it

Version v1.6.0
Date
Type release
Author Andy Miller

You're reading a diff, you spot a typo, and now there's a small errand: find the file in your editor, find the line, fix it, save, switch back, refresh. Riffle 1.6 deletes the errand. A diff pane whose file is yours is editable in place. You see the typo, you fix the typo, you press ⌘S, and the diff re-runs from what you just wrote. Each side saves on its own (⌘⇧S writes both), the reader keeps its place across the save, and undo stays inside the pane you typed in.

The interesting part was deciding what counts as "yours", because most of what Riffle shows isn't what it looks like. Riffle stays read-only unless it can prove otherwise. Your own files and both sides of a folder comparison are editable. A git review's two sides are blobs materialized into a temp tree, a git difftool older revision is a copy git is about to delete, and a --pairs manifest's left side is the "before" snapshot the whole review is built on. None of those take a save, and none of them offer one. A manifest's right side, which is the real file under review, does.

Tabs got names and colors. Double-click a tab to rename it, or right-click for Rename and a set of eight colors that tint its icon and wash its background just enough to pick out across the strip. That becomes useful the moment you have several agent reviews open and the derived names all read alike. "Use Automatic Name" puts a tab back to following its files.

Tabs also land where they should in the diff itself. A tab now advances to the next multiple of the tab width instead of TextKit's 28-point default, which corresponded to nothing in a monospaced font, so tabbed and space-indented lines finally line up in the same column. Settings ▸ General sets the width to 2, 4 or 8. It changes what you see and never what's written to a file.

A pane with unsaved work grows a revert control beside its save glyph, for the edit you made by accident. It puts the file back as one undoable step, so ⌘Z brings your work back if the revert was the mistake.

The details around editing

Typing is colored as you type, so a line you add is syntax-highlighted like the rest of the file rather than sitting there plain until the next save. A new line keeps the indentation of the one it came from, which is the one editing convenience worth having here, because landing in column zero inside indented code is wrong often enough to notice. Unsaved changes are marked with a slowly pulsing red dot beside the filename, and it holds still when the system asks for reduced motion.

While a pane holds unsaved typing its change bands go faint and its intra-line boxes and end-of-line marks stand down, because they describe the file as it was loaded and a decoration that isn't accurate any more shouldn't keep looking authoritative. The next save recomputes all of it. Changing view mode, whitespace mode or soft wrap re-runs the diff against what you typed rather than against the file on disk, so nothing in progress is lost to a display setting, and swapping the sides carries your work across with its file.

A save writes the file back exactly as it found it: same encoding and byte-order mark, CRLF where there was CRLF, no trailing newline where there wasn't one, and untouched lines of a mixed-ending file keeping their own terminators. Closing a tab, closing the window or quitting with unsaved pane edits asks first and names the files, the way an unfinished merge already did. And if something else rewrites a file while you're editing it, Riffle stops reloading and says so in that pane's header, with the two honest ways out: save over what landed there, or reload and drop yours.

One last thing, and I'm oddly pleased about it: the save control is a floppy disk now. The download-tray glyph it replaced reads as "download", or as a share sheet run backwards. A floppy has meant "write this to disk" for forty years and needs no caption.

Riffle is $29.99 once, with a 14-day full-feature trial and a free tier that keeps unlimited 2-way diff forever. Get it from the Riffle page or with Homebrew: brew install --cask skulkworks/tap/riffle. Full details are in the changelog.