mac 效率神器 Alfred

mac 下自带的Spotlight只能进行本地文件的搜索,速度超级慢,今天给大家推荐个提高工作效率的神器-Alfred。


Alfred 是一个功能超级强大的工具,他除了能够搜索本地文件、应用还能经过定制后搜索互联网上的内容,除此之外,workflow 为用户提供了可定制化的服务,用户可以自行编写插件来实现查询。

能干啥

说了这么多,让我们从一个常用的场景来感受下它的效率:

从前,我们要去谷歌搜索一个东西,我们需要:

1.打开浏览器
2.输入网址
3.在谷歌的搜索栏中输入内容,然后点击搜索

嗯,我们需要至少3步。那么有了 alfred,只需要,快捷键启动 alfred,然后输入你需要搜索的内容,回车就 ok 了。比如要搜索 Java 编程思想,我们 command + 空格调出 alfred 直接输入关键词,他默认可以去谷歌、亚马逊 维基百科搜索,当然你可以自行定制更多的搜索引擎。

然后回车,直接打开浏览器给出搜索结果

上面这个是浏览器搜索,那么比如在举一个例子,程序员经常要给变量、常量起名字,这个名字真的是太难想了,我们常见的命名方式有驼峰、下划线,用 workflow 自己写个插件直接输入汉字,就能给出变量名:

当然,这个得借助 workflow 来实现了

在举个例子,我要查询个域名是否备案,直接输入 域名即可查询

查询 ip 地址归属

搜索 github 上的项目

搜索浏览器的书签

计算器

哇,说了这么多,是不是感觉很多事情在一个框内就能完成

怎么编写 workflow

其实有很多现成的 workflow 文件,可以去网上搜,但是有时候我们自己的需求可能 一些插件不能满足我们的需求,那么我们可以自己动手写,怎么写呢?

1.首先,我们打开 alfred 的 Preferences –切换到 workflows

点击+号,新建一个空的 workflow

输入名称 描述等,比如我们要实现一个备案信息查询的功能

新建完成之后,如图所示

在右侧这个黑色的工作区,我们点击右键 新建一个脚本,选择 input –script Filter

如图所示

其中

  • keywrod 是我们要在搜索框中查询的前缀,比如我们要查询 awen.me 这个域名,我们就需要输入icp 然后在输入 awen.me 查询

我们使用 python 去编写这个备案查询的工具, 语言选 bash,然后选择 with input as {query} ,如图所示设置完之后,点击右下角的按钮,打开这个项目的目录,我们需要添加几个文件和目录,其中 info.plist 是自带的,其他都需要单独添加

编写 workflow 插件

这个目录的路径 在

cd ~/Library/Application Support/Alfred 3/Alfred.alfredpreferences/workflows/user.workflow.CF54DF51-50FA-44F8-BBD0-B818F30FDF8B

我们进入到这个目录,执行

pip install --target=. Alfred-Workflow\n

就得到workflow 这个目录了,这个目录下都是workflow 的 python 库,目前只能使用 python2.x 编写插件。当然其他语言也是支持的。比如 shell php ruby 等。

beian.py 这个文件就是我们上面定义的脚本,其内容如下

# -*-coding:utf-8-*-
# Auth: awen
# E-mail:[email protected]


from workflow import Workflow, ICON_WEB, web
import sys



def main(wf):
    param = (wf.args[0] if len(wf.args) else '').strip()
    domain = param
    url = "https://sapi.k780.com?app=domain.beian&domain="+domain+"&appkey=xxxx&sign=xxxxxxx&format=json"
    r = web.get(url)
    r.raise_for_status()
    r = r.json()
    try:
        if r['result']['icpno']:
            icpno = r['result']['icpno']
            wf.add_item(title=domain, subtitle=icpno)
            wf.send_feedback()
        else:
            wf.add_item(title=domain, subtitle=u"没有查询到备案信息")
            wf.send_feedback()
    except:
         wf.add_item(title=domain, subtitle=u"没有查询到备案信息")
         wf.send_feedback()

if __name__ == '__main__':
   wf = Workflow()
   sys.exit(wf.run(main))

这样一个插件就编写好了。这些语法请参考 http://www.deanishe.net/alfred-workflow/