# 一.简单介绍
# 1.我们需要什么样的工具呢?
你是否有以下困扰?
- 有一个网站经常打开,我希望一键打开,因为先打开浏览,再输入网址,这样太慢了
- 我的垃圾箱需要清空了,我想一键清空,不想每次都去右键清空,这样太慢了
- 我想一键知道我的本机 ip,不想一步一步去终端查看,这样太慢了
- 我想一键启停 tizi,不想一步一步的去打开 app,再找到对应的功能,这样太慢了
- 我想一键获取某个看到的颜色,如何一键获取它的 RGB 呢?
- 如何一键打开 CSDN(Github,京东,知乎,淘宝等等),并在打开的基础上自动加上关键词搜索呢?
- 如何不打开翻译软件或网页的情况下,一键翻译单词或者文本呢?并自动复制翻译结果呢?
- 如何根据输入的文件名,自动创建文件呢?
- 在访达的某个路径,如何一键打开终端的相对路径?
- 在终端的某个路径,如何一键打开访达的相对路径?
- 如何用一个指令,一键打开 chrome 的扩展程序,商店,书签,清空缓存,下载呢?
- 如何一键打开 CDSN 的主页,发布页,文章配图,文章管理页,私信页呢?
- 如何一键提交代码修改,并部署项目?
- 如何在全屏看视频的情况,不退出全屏的情况下,添加滴答清单任务?
- 如何在没打开 idea 的情况下,一键打开 idea 的最近项目?
- 如何一键打开 app 的全局搜索,并自动填入要搜索的关键字?
- 在蓝湖有密码的情况下,如何一键打开需要密码登录的网页?
# 2.什么是 workflow?
Alfred 是一个用于 macOS 的强大的应用程序启动器和工具增强工具,它允许用户通过快捷键来快速搜索文件、应用程序、执行各种操作以及自定义工作流。Alfred 的工作流(Workflows)是它的一个核心功能,它允许用户创建自定义自动化任务和工作流程来增强他们的工作效率。
# 3.workflow 的功能
以下是关于 Alfred 的工作流的一些重要概念和功能:
自定义操作和任务: Alfred 的工作流可以包含一系列自定义操作,如搜索、运行脚本、打开应用程序、查找文件、发送电子邮件等。这些操作可以按特定的顺序组合在一起以执行复杂的任务。
快捷键触发: 用户可以为工作流分配快捷键触发器,以便通过按下指定的快捷键来启动工作流。这使得执行特定任务变得非常快捷。
自定义搜索: 用户可以创建自定义搜索工作流,使其能够搜索特定网站、文档、或其他数据源。这允许用户在 Alfred 中执行搜索操作而不必打开浏览器或其他应用程序。
数据处理和过滤: 工作流还可以处理和过滤数据,以提供更有用的信息或执行特定的操作。这包括文本操作、筛选、排序和格式化数据。
外部触发和集成: Alfred 的工作流还支持与外部应用程序和服务的集成,如发送通知、与日历集成、操作文件、调用 Web API 等。
社区创建和共享: Alfred 社区创建了大量的工作流,其中一些可以免费或付费下载和使用。这使用户能够分享和获得其他人创建的工作流,以提高他们的生产力。
Alfred 的工作流是一个功能强大的工具,它可以帮助用户简化日常任务、提高工作效率,以及执行自定义自动化操作。它是 macOS 用户的一种有用的增强工具,可以根据个人需求进行高度定制。
# 二.Triggers
# 1.触发器概览
- Hotkey
- Remote
- Snippet
- External
- File Action
- Universal Action
- Contact Action
- Fallback Search
# 2.热键 Hotkey
Hotkey 相当于全局快捷键,可以快速唤起全局指令,最神奇的是它可以跟上自定义的参数
- 优点是快捷方便
- 缺点是快捷键记不住
- 可以跟上参数,也可以不跟上参数,看使用场景
- 还可以绑定指定 APP,只针对指定 app 生效
- 参数还可以是当前剪切板的内容
- 参数通过{query}进行使用
# 三.Inputs
# 1.概览
- Keyword
- File Filter
- Running Apps Filter
- Dictionary Lookup
- List Filter
- Script Filter
# 2.Keyword
Keyword 是关键字指令,在打开 alfred 的情况下,通过输入关键字进行选择需要执行的指令
- 有点和 Hotkey 类似,但是不需要记住繁多的快捷键
- 相同的快捷键,只需要给出不同的别名和图标就能进行区分
- 可以添加参数,也可以不要参数
- 参数支持自定义输入
- 后续操作通过{query}进行参数使用
# 四.Actions
# 1.概览
Triggers 和 Inputs 只是触发我们需要和想做的事情,关键神器的地方从 Actions 开始,Actions 是我们想去做的操作,下面我们来一一介绍神器的使用
- Open File
- Launch Apps / Files
- Reveal File in Finder
- Browse in Terminal
- Browse in Alfred
- Action in Alfred
- File Buffer
- Default Web Search
- Open URL
- Run Script
- Run NSAppleScript
- Terminal Command
# 2.Open File
- Open File 是打开指定文件
- 只需要输入文件的地址即可
- 还可以指定打开文件的 app
- 在长流程中还是相当实用
# 3.Launch Apps / Files
- 打开 app 或者文件夹
- 支持同时打开多个 app 或者文件夹
- 这个功能不必多介绍,很常用
# 4.Reveal File in Finder
- 在访达中打开文件
- 也比较常用
# 5.Browse in Terminal
- 在终端中打开文件
- 也比较常用
- 通常和 Reveal File in Finder 配合使用
- 比如 我们现在在访达的位置,我们需要到终端当前目录,很实用
- 比如 我们现在在终端的位置,我们需要到访达当前目录,很实用
# 6.Browse in Alfred
- 在指定文件夹下搜文件
- 快捷搜索文件
- 可以直接到达文件的位置 a
# 7.Default Web Search
- 设置默认搜索网址
- 可以自定义网址
# 8.Open URL
- 非常实用
- 打开指定 url
- 网页一键直达,很方便实用
# 9.Run Script
- 运行脚本,可以带参数,也可以不带参数
- 支持多种语言
- 支持 shell
- 支持 python
- 支持 JavaScript
- 支持 ruby
- 支持 php
# 10.Run NSAppleScript
- 苹果 apple 脚本
- 用于通过键盘指令操作电脑
- 下面脚本的功能是在当前打开的文件,复制内容,并关闭文件
- 也很实用,如果有不同的语法,可以寻求 chatgpt,再不断优化
on alfred_script()
tell application "System Events"
keystroke "a" using command down
delay 1
keystroke "c" using command down
delay 1
keystroke "w" using command down
delay 1
end tell
end alfred_script
2
3
4
5
6
7
8
9
10
# 11.Terminal Command
- 终端命令
- 最常用的命令之一
cd /Users/qinyingjie/Documents/idea-workspace/vue-springboot-kwan
mvn package -Dmaven.test.skip=true
2
# 五.Automations
# 1.概览
- Automation Task
- Run Shortcut
- System Command
- Music Command
# 2.Automation Task
- 自动任务,比如一键关闭指定应用
- 还有许多其他自定义功能
# 3.Run Shortcut
- 一键执行快捷指令中的指令
- 比快捷指令更快的快捷指令
# 4.System Command
- 一键清空垃圾箱
- 一键开关机
- 一键重启
- 休眠
- 等等其他功能
# 六.Utilities
# 1.概览
一些工具类,平时用的不多,还需要根据需求进行开发
- Arg and Vars
- Split Arg
- Join Args
- Junction
- Conditional
- Dialog Conditional
- File Conditional
- Filter
- Delay
- Transform
- Replace
- Random
- Hide Alfred
- Show Alfred
- JSON Config
- Debug
# 2.Random
- 随机生成数据
- 可以是 UUID
- 可以是 number
- 可以是 list 中的 word
# 七.Outputs
# 1.概览
- Post Notification
- Large Type
- Copy to Clipboard
- Write Text File
- Play Sound
- Speak
- Dispatch Key Combo
- Call External Trigger
# 2.Copy to Clipboard
- 复制到剪切板
- 在流程中经常遇到
# 3.Write Text File
- 将数据写入文件
- 将中间计算的结果写入文件
# 4.Speak
- 朗读结果
# 八.workflow
# 1.下载网站
参考网站:
- https://www.packal.org/workflow-search
- https://alfred.app/workflows/ 官网
- https://vika.cn/share/shrSQy9vTf6yVzt58CSD8/fodrCtwMPbeGM
- https://www.alfredapp.com/workflows/
- https://github.com/alfred-workflows/awesome-alfred-workflows
- https://github.com/learn-anything/alfred-workflows
# 2.我的 workflow 配置
# 3.基础操作配置
带不带参数:
# 4.TerminalFinder
访达和 iterm2 互换
通过终端打开访达:
通过访达打开终端:
# 5.词典搜索
1.下载插件
https://github.com/wensonsmith/YoudaoTranslator/wiki
双击自动引入到 alfred
2.有道智云
按图操作可以获取到 appKey 和 secret,然后填入到 alfred 中
https://ai.youdao.com/console/#/
3.测试功能
4.复制结果
上下键进行选择结果,按 enter 键进行复制,可以直接 command+c 到文本编辑器
5.脚本说明
# 6.百度一下
- 新建工作流
- 配置 keyword
- 配置快捷键
- open url
配置一键打开百度,有点多余,只是为了测试workfolw:
一键打开kwan的解忧杂货铺:
# 7.github
alfred-github-workflow (opens new window)
- 安装 php 环境
- 下载github.alfredworkflow (opens new window)
- 首先需要登录 github
如何使用:
- gh my dashboard 仪表板
- gh my profile 首页
- gh my repos 仓库
- gh my repos new 新建仓库页面
- gh my settings
# 8.NSC
- decimal 十进制转二进制
- binary 二进制转十进制
- octal 八进制转十进制
- hex 十六进制
# 9.键盘指令
NSApplescript:执行 apple 脚本,加入键盘指令可以做到很多事情
on alfred_script(q)
tell application "Finder"
set the clipboard to (POSIX path of (folder of the front window as alias))
end tell
tell application "System Events"
keystroke "g" using {command down, shift down}
delay 0.05
keystroke "v" using command down
delay 0.05
key code 36
end tell
end alfred_script
2
3
4
5
6
7
8
9
10
11
12
# 10.quick switch
- 打开需要下载到的访达位置
- 下载
- F19+g 自动到下载地址
- 不要自动粘贴
# 11.VSCode 打开文件
- code:使用 vscode 打开文件
- codef:搜索文件并用 vscode 打开
# 12.get app icon
- icon 快捷键
- 选择 app
# 13.About this mac
显示 mac 的信息
# 14.homebrew
使用 brew 安装软件和脚本
# 15.man
使用 man 查看命令的 api 信息
**
# 16.new file
快速新建文件
# 17.show mac desktop
F17+D 快速显示桌面
# 18.驼峰命名
新版地址,老版本失效了
https://github.com/liuarui/CodeVar?tab=readme-ov-file
- 小驼峰命名法:xt
- 大驼峰命名法:dt
- 下划线命名法:xh
- 常量命名法:cl
- 中划线命名法:zh
# 19.colors
- F19+colors
- 输入 rgb 得到调色板
- 输入颜色英文单词,得到色彩的值
# 20.Dash
利用 dash 查询 api
# 21.Automation Task
- 配置一键退出应用
- Automation Task 中的功能需要多看看,玩法很多
# 22.纪元时间
https://github.com/snooze92/alfred-epoch-converter
# 23.如何最快的 GPT
原理就是把参数通过剪切板传参,然后通过 AppleScript 进行键盘操作
# 24.时间戳
https://www.packal.org/workflow/moment
# 25.json 工具
https://www.packal.org/workflow/json-tools
- 格式化
- 紧凑
- 转义
- 解转义
# 26.备忘录搜索
https://github.com/sballin/alfred-search-notes-app
# 27.Homebrew 管理
https://www.packal.org/workflow/homebrew-and-cask-alfred
快速安装软件包
# 28.新建文件
https://github.com/zzhanghub/alfred-template-file
# 29.man
https://github.com/isometry/alfred-man
# 30.random
https://github.com/sampayo/alfred-workflow-randomeverything
# 31.计算日期
https://github.com/giovannicoppola/alfred-DateCalculator
# 32.mvn
https://github.com/xfslove/alfred-mvns
# 33.进制转换
https://github.com/xiaomingplus/convert
# 九.Apple 脚本
# 1.基本语法
on alfred_script(q)
tell application "System Events"
keystroke "n" using command down
delay 0.05
keystroke "v" using command down
delay 0.1
keystroke "v" using command down
end tell
end alfred_script
2
3
4
5
6
7
8
9
# 2.idea 最近项目
on alfred_script(q)
tell application "System Events"
keystroke "e" using {command down,control down,shift down,option down}
delay 0.05
end tell
end alfred_script
2
3
4
5
6
# 3.vs 全局搜索
on alfred_script(q)
tell application "System Events"
keystroke "f" using {command down,shift down}
delay 0.05
keystroke "v" using command down
end tell
end alfred_script
2
3
4
5
6
7
# 4.idea 全局搜索
on alfred_script(q)
tell application "System Events"
keystroke "f" using {command down,shift down}
delay 0.05
keystroke "v" using command down
end tell
end alfred_script
2
3
4
5
6
7
# 5.滴答清单
on alfred_script(q)
tell application "System Events"
keystroke "l" using command down
delay 1
keystroke "v" using command down
delay 0.5
keystroke return
delay 1.5
keystroke return
end tell
end alfred_script
2
3
4
5
6
7
8
9
10
11
# 6.一键蓝湖
on alfred_script()
tell application "System Events"
keystroke "a" using command down
delay 1
keystroke "c" using command down
delay 1
end tell
end alfred_script
2
3
4
5
6
7
8
on alfred_script()
tell application "System Events"
keystroke "v" using command down
delay 0.05
end tell
end alfred_script
2
3
4
5
6
# 7.常用代码
command+n
keystroke "n" using command down
延迟时间
delay 0.05
enter 键
keystroke return
# 十.Python 自定义
# 1.需求说明
如何使用 python 自定义一个 workflow,实现自己想要的功能?
比如我希望一键查出我儿子出生了多少天,因为我只知道出生日期,出生了多少天需要计算,所以这个场景可以很好的演示 python 自定义 workflow 的作用
- 查询儿子出生日期
- 查询家人生日
- 使用 gpt 查询问题
# 2.参数说明
在 Alfred 中,Workflow 用于自动化和自定义各种任务。你所提到的 JSON 对象看起来是一个用来生成 Alfred Workflow 的结果的格式。这个 JSON 对象的字段具体如下:
type
:- 含义: 指定项目的类型。在 Alfred 的 Workflow 中,这通常决定了项目如何被处理和展示。
- 值:
"file"
: 表示这是一个文件项,通常与文件系统操作相关。"default"
: 表示默认类型,一般用于生成普通的搜索结果项。- 其他可能的值取决于具体的 Alfred 版本或插件。
title
:- 含义: 显示在 Alfred 搜索结果中的主要标题。
- 值: 一个字符串,通常是用来描述或标识项的名称。例如,
'11月17'
表示日期,可能用于展示一个特别的事件或提醒。
subtitle
:- 含义: 显示在
title
下面的副标题,用来提供更多的信息或描述。 - 值: 一个字符串,提供额外的上下文或说明。例如,
"老婆生日"
用来说明这个日期是老婆的生日。
- 含义: 显示在
arg
:- 含义: 传递给后续处理脚本的参数。这可以用来在选择某个项后执行特定的操作或传递数据。
- 值: 一个字符串,通常是一个用于进一步处理的值或标识符。例如,
'11月17'
表示日期,并可能在后续操作中使用。
# 3.常见的字段解释
在 Alfred Workflow 的 JSON 结果中,通常包括以下字段:
items
: 一个数组,包含要展示的项目列表。type
: 设定项的类型,比如file
、default
等。title
: 项目的标题。subtitle
: 项目的副标题。arg
: 点击该项时传递的参数。icon
: (可选)指定图标,用来为项提供视觉提示。mods
: (可选)定义与项关联的修饰键(如 Cmd、Alt、Shift)和它们的行为。valid
: (可选)一个布尔值,指示项是否有效(例如,是否可以选择)。
不同的 Alfred 插件或脚本可能会定义额外的字段或使用不同的字段名称,但大多数情况下,这些是最基本和常用的字段。
import json
result = {
"items": [
{
"type": "file",
"title": '11月17',
"subtitle": "老婆生日",
"arg": '11月17'
},
]
}
finalResult = json.dumps(result)
print(finalResult)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 4.不带参数
# 1.python 脚本
# Script to parse u, i, o, j, k, and I keys into a virtual number pad
# The upper row parsing goes as follows u= 4, i= 5, o=
# The lower row parsing goes as j=1, k=2, l=3
import json
import datetime
# Makes my initial string variable to start working with
# and then starts converting certain letters into numbers
# 获取今天的日期
today = datetime.datetime.now()
# 定义目标日期
target_date = datetime.datetime(2023, 6, 6)
# 计算相差的天数
difference_days = (today - target_date).days
# 计算相差的月数,这里我们使用 ceil 函数来确保至少一个月
difference_months = (difference_days - 1) // 30
# 输出结果
# print(f"今天到2023年6月6日的月数是: {difference_months} 月")
# print(f"今天到2023年6月6日的天数是: {difference_days} 天")
# The json that Alfred requires is below
result = {"items": [
{
"type": "file",
"title": difference_days,
"subtitle": "儿子出生天数",
"arg": difference_days
}, {
"type": "file",
"title": difference_months,
"subtitle": "儿子出生月数",
"arg": difference_months
}
]}
# Make the result useable by Alfred
finalResult = json.dumps(result)
# Passes the result json (made into a string first)
print(finalResult)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 2.界面显示
# 2.Script Filter
# 3.Post Notification
# 4.Copy to Clipboard
# 5.效果展示
# 5.带参数
# 1.python 脚本
# Script to parse u, i, o, j, k, and I keys into a virtual number pad
# The upper row parsing goes as follows u= 4, i= 5, o=
# The lower row parsing goes as j=1, k=2, l=3
import json
import sys
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
args = sys.argv[1]
if len(args) > 0:
# 配置API密钥和模型
model = ChatOpenAI(
openai_api_key="xxxxxxxxxxxx",
openai_api_base="x",
openai_api_base="xxxxxxxxxxxx",
model_name="gpt-4o",
temperature=0.0,
request_timeout=20,
max_retries=5,
)
# 创建prompt和parser
prompt = ChatPromptTemplate.from_template("你是一个智能助手,请回答问题:{question}")
parser = StrOutputParser()
chain = prompt | model | parser
res = chain.invoke({"question": args})
result = {"items": [
{
"type": "file",
"title": res,
"subtitle": args,
"arg": res
}
]}
# Make the result useable by Alfred
finalResult = json.dumps(result)
# Passes the result json (made into a string first)
print(finalResult)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 2.界面展示
# 3.Script Filter
第一次使用需要先安装依赖
python3 -m venv path/to/venv source path/to/venv/bin/activate python3 -m pip install langchain-openai python3 -m pip install langchain_core