创建alfred workflow并返回结果

alfred workflow的基本创建流程

之前有写过一个利用alfred workflow来上传图片到图床,并返回markdown地址
由于之前返回结果就直接存在于剪贴板中,并不需要展示出来供用户来查看,选择,因此不涉及返回结果给alfred并展示的过程
因此,这次做了一个workflow的展示版本

base64编码的workflow

由于平时偶尔会使用base64来编码一个字符串或者解码,因此简单创建一个workflow来达到该目的

创建空白workflow,设置关键字触发

  • 具体操作和之前的一样

创建空白workflow

必填

  • bundle id是必填的,格式也就是域名反过来,这点和java中的类名有点类似
  • 可以选择一个图片到该workflow里面

创建一个script fliter

这里还是使用python来作为脚本
使用bash来传参,调用该脚本

创建脚本

  • keyword关键字,利用关键字触发
  • language代表下面的script语法,这里选择input的参数,一般选择下一个
  • 脚本内容就只是一个将用户的输入作为参数,传入执行的脚本中

创建执行脚本

在workflow所在的目录,创建执行脚本
执行脚本的名字必须和上面调用的执行脚本文件名字一样
例如上面是python *base64encode.py* "{query}",这里加粗的就是要创建的执行脚本名称

脚本目录

  • 这里是我写的这个workflow的执行脚本内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import json
import base64


args = sys.argv
if len(args) <= 1:
result = u"No result"
else:
result = base64.b64decode(args[1])
output = {"items": [
{
"title": result,
"arg": result,
"valid": True
}
]}


sys.stdout.write(json.dumps(output, sys.stdout, indent=4))

注意点

  1. 需要注意的地方是,alfred接收的展示结果必须是json或者是xml,上面的output内容就是一个json格式的字符串
  2. 关键参数,title是必填的,它代表alfred要展示的结果(下拉菜单里面的具体内容)
  3. 还有一个subtitle,可以作为title的补充,如果需要的话,可以在items这个数中加入这个参数,字体会比title
  4. arg参数,代表了要传给临近的一个filter的结果,由于我这边希望转码了以后,用户回车选择后,传入剪贴板,因此需要这个参数
  5. valid代表了用户敲入回车后返回,虽然文档里面写的这个值默认是True,但是经过测试发现,如果不加这个参数,回车不起作用,只能是command + 具体数字

加入返回结果到剪贴板的动作

可以直接拖动script filter右边缘的节点,像思维导图的下一个节点一样,拖动到空白地方,然后选择一个动作

创建动作

  • 这里的{query}就代表了,上一个动作传给该动作的参数,也就是arg里面的东西