Skip to content

Add optional extended clipping workflow tools#118

Draft
nyimbi wants to merge 6 commits into
snark:masterfrom
nyimbi:master
Draft

Add optional extended clipping workflow tools#118
nyimbi wants to merge 6 commits into
snark:masterfrom
nyimbi:master

Conversation

@nyimbi
Copy link
Copy Markdown

@nyimbi nyimbi commented May 18, 2026

Summary

This PR adds an opt-in set of larger-workflow clipboard tools to my Jumpcut fork:

  • Optional extended clipping mode in Hotkey preferences.
  • Up to 500 remembered clippings when extended mode is enabled.
  • Favourite clippings with a Favourites submenu.
  • Bold, italic, and color labels for clippings, visible in the main menu, alternate menu, and Favourites submenu.
  • Save selected clipping, save all clippings to one text file, or save all clippings as separate text files.
  • Documentation for the new features and for the macOS Accessibility permission required for direct paste.

I made these changes for my own workflow. They probably are not broadly useful, and they do push against Jumpcut's minimalism, but they are opt-in and they work for my usage.

Fixes Included

  • Menu selection now defaults to paste behavior even when menuSelectionPastes has never been persisted.
  • If macOS blocks synthetic Command-V because Jumpcut lacks Accessibility permission, paste attempts request trust and explain the copy-only symptom.

Validation

  • xcodebuild test -project Jumpcut/Jumpcut.xcodeproj -scheme Jumpcut -destination 'platform=macOS' -derivedDataPath ./DerivedData CODE_SIGNING_ALLOWED=NO MACOSX_DEPLOYMENT_TARGET=10.13
  • xcodebuild build -project Jumpcut/Jumpcut.xcodeproj -scheme Jumpcut -configuration Release -destination 'platform=macOS' -derivedDataPath ./DerivedData CODE_SIGNING_ALLOWED=NO MACOSX_DEPLOYMENT_TARGET=10.13
  • codesign --verify --deep --strict --verbose=2 /Applications/Jumpcut.app
  • git diff --check

Notes

This is opened as a draft because it is a personal fork feature set rather than a clearly upstream-shaped minimal change.

nyimbi added 6 commits May 18, 2026 01:22
The fork adds export actions, favourites, and a larger history limit for local workflow use. Those behaviours now sit behind an explicit Hotkey preference so the default menu stays close to upstream Jumpcut while preserving existing larger-history users through preference migration.

Constraint: User requested the added features be opt-in from the Hotkey preferences pane

Rejected: Keep export, favourites, and 500-item history always active | contradicts the opt-in and minimalism request

Confidence: high

Scope-risk: moderate

Directive: Keep future fork-only clipping actions behind extendedFeaturesEnabled unless they are upstream-minimal defaults

Tested: git diff --check; xcodebuild test -project Jumpcut/Jumpcut.xcodeproj -scheme Jumpcut -destination 'platform=macOS' -derivedDataPath ./DerivedData CODE_SIGNING_ALLOWED=NO MACOSX_DEPLOYMENT_TARGET=10.13

Not-tested: Signed distribution build with a local Mac Development certificate
The extended clipping work now has a single handover document covering user-facing capabilities, implementation touch points, verification, install notes, caveats, and the release artifact prepared for GitHub.

Constraint: User requested a HANDOVER.md before committing, pushing, and publishing a release binary

Rejected: Keep release and install details only in chat | future maintainers need the operational record in the repository

Confidence: high

Scope-risk: narrow

Directive: Keep this handover updated if release assets or signing status change

Tested: git diff --check -- HANDOVER.md

Not-tested: Documentation rendering on GitHub before push
Extended mode now lets a clipping carry bold, italic, and palette-color labels. The labels are persisted with the clipping and rendered anywhere the clipping appears, including the main menu, alternate menu, and Favourites submenu.

Constraint: User wanted styling controls from the secondary menu while keeping styling visible in the main clipping menu

Rejected: Store styling only as secondary-menu metadata | the user corrected that styling must be visible on the main menu

Confidence: high

Scope-risk: moderate

