TextBuddy documentation
A plain-text editor with a sidebar of one-shot fixes. Change case, sort and dedupe lines, tame whitespace, straighten or curl punctuation, find & replace, wrap text in tags, and drop in filler copy. Select a passage and any fix stays inside it. This page walks through how to use each one.
Installation
The download from bendansby.com/apps/textbuddy is a standard .dmg — open it and drag TextBuddy.app to your Applications folder. The store version installs and updates the usual way.
Requires macOS 13 Ventura or later, on Apple Silicon or Intel. The direct-download build auto-updates via Sparkle; you can also check anytime via the app menu's Check for Updates…. The store build updates through its own channel. The direct download comes with a free 7-day trial with every feature unlocked — after that, a one-time license (bought on its own or as part of the Surprisingly Useful bundle) keeps it going; the store build is paid once through the usual pipeline, with no separate key.
The editor & the Tasks sidebar
TextBuddy is a single window. The middle is a plain-text editor — type, paste, or drop a text file onto it to get started. The header shows the filename, a dot when there are unsaved changes, and a live word / character / line count. The right-hand Tasks sidebar holds every one-shot fix, grouped into Find & Replace, Case, Lines, Whitespace, Punctuation, Wrap, and Generate, with Save buttons pinned to the bottom.
Every transform is a single button. Click it and the fix happens immediately — no dialog, no confirmation.
Whole document, or just the selection
This is the thing to internalize: if you have text selected, a transform only touches the selection. If nothing is selected, it acts on the whole document. A Selection badge appears in the header and the sidebar whenever you have text highlighted, so you always know which mode a button is about to run in. The header's word / character / line counts switch to counting the selection too.
Line-based tasks (sort, dedupe, number, and the rest) are smart about partial selections: if your highlight starts or ends mid-line, it grows out to whole lines first, so you never split a line in half. Character-level tasks (case, punctuation, find & replace) use your selection exactly as drawn.
Change case
Five case buttons, each applied to the selection or the whole document:
| Button | What it does |
|---|---|
| UPPERCASE | Every letter to capitals |
| lowercase | Every letter to small |
| Title Case | Capitalize the first letter of each word |
| Sentence case | Capitalize the first letter of each sentence |
| tOGGLE cASE | Invert each character — upper becomes lower and vice versa |
Lines
Line operations treat your text as a list of lines. With a selection, they act on the lines your selection touches (expanded to whole lines); otherwise on the whole document.
| Button | What it does |
|---|---|
| Sort A→Z / Sort Z→A | Alphabetize lines ascending or descending (locale-aware compare) |
| Reverse | Flip the line order top-to-bottom |
| Shuffle | Randomize the line order |
| Remove duplicates | Drop repeated lines, keeping the first occurrence of each |
| Remove blank lines | Delete empty lines |
| Join lines | Collapse every line into one, space-joined |
| Number lines | Prefix each line with a right-aligned number |
Line tasks normalize Windows line endings to Unix on the way in: a file opened with CRLF line endings is rewritten LF-only the first time any line task runs on it.
Whitespace
Cleanup for the invisible characters that make text look ragged:
| Button | What it does |
|---|---|
| Trim trailing | Remove spaces and tabs at the end of every line |
| Trim lines | Remove whitespace from both ends of every line |
| Collapse blank lines | Runs of blank lines become a single blank line |
| Collapse spaces | Runs of two or more spaces become one |
| Tabs → Spaces | Convert each tab to four spaces |
| Spaces → Tabs | Convert four spaces to a tab |
Punctuation
Swap between typewriter and typographic punctuation:
| Button | What it does |
|---|---|
| Smart quotes | Straight quotes " ' become curly " " ' ', context-aware about opening vs. closing |
| Straight quotes | Curly quotes back to straight — the exact inverse |
| Ellipsis | Three dots ... become a single ellipsis character … |
| Dashes | -- and --- become an em dash — |
Smart quotes and straight quotes are a matched pair, so you can flip a document to typographic quotes for publishing and back to straight quotes for code or a plain-text export.
Wrap in tags
The Wrap section surrounds each unit of your text with an opening and closing tag. Pick the granularity — word, sentence, or paragraph — and supply the tag, and TextBuddy brackets each unit with it. Handy for turning a stack of paragraphs into <p>…</p> blocks, marking up list items, or quoting each line. Like the other transforms, it honours a selection when you have one.
Find & replace
Find & replace sits at the top of the sidebar. Type a term into Find, an optional replacement into Replace, and use the action row:
| Control | What it does |
|---|---|
| Next | Jump to and highlight the next match, wrapping around at the end |
| Replace | Replace the current match, then advance to the next |
| All | Replace every match at once |
| Aa | Toggle case-sensitive matching on or off |
A live match count sits alongside the fields. If text is selected, both the count and All stay inside that selection — a quick way to replace within a single paragraph or block without touching the rest of the file.
The floating pop-out window
⌘F focuses the inline Find field. When you need more room — searching or replacing across multiple lines — press ⇧⌘F (or click the pop-out button in the section header) to float Find & Replace out into its own window with multiline Find and Replace fields. Inside that window, ⌘↩ runs Replace All. The floating panel shares state with the sidebar and drives the same editor, so whichever surface you use, you're working on the same document.
Generate filler
The Generate section drops in placeholder copy — useful for mocking up a layout or padding out a draft. It works even on an empty document. Pick a count (1–9) and a unit (Words, Sentences, or Paragraphs), then:
| Button | What it does |
|---|---|
| Insert | Drop a fresh block of filler at the cursor and start a session |
| Replace | Swap the block you just inserted for a fresh generation |
| Add | Append another generation, growing the block |
After you insert, the buttons become Replace and Add so you can dial the amount up or down until it looks right. As soon as you make any manual edit — typing, running a transform, or undoing — the session ends and the row goes back to Insert. Choosing the Words unit produces Title-Cased words with no punctuation, so it reads as a label or title; Sentences and Paragraphs get normal casing and punctuation.
The file queue & Open Recent
Open several files at once — File → Open… (⌘O) is multi-select, and you can drop several files onto the window — and they load into a queue. A drawer appears down the left with a row per open document; click a row to switch to it. Only one document is active at a time. File → New (⌘N) adds a fresh Untitled document to the queue.
The queue always keeps at least one document: close the last one and it's replaced by a fresh Untitled.
Opening the same file only once
TextBuddy won't open a file that's already in the queue a second time — asking for it again just brings the existing copy forward instead of creating a duplicate tab. That keeps you from accidentally editing two out-of-sync copies of the same file.
Open Recent
File → Open Recent lists the files you've opened lately (it also feeds the Dock menu). Clear Menu empties the list. The menu hides itself when there's nothing to show.
The menu-bar scratch pad
Turn on Show Menu Bar Icon in the app menu to get a TextBuddy icon in the menu bar. Clicking it drops down a small scratch pad — a throwaway text buffer, separate from your open documents, with a live word / character / line count and clusters of the Case, Punctuation, and Generate buttons.
It's for the quick one-off: paste a snippet from another app, fix its case or straighten its quotes, drop in a line of filler, and copy the result back — all without leaving whatever you were doing. The Generate cluster here includes a Copy Filler button that puts a fresh block straight on the clipboard. The scratch pad's contents are independent of your document queue and persist on their own.
View options
The View menu tunes how the editor looks — display only, none of it changes your file:
- Font — Monospaced, Sans-Serif, or Serif.
- Text Size — grow with ⌘+, shrink with ⌘-, reset with ⌘0 (8–48 pt).
- Show Line Numbers (⇧⌘L) — a line-number gutter down the left of the editor. It's a display ruler and never touches the text; use the Number lines task if you want the numbers written into the file.
Workspace restore
TextBuddy remembers the files you had open. Quit with a few documents in the queue and they reopen on your next launch, so you pick up where you left off. Together with the unsaved-changes prompt below, it means you rarely have to think about setting the window back up.
Saving
Two buttons sit at the bottom of the sidebar:
- Save — write changes back to the file. It's disabled when the document has never been saved or has no unsaved changes; for a brand-new Untitled document, Save opens a save panel to pick a location and name.
- Save as New… — write the current text to a new file, leaving the original untouched. Available whenever there's text to save.
Dirtiness is tracked by comparing content, not by a flag — so if you edit a document and then undo all the way back to how it was, the unsaved-changes dot disappears and Save disables again.
TextBuddy won't let you lose work by accident. Close a document with unsaved changes and you're prompted to Save, Cancel, or Don't Save. Quit with several unsaved documents and it offers to Review each one in turn, Discard everything, or Cancel the quit.
Languages
TextBuddy is localized into English, Deutsch, Español, Français, Italiano, 日本語, 한국어, Português (Brasil), Русский, and 简体中文. It picks the right language automatically based on your System Settings → General → Language & Region preferences.
To pin TextBuddy to a specific language without changing system preferences, open System Settings → General → Language & Region → Applications, click the + button, and pick TextBuddy.
Support
Questions or bug reports? Email ben.dansby@gmail.com and you'll get a reply, usually within a day or two. For privacy questions, see the privacy policy.