Add optional extended clipping workflow tools#118
Draft
nyimbi wants to merge 6 commits into
Draft
Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR adds an opt-in set of larger-workflow clipboard tools to my Jumpcut fork:
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
menuSelectionPasteshas never been persisted.Validation
xcodebuild test -project Jumpcut/Jumpcut.xcodeproj -scheme Jumpcut -destination 'platform=macOS' -derivedDataPath ./DerivedData CODE_SIGNING_ALLOWED=NO MACOSX_DEPLOYMENT_TARGET=10.13xcodebuild build -project Jumpcut/Jumpcut.xcodeproj -scheme Jumpcut -configuration Release -destination 'platform=macOS' -derivedDataPath ./DerivedData CODE_SIGNING_ALLOWED=NO MACOSX_DEPLOYMENT_TARGET=10.13codesign --verify --deep --strict --verbose=2 /Applications/Jumpcut.appgit diff --checkNotes
This is opened as a draft because it is a personal fork feature set rather than a clearly upstream-shaped minimal change.