Add Manage Text Replacements command#27349
Conversation
Adds a new 'Manage Text Replacements' command that lets users search, copy, add, edit, and delete native macOS text replacements directly from Raycast. Changes sync back to System Settings via defaults import. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Thank you for your contribution! 🎉 🔔 @thomaslombart you might want to have a look. You can use this guide to learn how to check out the Pull Request locally in order to test it. 📋 Quick checkout commandsBRANCH="feat/manage-text-replacements"
FORK_URL="https://github.com/jake-fowler-lego-nerd/extensions.git"
EXTENSION_NAME="text-replacements"
REPO_NAME="extensions"
git clone -n --depth=1 --filter=tree:0 -b $BRANCH $FORK_URL
cd $REPO_NAME
git sparse-checkout set --no-cone "extensions/$EXTENSION_NAME"
git checkout
cd "extensions/$EXTENSION_NAME"
npm install && npm run devWe're currently experiencing a high volume of incoming requests. As a result, the initial review may take up to 10-15 business days. |
Greptile SummaryThis PR adds a Confidence Score: 5/5Safe to merge after fixing the changelog placeholder. Only P2 findings present; all previously raised P0/P1 concerns have been addressed in the current code. extensions/text-replacements/CHANGELOG.md — fix the hardcoded date to {PR_MERGE_DATE}. Important Files Changed
Prompt To Fix All With AIFix the following 1 code review issue. Work through them one at a time, proposing concise fixes.
---
### Issue 1 of 1
extensions/text-replacements/CHANGELOG.md:3
**Hardcoded date instead of `{PR_MERGE_DATE}` placeholder**
The new entry uses `2026-04-30` as the date. Per the Raycast extension changelog convention, new entries must use the `{PR_MERGE_DATE}` placeholder, which is automatically replaced with the actual merge date during release.
```suggestion
## [Manage Text Replacements] - {PR_MERGE_DATE}
```
Reviews (10): Last reviewed commit: "Update CHANGELOG.md and add platforms fi..." | Re-trigger Greptile |
- Add List.EmptyView with Add New action so users can create their first replacement even when the list is empty (P1) - Use timestamp-suffixed temp file in notifySystem() to prevent write-write race on rapid successive saves (P2) - Resolve Z_ENT dynamically via Z_PRIMARYKEY.Z_NAME instead of hardcoding 1, guarding against CoreData schema changes (P2) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Switch loadReplacements to --json mode so newlines inside ZPHRASE don't corrupt row parsing (e.g. email signature expansions) - Use Form.TextArea for expansion field to support multi-line input - Clean up temp plist file after defaults import - Use --json for getZEnt query for consistency Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Prevent duplicate shortcut inserts, reset loading state for every refresh, and sanitize XML-illegal control characters before plist import. Made-with: Cursor
|
@greptile review |
Reuse shortcut conflict detection in update flow while excluding the current row to avoid creating duplicate active shortcuts. Made-with: Cursor
… on paste action - Change category from "Applications" to "System" in package.json for better classification. - Add a HUD notification after pasting a text replacement to improve user experience.
- Move onSave() call to the finally block to guarantee it executes regardless of success or failure during the save process. - Enhance user feedback by ensuring the save state is consistently updated.
0xdhrv
left a comment
There was a problem hiding this comment.
Looks good to me, approved ✅
|
Published to the Raycast Store: |
|
🎉 🎉 🎉 We've rewarded your Raycast account with some credits. You will soon be able to exchange them for some swag. |
Description
Adds a new 'Manage Text Replacements' command that lets users search, copy, add, edit, and delete native macOS text replacements directly from Raycast. Changes sync back to System Settings via defaults import.
Screencast
Checklist
npm run buildand tested this distribution build in Raycastassetsfolder are used by the extension itselfREADMEare located outside the metadata folder if they were not generated with our metadata tool