Directive: Keep clipping label metadata optional in the plist so older stores continue to decode

Tested: git diff --check; xcodebuild test -project Jumpcut/Jumpcut.xcodeproj -scheme Jumpcut -destination 'platform=macOS' -derivedDataPath ./DerivedData CODE_SIGNING_ALLOWED=NO MACOSX_DEPLOYMENT_TARGET=10.13; xcodebuild build -project Jumpcut/Jumpcut.xcodeproj -scheme Jumpcut -configuration Release -destination 'platform=macOS' -derivedDataPath ./DerivedData CODE_SIGNING_ALLOWED=NO MACOSX_DEPLOYMENT_TARGET=10.13; codesign --verify --deep --strict --verbose=2 DerivedData/Build/Products/Release/Jumpcut.app

Not-tested: Notarized Apple Developer signed distribution
Menu selection used a raw UserDefaults lookup that treated a missing menuSelectionPastes preference as false, so installs without that key placed clippings without issuing Command-V. Route the lookup through Settings so registered defaults and tests agree, and surface missing Accessibility trust instead of silently failing the paste event.

Constraint: Existing installs may not have menuSelectionPastes persisted.

Rejected: Persist a migration value only | it would leave the runtime default path inconsistent and untested.

Confidence: high

Scope-risk: narrow

Directive: Keep menu and settings defaults aligned through Settings helpers rather than raw UserDefaults fallbacks.

Tested: xcodebuild test -project Jumpcut/Jumpcut.xcodeproj -scheme Jumpcut -destination 'platform=macOS' -derivedDataPath ./DerivedData CODE_SIGNING_ALLOWED=NO MACOSX_DEPLOYMENT_TARGET=10.13

Tested: xcodebuild build -project Jumpcut/Jumpcut.xcodeproj -scheme Jumpcut -configuration Release -destination 'platform=macOS' -derivedDataPath ./DerivedData CODE_SIGNING_ALLOWED=NO MACOSX_DEPLOYMENT_TARGET=10.13

Tested: codesign --verify --deep --strict --verbose=2 /Applications/Jumpcut.app

Not-tested: Manual click-paste into a target editor, because the session cannot observe the user's active UI target.
The rebuilt app can copy clippings but cannot synthesize Command-V until macOS grants Accessibility permission. Paste attempts now use AXIsProcessTrustedWithOptions with the prompt flag, and the alternate Paste command remains clickable so users can reach that permission path instead of being left with copy-only behavior.

Constraint: macOS TCC state is external to the app bundle and may be reset by rebuilt ad-hoc signed apps.

Rejected: Keep disabling Paste when untrusted | it hides the recovery path and makes the feature look broken.

Confidence: high

Scope-risk: narrow

Directive: Do not gate paste recovery solely through startup warnings; paste actions must be able to surface Accessibility permission issues.

Tested: xcodebuild test -project Jumpcut/Jumpcut.xcodeproj -scheme Jumpcut -destination 'platform=macOS' -derivedDataPath ./DerivedData CODE_SIGNING_ALLOWED=NO MACOSX_DEPLOYMENT_TARGET=10.13

Tested: xcodebuild build -project Jumpcut/Jumpcut.xcodeproj -scheme Jumpcut -configuration Release -destination 'platform=macOS' -derivedDataPath ./DerivedData CODE_SIGNING_ALLOWED=NO MACOSX_DEPLOYMENT_TARGET=10.13

Tested: codesign --verify --deep --strict --verbose=2 /Applications/Jumpcut.app

Not-tested: Accepting the macOS Accessibility prompt and verifying live paste into the user's editor.
Menu clicks can update the pasteboard while still failing to paste when macOS blocks Jumpcut from sending the synthetic Command-V event. The README now calls out the Accessibility requirement and the copy-only symptom so future installs have a clear recovery path.

Constraint: macOS TCC permission state is external to Jumpcut and can be missing after local rebuilds.

Rejected: Leave the detail only in code alerts | users may check README first when paste appears broken.

Confidence: high

Scope-risk: narrow

Tested: git diff --check

Not-tested: Full app test suite; README-only change.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant