0. 背景
之前一直用Alfred 3的 snippets 功能,但是Alfred
的 snippets 功能是收费的。
最近发现了Raycast,Raycast
的 snippets 功能是免费的,而且Raycast
的 snippets 功能是开源的,可以自己写。
所以打算把Alfred
的 snippets 迁移到Raycast
上。
1. 迁移 Alfred 的 snippets 到 Raycast
Alfred
的 snippets 文件的格式与 Raycast
的 snippets 文件的格式不同,
所以需要先将 Alfred
的 snippets 文件转换成 Raycast
的 snippets 文件。
1.1 Get Alfred Snippets Files
打开Alfred
的Snippets
功能,点击Export
按钮,导出Alfred
的 snippets 文件。
Alfred 3 的 collections 不支持批量导出,所以需要一个一个导出。🐶
1.2 Convert Alfred Snippets to Raycast Snippets
新建一个文件夹,把导出的 Alfred
的 snippets 文件放到这个文件夹里面。
然后在这个文件夹里面新建一个 convert-alfred-snippets-to-raycast-snippets.sh
文件,内容如下:
convert-alfred-snippets-to-raycast-snippets.sh
#!/bin/sh -e
# Script for converting Alfred snippets to Raycast snippets
# Usage: chmod +x convert-alfred-snippets-to-raycast-snippets.sh; ./convert-alfred-snippets-to-raycast-snippets.sh
# NOTE: Install jq before running this script
# List up all *.alfredsnippets files and rename them to *.zip
for file in *.alfredsnippets; do
mv "$file" "${file%.alfredsnippets}.zip"
done
# Unzip all *.zip files and get the folders name
for file in *.zip; do
unzip -o "$file" # -o: overwrite existing files without prompting
done
# Merge all *.json files to one file for Raycast snippets
jq -s 'map(.alfredsnippet | {name, keyword, text: .snippet})' *.json > ./output.json
# Clean up all files except output.json
for file in *.json; do
if [ "$file" = "output.json" ]; then
continue
fi
rm "$file"
done
for file in *.zip; do
rm "$file"
done
for file in *.plist; do
rm "$file"
done
# You can now import the output.json file to Raycast
echo "Done! 🎉 You can now import the output.json file to Raycast -> Import Snippets"
也可以从 Github gist: convert-alfred-snippets-to-raycast-snippets.sh 下载。
备注
该脚本执行需要先安装jq
,jq
是一个命令行下的JSON
处理工具。
jq
的 mac 的安装方法: brew install jq
。
也可以参考官网。
执行下面的命令:
chmod +x convert-alfred-snippets-to-raycast-snippets.sh
./convert-alfred-snippets-to-raycast-snippets.sh
会在当前文件夹生成一个 output.json
文件。
1.3 Import Raycast Snippets
打开Raycast
,然后点击Import Snippets
,
选择上一步生成的output.json
文件,导入Raycast
的 snippets。