Highlights: Preserve URL query bytes, recover cleanly from Start at Login failures, and avoid duplicate CLI newlines.
- URL cleanup: preserve retained query fields exactly, including malformed percent escapes (#63, thanks @SebTardif).
- Settings: show Start at Login failures with recovery guidance, restore failed toggle changes, and preserve the saved choice when startup registration fails (#63, thanks @SebTardif).
- CLI: avoid appending a duplicate final newline while keeping exit codes tied to actual text cleaning (#63, thanks @SebTardif).
-
CLI: keep the standalone version synchronized with the app version and reject stale versions in CI before release.
-
Path quoting: quote only existing filesystem paths, preserving slash-containing prose and missing paths while supporting home-relative and relative paths with spaces (#57, thanks @SebTardif).
Highlights: Safer URL, shell-command, and Markdown cleanup without changing copied prose.
- URL repair: preserve prose following a URL while retaining wrapped host, path, query, and fragment continuations (#58, thanks @SebTardif).
- Text cleanup: preserve separate uppercase shell arguments and remove in-word backslash continuations without inserting a space (#59, thanks @SebTardif).
- Text cleanup: preserve line breaks and prose spacing around box-drawing gutters, including Unicode separators and mixed-case remote hosts (#60, thanks @SebTardif).
- Command detection: preserve prose that shares short command prefixes and filesystem notes such as
/etc, while retaining real shell and namespaced slash commands (#61, thanks @SebTardif). - Text reflow: keep standalone hyphens spaced and rejoin wrapped Markdown links without changing inline code or parenthetical prose (#62, thanks @SebTardif).
- Move macOS CI and release builds to
xcode-27while preserving macOS 15 support, native SwiftPM builds, and Linux Swift 6.3/6.4 coverage.
Highlights: Safer shell prompt cleanup, clearer CLI errors, and more reliable app updates.
-
Prompt cleanup: preserve shell variable references and Markdown headings whose words merely start with a command name.
-
CLI: report file, stdin, and UTF-8 decoding failures with their input source instead of incorrectly claiming that no input was provided.
-
URL cleanup: preserve content-identity parameters with percent-encoded names and leave URLs followed by other text untouched.
-
Updates: upgrade Sparkle to 2.10.0 for macOS 27 delta-update compression fixes and better download progress handling.
Highlights: macOS 27-ready shortcuts, clipboard restores that never clobber a newer copy, and CLI stdin/argument fixes.
- Dependencies: update KeyboardShortcuts to 3.1.0 for macOS 27 compatibility, smoother menu highlighting, function-key handling, and shortcut recorder fixes.
- Clipboard: use the latest copy for manual pastes and preserve all clipboard formats when restoring, without overwriting a newer copy.
- Text reflow: preserve fenced content when a fence-like line has trailing text, and require valid Markdown numbered-list markers before rewriting lists.
- Text cleanup: preserve literal path characters and home expansion, keep placeholder-like text intact when preserving blank lines, and recognize CRLF/CR command continuations.
- Previews: mark removals correctly around emoji and inserted characters, and use the real cleanup engine for sensitivity examples.
- Shortcuts: keep cleared paste shortcuts unset across restarts and show recorded function keys and keyboard-layout equivalents correctly in the menu.
- CLI: correctly read
--trim -from stdin, keep short options such as-fseparate from file input, and report invalid arguments instead of silently ignoring them. - CLI installer: keep the app responsive during authorization and install correctly from paths containing shell characters, without a shared temporary script.
- App lifecycle: release Accessibility polling and system copy-event hooks when their owners go away and disable Sparkle in signed development builds.
- Build compatibility: Swift 6.3 or later is now required because Swift 6.2.4 crashes while compiling the updated shortcut dependency's isolated deinitializers; macOS 15 support is unchanged.
- Dependencies: update KeyboardShortcuts to 3.0.1 for Swift 6 concurrency and release-build fixes.
- Build: validate macOS and Linux with Swift 6.3 and 6.3.3, pin Actions and lint tools, and run portable text and packaging-script tests in CI.
- Website: remove stale release numbers from download and social-card labels and clarify that clipboard processing stays local.
- Development: reuse SwiftPM builds when packaging the debug app, simplify signed shortcut-resource packaging, and replace the obsolete Xcode project with the supported
Package.swiftworkflow.
Highlights: Optional automatic reflow for copied prose and Markdown.
- Join hard-wrapped prose and Markdown automatically with a new default-off setting, respecting app/site exclusions and preserving fenced examples before command cleanup (thanks @rewtraw).
- Expand the manual action to Paste Reflowed Text, with shared checks that leave recognized source code and configuration out of both reflow paths (thanks @rewtraw).
- Add optional removal of leading blank lines during reflow, disabled by default to preserve existing paste behavior (thanks @rewtraw).
Highlights: Safer automatic updates and clipboard handling.
- Dependencies: update Sparkle to 2.9.6 for installer security fixes and MenuBarExtraAccess to 1.3.1 for macOS 27 compatibility.
- Terminal detection now recognizes cmux by bundle identifier and app name, so copies use terminal-specific trimming (thanks @gustavosmendes).
- Preserve YAML block-scalar indentation during automatic trimming in the app and CLI (thanks @rewtraw).
- Dependencies: update KeyboardShortcuts to 2.4.0 for shortcut-recorder fixes while preserving Swift 6.2 compatibility.
- Build: validate macOS builds with Swift 6.2.4 while retaining Swift 6.2 and macOS 15 support.
- Settings: reorganize controls into focused General, Trimming, Rules, Shortcuts, Advanced, and About tabs, with low-frequency cleanup options under Advanced and a compact native macOS layout.
- Auto-trim can now be disabled for configured apps and browser sites while keeping manual paste actions available (#15).
- Menu: add an optional “Paste without Query Params” action for copied URLs, gated by Settings → General and preserving configured content-identity parameters (#27, thanks @danfooo).
- Menu paste-action badges now show a single clear character count instead of duplicate “trimmed” counters (#27, thanks @danfooo).
- Claude Code: add optional prompt-decoration flattening for copied slash commands while preserving ordinary wrapped prose (#19, thanks @evoleinik).
- Settings: add an option to hide the menu bar icon while keeping Trimmy running (#24, thanks @qazi0).
- Text cleanup: dedent copied prose where most paragraph lines share the same leading whitespace (#10, thanks @arunsathiya).
- Website: add a copy button for the Homebrew install command.
- Added a menu-only “Paste Reformatted Markdown” action to join wrapped markdown paragraphs and bullet lists while preserving blank lines and fenced code blocks.
- Path quoting now only wraps standalone paths (not commands or sentences) when they contain spaces (#17, thanks @n0an).
- Highlight: Context-aware trimming with terminal detection, plus per-terminal aggressiveness (Cmd-C tracking + frontmost-app fallback).
- Terminal detection now covers Ghostty, WezTerm, Alacritty, Hyper, and Warp Stable bundle IDs for context-aware trimming.
- Aggressiveness now splits between general apps and terminals (defaults: Low + Normal), plus a “None” option to disable auto-trim in regular apps.
- Settings: added Advanced tab and moved CLI installer, debug tools, and clipboard fallbacks there.
- Menu bar icon now animates whenever a trim happens.
- Sparkle: auto-download updates when auto-check is enabled, and only show the restart menu entry once an update is ready.
- Command detection: flatten “command + indented args” copies (e.g. emails + flags) into a single pasteable line at Normal aggressiveness; skip transforms for snippets longer than 4 lines.
- Dependencies: refreshed SwiftPM pins (Sparkle 2.8.1, KeyboardShortcuts 1.17.0, MenuBarExtraAccess 1.2.2).
- CI: publish Linux
TrimmyCLIrelease assets (.tar.gz+.sha256) so Linux users can install without building from source. - Thanks to @JaviSoto for contributing the workflow.
- Box-drawing cleanup now skips when no box glyphs are present, preserving JSON/YAML indentation and spacing (thanks @ahmedasmar).
- TrimmyCLI now writes errors via
FileHandle.standardErrorto satisfy Swift 6/Linux concurrency checks while keeping the same stderr output and exit codes (thanks @JaviSoto). - Trimmy is now available via Homebrew:
brew install --cask steipete/tap/trimmy(updates viabrew upgrade --cask steipete/tap/trimmy).
- Command detection now keeps multi-line command blocks intact when there are three or more standalone command-looking lines and no explicit joiners (, |, &&, ||, ;); pipelines/continuations still flatten as before.
- Align app and CLI heuristics so both respect the above guard; CLI High/manual overrides still flatten.
- Added regression tests covering structured JSON copies and the pyenv init snippet to prevent unintended flattening in Normal mode.
- Added in-app Accessibility permission prompts and menu/settings callouts so “Paste Trimmed/Original” explains how to enable ⌘V injection when permission is missing.
- Added CLI installer in Settings → General that symlinks the bundled TrimmyCLI into /usr/local/bin and /opt/homebrew/bin as
trimmy.
- Auto-trim (Low/Normal) now skips list-like snippets (bullets, numbered rows, plain token/ID columns) and copies with more than four newlines to avoid mangling hashes/IDs; High/manual override still flattens on demand. Regression tests cover the list/id scenarios.
- Added headless CLI (
TrimmyCLI) with--trimflag, sharing the same heuristics; supports stdin, json output, aggressiveness/blank-line/box-drawing options. - Fixed strike-through preview: removed decorative pipes (│) now strike correctly, whitespace deletions show as struck dots, and truncation no longer hides removed characters.
- Packaging: SwiftPM resource bundles are now symlinked to the app root so
KeyboardShortcuts’Bundle.moduleresolves in user builds (prevents Settings → Shortcuts crash).
- Further tightened box-glyph cleanup so terminal-wrapped URLs (e.g.,
releases/ │ download/...) rejoin correctly without extra spaces.
- Menu previews now show up to 100 characters (both trimmed and original) while keeping per-row truncation badges aligned with the longer limit.
- Paste Original row now shows only character count (no “trimmed” badge); trimmed badge remains on Paste Trimmed.
- Box-drawing cleanup: strip decorative “│” after real pipes and even when copied alone; added regression coverage for terminal-style decorations.
- Fixed a crash when opening Settings → Shortcuts by ensuring the KeyboardShortcuts resource bundle is packaged into Trimmy.app; packaging now fails if SwiftPM bundles are missing and a regression test guards bundle availability.
- Clipboard flattening now rejoins hyphen-wrapped tokens (e.g.,
...-9bd2-\nf1a4...png) without inserting spaces, fixing QR/path copies from chats. - Guarded against treating markdown bullet lists as hyphen continuations so list snippets don’t get glued together when flattened.
- Menu “Paste Trimmed” and “Paste Original” previews now share the same 50-character middle ellipsis and badge stats for consistent clipping.
- Settings window is slightly taller so previews and tabs fit without clipping.
- Debug builds now show a clear “DEBUG BUILD” marker in About to distinguish dev builds from releases.
- Hardened command detection (#4): Low/Normal now skip when multi-line text looks like source code (brace + language keywords across Swift/JS/Go/Rust/Java/C#/Python, etc.) unless strong command cues are present. High/manual override still flattens on demand, so “Paste Trimmed” keeps working for power users.
- Strip prompt markers (#3): Copies that start with
#/$are de-promoted when they look like shell commands (Markdown headings stay), so blog/chat snippets paste cleanly. Preferences/README now document aggressiveness levels with concrete before/after examples. - Wrapped URLs are repaired automatically, even on Low aggressiveness, so line-breaks or stray spaces inside links (e.g., GitHub changelog URLs) no longer break the pasted URL.
- Added “Paste Trimmed” action + global hotkey that trims on-the-fly (High aggressiveness), pastes, and restores your clipboard.
- Added “Paste Original” action + hotkey so you can paste the untouched copy even after auto-trim; Trimmy now keeps the untrimmed text around for that path.
- Paste actions now show the destination app (e.g., “Paste Trimmed to Ghostty”) so you know where the keystroke will land.
- Last preview now renders the original line with strike-through on removed characters for a quick diff-at-a-glance.
- Each paste action now shows its own preview: trimmed text under “Paste Trimmed” and struck-out original under “Paste Original.”
- Auto-Trim toggle moved below the divider to keep primary actions grouped at the top of the menu.
- Box-drawing stripping now handles any number of leading/trailing gutter bars (│┃ etc., most-line majority) while leaving real pipeline
|characters intact; more regression tests cover single-line, majority, and both-sides cases, and previews mirror the runtime cleaner.
- Preferences got the full SwiftUI treatment: toolbar tabs (General, Aggressiveness, Shortcuts, About), window auto-resizing per tab, and richer About content with dimmed update controls for debug builds.
- Shortcuts pane focuses on the Trim Clipboard hotkey (with glyphs) and lets you toggle or rebind it.
- Global “Trim Clipboard” shortcut ships with a default of ⌥⌘T; you can change or disable it in Settings → Shortcuts and it shows in the menu.
- New optional global hotkey lets you toggle Auto-Trim on/off without opening the menu (disabled by default; configurable in Shortcuts).
- Menu bar entry mirrors the new Settings window—actions for Trim Clipboard, Settings…, About Trimmy, plus a multi-line “Last” preview instead of the old submenu.
- Menu bar icon dims automatically when Auto-Trim is disabled so it’s obvious the service is paused.
- Trimmy now runs as a single instance to avoid double clipboard watchers or duplicate menu bar icons.
- Aggressiveness previews now ship with a more illustrative “Low” example and unit tests that lock behavior for all three levels.
- Manual “Trim Clipboard” and its global shortcut now always run at High aggressiveness, while auto-trim honors the configured level.
- New toggle (off by default) lets you enable extra clipboard fallbacks (RTF/public text types) for apps that don’t expose plain UTF-8 content.
- Clipboard flattening now stitches path segments split across lines (e.g.
~/.ssh/\ngithub_rsa.pub) without inserting stray spaces; applies to auto-trim (your set aggressiveness), manual trim (High), and the Aggressiveness preview examples. - Sparkle updater now auto-disables for unsigned/dev runs to avoid updater error dialogs during development.
- Debug builds now use bundle ID
com.steipete.trimmy.debugand ship with Sparkle feed disabled, so Accessibility/Input Monitoring and updater prompts stay isolated from release builds.
- Last trim preview now middle-truncates long text so the menu stays compact while showing both start and end of the command.
- Packaging/signing hardened: strip extended attributes, remove AppleDouble (
._*) files, and re-sign Sparkle + app bundle to satisfy Gatekeeper and notarization.
- Optional stripping of box-drawing separators (│ │) with whitespace collapse so prompt-style borders paste cleanly.
- Thanks to @Blueemi for contributing the box-drawing cleaning option.
- Quit item restored in the menu bar root (consistent with CodexBar layout).
- Release notes/process cleanup (archive/signing steps clarified).
- About panel now lists GitHub · Website · Twitter · Email links inline (matches CodexBar).
- Moved the last-trim preview to sit directly beneath “Trim Clipboard Now” for a faster read.
- Bumped bundle version/build (0.2.1/5).
- Sparkle auto-updates (Check for Updates…, auto-check toggle) with GitHub feed and signed appcast.
- Launch-at-login toggle (SMAppService) persisted and applied at startup.
- Clickable About panel (GitHub link) showing version/build.
- Strict concurrency + Swift Testing; lint/format configs aligned with other menu-bar apps.
- Launch-at-login toggle (SMAppService) with persisted setting.
- Sparkle auto-updates (Check for Updates…, auto-check toggle, feed to GitHub Releases).
- Lint/format configs aligned; strict concurrency opt-in.
- Fix About panel credits: use attributed credits with version and icon so the About menu reliably appears.
- Clipboard flattening now repairs accidental newlines inside tokens (e.g.,
N\nODE_PATH→NODE_PATH) to avoid inserting stray spaces when copying shell commands. - Added safety valve: copies longer than 10 lines are skipped from auto-flattening, even on High aggressiveness.
- About dialog added (menu item) showing author (Peter Steinberger), MIT license, and GitHub link.
- Initial release of Trimmy (macOS 15+, menu-bar only).
- Auto-flattens multi-line shell commands copied to the clipboard; respects
\continuations, collapses whitespace, optional blank-line preservation. - Aggressiveness levels (Low/Normal/High) to tune detection strictness; manual “Trim Clipboard Now” override.
- Menu controls: Auto-Trim toggle, Keep blank lines toggle, Aggressiveness submenu, last-trim preview, Quit.
- Robust clipboard watcher: marker type to skip self-writes, grace delay for promised data, fast polling.
- Packaging scripts: app bundling, signing + notarization helper, shipped notarized
Trimmy-0.1.0.zip.