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/