构建自己高效的workflow

喜欢去探索各种效率工具,自然离不开alfred。alfred可以完成很多事情,其中包括打开各种app,搜索文件,搜索引擎等太多了。

这篇文章主要是记录 关于 Alfred的workflow的开发

alfred 插件开发概述

Workflow 是alfred2.0推出的最激动人心的特性, 通过与脚本语言的交互,workflow可以支持任意操作,把您日常的重复性事务封装在脚本中,大大的提高工作效率。

Workflow 支持php、bash、perl、ruby以及python作为脚本语言,并内置脚本语言解释器,并通过stdio的形式在各个脚本模块中传递参数。

在代码中插入 {query}块可以接收上一个脚本输出的内容。形成完整的控制链条。 最后由alfred输出至 Output 模块, 在Output模块中, 我们可以启动浏览器、将内容复制到剪切板、 启动通知中心、甚至执行bash脚本。
在日常的使用中,我们通常通过关键字来调用某一模块,例如“find xxx” 即是调用find内建模块 query内容为xxx。 在workflow的开发中, 开发者可以自定义自己编写模块的关键字,只要不与其他模块冲突即可。
在workflow的结构中,数据流通过alfred的控制线进行传递,每一个脚本模块的STDIO输出会被alfred替换到 下一个脚本的{query}块中。

创建一个新的workflow

  1. 首先点击workflow
  2. 创建一个workflow

image.png

然后图里的主要是Bundle Id ,主要就是唯一、description等这些看自己,都是一些无关键要的东西。可以简单对你的脚本进行描述或者是一个良好的命名或者也行了。

image.png

创建一个带有输入参数得workflow

然后就是选中之前创建的workflow。在右侧选中input,如下图所示。比如我们这里是创建一个关于时间戳转换的脚本,可以选择input里的Script Filter

image.png

然后出来以下这个界面,keyword就是唤醒的关键键。

如果这里是Python脚本的话,language这里是要选择/bin/zsh的,然后如果你的脚本是需要输入参数的话。后面要跟上wtih input as {query},如果你的脚步完全不依赖于外部库的话,也是可以直接在这里写的

然后 Script 这里的话是需要写你运行的脚本的路径

image.png

然后打开上图中 问号旁边的文件夹,会看到这样一个文件。接下来要做的事情就是要把python3有关的workflow代码放在这里去。

image.png

这里有一个不小的坑,然后网上大部分帖子都是粘贴复制,所以很多都还是n多年前复制过来的,因为原始仓库里只有python2的代码,python3不支持部分库了,所以我是根据 这里的一个仓库,clone下来后,其实只需要workflow里的代码就行。所以最终你会看到这样一个目录

image.png

另外附上t.py里的代码

1
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
46
47
48
49
50
51
52
import requests
import re
import sys

from datetime import datetime
from workflow import Workflow3

S = requests.Session()

REGEXP_TIMESTAMP = r'^\d+$'


def convert_timestamp_to_datetime(timestamp):
try:
timestamp = int(timestamp)
dt_object = datetime.utcfromtimestamp(timestamp)
return dt_object.strftime('%Y-%m-%d %H:%M:%S')
except ValueError:
return "Invalid timestamp"


def generate_feedback_results(judge_code, result):
wf = Workflow3()
if judge_code == 1:
kwargs = {
'title': result,
'subtitle': '',
"valid": True,
'arg': result
}
else:
kwargs = {
'title': result,
'subtitle': '',
'valid': False
}
wf.add_item(**kwargs)
wf.send_feedback()


def main():
timestamp = sys.argv[1]
if len(re.findall(REGEXP_TIMESTAMP, timestamp)) > 0:
result = convert_timestamp_to_datetime(timestamp)
generate_feedback_results(1, result)
else:
generate_feedback_results(0, "Invalid timestamp")


if __name__ == "__main__":
main()

然后效果大概就是这样了

image.png

其实类似于这些的话也能在python里通过参数来实现,也就是终端,但是如果是多方的一些东西的话,可能还是借助于该工具比较好

创建一个带有无参数得workflow

然后可能也有会有这样的需求,比如根据python处理后的结果,然后需要自动把这个结果比如复制到粘贴板里面去。然后就这样这样做

image.png

选择一个outputs,然后再选择copy to clipboard 。

这样输入now的时候,就会自动显示时间戳还能复制到粘贴板里面去了

image.png

从debug里的日志也能看出来

image.png

debug 模式

当然在创建workflow的过程中,还是比较顺畅的,如果要开启debug模式也很简单。

image.png

这里就能完美开启了

其他

比如在项目中会经常用ide打开某一些开发的应用,也可以一套流程下来。一键启动打开。如果大家有啥好玩的workflow也可以交流交流

分享到 评论