A native macOS menu bar application that captures selected text from any application and instantly sends it as a task to Todoist using a global keyboard shortcut.
- Global Hotkey: Press Cmd+Shift+Y anywhere on macOS to capture selected text
- Seamless Integration: Works with any application that supports text selection
- Menu Bar App: Runs discreetly without a Dock icon
- Secure Storage: API tokens stored in macOS Keychain
- Non-Destructive: Preserves your clipboard content after capture
- Native Notifications: Confirms when tasks are successfully created
- macOS 11.0 or later
- A Todoist account
- Xcode 14.0 or later (for development)
- Download the latest release from the Releases page
- Move Clipist.app to your Applications folder
- Launch Clipist from Applications
- Grant required permissions when prompted:
- Accessibility: Required to read selected text
- Input Monitoring: Required for global hotkey to function
- Notifications: Optional, for task creation confirmations
- Click the Clipist icon in the menu bar
- Select "Open Preferences"
- Enter your Todoist API token
- Get your token from: Todoist Settings > Integrations > Developer
- Close the preferences window
- Select any text in any application
- Press Cmd+Shift+Y
- A notification confirms the task was added to your Todoist inbox
# Clone the repository
git clone https://github.com/yourusername/Clipist.git
cd Clipist
# Open in Xcode
open Clipist.xcodeproj
# Build and run
# In Xcode: Product > Run (Cmd+R)- Open Clipist.xcodeproj in Xcode
- Press Cmd+U to run all tests
- View results in the Test Navigator (Cmd+6)
# Run all tests
xcodebuild test -project Clipist.xcodeproj -scheme Clipist -destination 'platform=macOS'
# Run tests with coverage
xcodebuild test -project Clipist.xcodeproj -scheme Clipist -destination 'platform=macOS' -enableCodeCoverage YESClipist/
├── Clipist/
│ ├── ClipistApp.swift # Main application logic
│ └── KeychainHelper.swift # Secure token storage
├── ClipistTests/ # Unit tests
└── ClipistUITests/ # UI tests
-
ClipistApp.swift contains the entire application in a single file:
AppDelegate: Application lifecycle, hotkey registration, text captureContentView: Preferences interfacePermissionGuideView: Step-by-step permission setupEventMonitor: Global event handling for popover dismissal
-
KeychainHelper.swift: Wrapper for macOS Keychain to securely store the Todoist API token
Text Capture Flow:
- User presses Cmd+Shift+Y
- App records current clipboard state (using changeCount)
- Simulates Cmd+C using CGEvent API
- Waits for clipboard change via changeCount polling
- Reads captured text
- Restores original clipboard with safeguards
Hotkey Registration:
- Uses Carbon Events API (RegisterEventHotKey)
- Registers Cmd+Shift+Y (key code 0x10)
- Posts notification when pressed, handled by handleHotKey
Permission Requirements:
- Accessibility: Required to simulate keystrokes and read clipboard
- Input Monitoring: Required for global hotkey functionality
- Notifications: Optional, for user feedback
Hotkey not working:
- Check Input Monitoring permission in System Settings > Privacy & Security > Input Monitoring
- Ensure no other app is using Cmd+Shift+Y
Text not capturing:
- Verify Accessibility permission is granted
- Try restarting the app after granting permissions
Tasks not appearing in Todoist:
- Verify your API token is correct
- Check your internet connection
- Look for error notifications
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with SwiftUI and AppKit
- Uses the Todoist REST API v2