需求描述
想使用 Alfred 快速添加笔记到思源笔记的收集箱。
网上关于此类的教程实在是少的可怜,过程中遇到很多看似简单,但真的不知道应该如何处理的小问题,这篇教程不成体系,只是对解决问题过程的一些碎片化知识进行记录。
好用的库
探索过程中发现了两个好用的库,分别是GitHub - sindresorhus/alfy: Create Alfred workflows with ease 和 GitHub - giangvo/alfred-workflow-nodejs: A small library providing helpers to create Alfred Workflow ,最后功能的实现我使用的是 alfy。
使用 Alfy 创建一个 workflow
安装
npm install alfy
使用
- 创建一个空的 Alfred workflow
Alfred → 设置 → Workflows → 点击底部加号 → Blank workflow
- 添加一个 Keyword 关键词触发器
空白处右键 → Inputs → Keyword
触发关键词设置为 sybj
,Title 处添写发送{query}到思源
,这里的 Title 内容会显示在输入框的下方,{query}会被替换成我们输入的内容。
- 创建一个 Run Script 的方法
空白处右键 → Actions → Run Script
将语言设置为 /bin/bash ,其他选项如图,然后将下方代码填入Script 处
- with input as {query}:将输入存储成一个变量
- 脚本部分的意思是运行一个 index.js 脚本,然后将 {query} 的值传过去
- 创建一个 Post Notification 弹窗
空白处右键 → Outputs → Post Notification
将 Title 设置为 {query},我们就能接收到从上一个模块传递过来的值,将其作为弹窗的标题内容
- 我们将这三个模块用线连接起来,数据就可以在它们中间传递了
Keywork 输出的值将传递给 Run Script 作为输入,同样的,Run Script 的输出值将传递给 Post Notification 作为输入
- 打开这个 workflow 的文件夹
在 workflow 上右键 → Open in Finder
- 我们使用 VSCode 打开这个文件夹,然后打开终端,输入
npm init
进行项目初始化 - 在 package.json 中添加
"type": "module"
- 在项目中安装 Alfy,
npm install alfy
- 在项目根目录创建一个
index.js
文件,然后将afly
引用即可使用
项目经验
脚本对外如何输出一个值
使用 console.log('🎉 发送成功!')
即可输出一个值,传递给下一个模块
下一个模块使用 {query} 即可接收
如何获取在 Workflow 中设置的环境变量
使用 process.env['TOKEN']
即可以获取环境变量
如何避免输入文字过程中多次发送请求
我最开始是直接使用的 Script Filter 模块,就是将输入和运行脚本放在一起设置,出现了的问题就是在输入文字的过程中会多次执行脚本发送请求,解决方法是将输入和执行脚本分开,使用 Keywork 模块进行文字输入,然后将值传递给 Run Script ,再运行脚本。