编写 Alfred Workflow

    Mac Tools

Alfred 是 Mac 上重要的生产力工具,可自定义的工作流(Workflow)是它的招牌功能,其作用相当于轻量级的 App,将日常重复繁琐的操作简化成一条简单的命令,进而提高效率。本文将教你如何创造 Workflow 。

PS:
你需要购买 Alfred 的 Powerpack 才能使用 Workflow 功能。


开始之前

每当看到程序员准备造物时,班长总会情不自禁地分享他的庸俗境界:

身为程序员,没事不要写程序。

班长

事实上,社区里已经存在近 1000 个别人写好的 Workflow,你可以在 Alfred 的官方网站看到推荐的常用 Workflow,你也可以到 Packal 这个社区里,搜索更多适合你的 Workflow。

通过双击下载下来的 .workflow 文件,就可以导入 Alfred 里了。下载的页面会说明使用方法,一般都是关键词命令,后接参数。比如这个叫做 Simple Timer 的 Workflow,用的是这样的语法:timer [时间] [信息] (设定一段时间后弹出对应的信息内容进行提醒)

不过在很多情况下,每个人的生产方式是高度差异化的,所以最终,我们很可能还是不得不自己动手。

根据「行动先于思考」的学习原则,我们先不管为什么和是什么,而是马上动手实现一个简单的 Workflow 再吐槽。

PS:
注意哦,一定要不加思索地跟着往下做,不要管为什么哈……^_^


Wi-Fi Toggle

这一小节,我们将创建一个打开和关闭 Wi-Fi 的 Workflow

  • 第一步,打开 Alfred 的 Preferences,点击 + 新建一个空白的 Workflow

  • 第二步,填入下图的数据(你可以把 Create By 这栏的作者名换成你自己)

  • 第三步,黑区域右键新建 Workflow 对象:「 Inputs 」->「 Keyword 」

  • 第四步,如下图设置 Keyword 对象的各个参数,并保存:

  • 第五步,右键新建第二个 Workflow 对象:「 Actions 」->「 Run Script 」

  • 第六步,如图所示设置 Run Script 对象,并保存:
    其中,填入 Script 一栏的代码如下

    networksetup -setairportpower en0 $1
    
    ## 如果你在终端(terminal)中直接输入这段代码可以开关 Wifi
    ## 不过在终端(terminal)里,上面的 $1 要替换成「 on 」或者「 off 」
    
  • 第七步,选中 Keyword 对象,拖拽边缘的凸起,连接 Run Script 对象:

小功告成!现在可以通过 Alfred 使用 wifi [on/off] 指令快速开关 Wifi 了

快速解说:
上述实现 Wi-Fi Toggle 的 Workflow 本质上是实现终端中的一段命令:

$ networksetup -setairportpower en0 on

## 在终端(terminal)中直接输入这段代码可以打开 Wifi
## 注意到,在终端(terminal)里,「 第六步 」中的 $1 要替换成「 on 」或者「 off 」
##「 第六步 」中的 $1 其实代表的是 Keyword 对象中传过来的参数,即「 on 」或者「 off 」
##「 第七步 」的连接操作指明了参数的传递方向:「 Keyword 」->「 Run Script 」

按需学习

从上面的例子里我们不难发现,创建 Alfred 的 Workflow 大体只有三个环节:

  • 建立各种功能对象(Object)

  • 设计各参数(Argument)在这些对象(Object)之间的传递方向

  • 按照所设计的参数(Argument)传递方向连接这些对象(Object)

短时间掌握所有对象的用法是非常反人类的,我们采用「 需要时再说 」的哲学,所以这里只需要学会以下关于搜索的两招就行了:

  1. 第一招,通过左下角的「 + 」->「 Getting Started 」建立出 Workflow ,这些 Workflow 介绍了常用的对象(Object)和 常用的 Worflow 套路

  2. 第二招,双击对象(Object)可以调出该对象的设置面板,单击左下角的问号可以调出该对象的使用文档,里面有例子教你如何使用


总结

基本上,如果你做完了本教程 WiFi 的 Workflow ,你就已经入门。

如果你花半小时把上面第一招中提到的「 Getting Started 」里的十个 Workflow 看过一遍,你就已经具备所有关于 Workflow 的知识,能看懂并修改别人的 Workflow 了。

然而,实现复杂功能(所谓 Simplicity is hidden complexity,让生产力提高好几个量级的超实用型 Workflow 通常是复杂的)需要的是 Workflow 之外的技能,比如要会使用网站的 API,比如会使用 Ruby 、Python 之类的编程语言等等,而这些技能已经超出了本教程的篇幅,需要大家自行修炼。

了解了 Alfred 的 Workflow 功能仅仅只是让我们的技能池里又多了一块积木,这块积木需要搭配其他积木才能正常使用。上述教程让大家学会了 Workflow 如何搭配其他积木进行使用,至于如何获得其他积木,则是另一个话题了。通常班长会建议优先修改别人已经写好的 Workflow ,正像他庸俗境界描述的那样:

身为程序员,没什么事的话……不要写程序。

班长

打赏