前言
很多人mac上都安装了Alfred这款软件,这款软件称之为效率神器,怎么形容这个软件呢?我个人认为他就是一个完全定制化的搜索框,一个搜索框能做你想做的所有事情,那么大家在用Alfred这款软件也肯定会装各式各样的Alfred workflow插件(这个是高级收费版才有,相信大家有办法),但是有没有想过,这个插件到底怎么开发的呢,或者说当自己的需求网上找不到类似的插件怎么办呢? 本人刚好就有类似的需求,下文用这个案例来讲解,怎么定制属于自己的Alfred Workflow!
需求
本人有很多小工具,都是需要用命令行来启动,比如jadx,那现在就是想通过在Alfred里面通过快捷键弹出所有工具,这样省得每次都要输一长串命令,如下图:
需求分析
- 怎么增加一个自己的Alfred Workflow插件
- 怎么设置Alfred Workflow的快捷键
- 既然要弹出这么多个item,肯定要告诉Alfred,每个条目的标题,描述,图标,执行的命令
- 选择一个item后,怎么执行这个item
增加一个Alfred Workflow
首先打开Alfred的设置页面,然后进入到Workflow选择下图的➕ ,然后选择blank workflow说明是一个空的(提示:其实这里是有很多模板的,我们选择一个空workflow是为了学习用)
完成后会显示一个自己定义的插件:如图
设置快捷键,输入后可以显示多个条目
一个插件就是由很多脚本程序组合而成的,脚本的类型很多,这里就不一一举例,只说明用到的脚本类型,在自己脚本黑色区域右键鼠标 -> 选择Inputs -> Script Filer -> 设置脚本
脚本的大概意思是: 添加一个输入脚本,脚本的语言用php,关键词用tool
上面我们用到了本地的php文件,那么可以通过右键插件选择open in finder打开插件的目录,创建这个php文件,如果用其他语言也一样,创建其他语言的文件执行,甚至可以直接将代码写到输入框里面
要想显示item需要脚本返回特定格式的数据给插件,既然用的php,我们知道返回数据是用echo “xxx”,下面我们就展示应该返回的数据结构
举例:
{
"items": [
{
"uid": "Android Device Monitor",
"title": "Android Device Monitor",
"subtitle": "open Android Device Monitor",
"arg": "nohup \/Users\/fuheng\/Library\/Android\/sdk\/tools\/monitor > \/dev\/null &",
"icon": {
"path": "\/Users\/fuheng\/tool\/clipboardTool.jar",
"type": "fileicon"
},
"valid": true,
"type": "default",
}
]
}
参数 | 解释 |
---|---|
items | 数组的节点名 |
uid | item的id |
title | 标题 |
subtitle | 子标题 |
arg | 参数 |
icon | 图标 |
valid | 该item是否是可执行 |
type | 类型 |
我们只要返回这样的数据结构给脚本,就会自动识别,显示items下面数组的条目,具体是怎么返回,就看自己做什么,也可以什么都不做直接返回一个死数据.
右上角有个小瓢虫,可以显示出返回的数据
选择一个item后,执行这个item
看到这里那么我们第一个输入脚本已经写好了,我们需要加一个执行脚本,执行我们传过来的参数,我们右键(如图)Actions -> Run Script -> 设置脚本
然后将两个脚本连起来
脚本的大概意思就是: 添加了一个执行脚本, 使用bash语言,并且执行传过来的参数
注意
当我们输入指定的关键词时,搜索框就会显示插件名称,输入完插件关键词加上空格之后的就是参数,输入参数时,每输入一个字母都会调用脚本,所以我们可以匹配输入的参数显示合适的item,如图
其实代码很简单,就是在添加item的时候加了个参数判断
function addToolItem($query, $name, $subtitle, $shell) {
if (empty($query) || self::startWith($name, $query)) {
$item = new Item();
...
$this->addItem($item);
}
}
相信自己动手后肯定能做出自己满意的插件,如果有地方不懂的可以评论区问我