问题
我会把所有的web项目都放在一个dev目录下,编辑代码有时候会用vscode,有时候会用webstorm。这就带来个问题,每次启动的时候,要么是从编辑器的最近文件中启动,要么是从终端快速启动,但是感觉都不太快捷。而且有时候还要找一下才能找到。刚好最近买了个正版Alfred,来试试用Alfred启动项目。
实现效果
想实现的效果是这样的:
- 输入code + 文件名,可以过滤出包含文件名的项目目录。
- 选择项目之后,会再让用户选择使用vscode还是webStorm打开。
两个步骤的示意图如下:
实现方式
1. 读取目录下文件并且响应过滤
按理说Aflred也有文件过滤的功能,但是发现没有对指定目录过滤的,只能自己实现了。其实实现也比较简单,看到有个Alfred的python库。还比较方便的,帮忙处理了一些逻辑。所以就用python来写吧。
从Alfred的文档里可以看出,过滤的实现原理是,脚本响应用户输入的字符,然后返回json格式的内容供Alfred展示。
使用了上面提到的python库,拼接json字符串的工作,就可以省略了。如下,最后调用send_feedback
就可以把选项提交给Alfred了。
# 获取文件列表
def getFileList():
path = wf.args[1]
log.debug('path: ' + path)
path = expanduser(path)
return [f for f in listdir(path) if isdir(join(path, f))]
def main(wf):
# 获取搜索参数
searchKey = wf.args[0]
log.debug('searchKey: ' + searchKey)
# 文件列表缓存3s
fileList = wf.cached_data('projects', getFileList, max_age=3)
# 根据query过滤目录
for x in fileList:
if (searchKey and (searchKey in x)):
wf.add_item(title=x, arg=x, valid=True);
# 把应该展示的内容发送给Alfred
wf.send_feedback()
这个脚本有两个参数,一个是query一个是项目目录。
path
是这个项目设置的全局变量,点击右上角的图标设置的,使用前需要修改成自己的项目目录:
2. 参数转换
刚才的脚本执行之后,可以获得想要打开的目录路径,使用Arg and Vars
把得到的query
转换成filename
给后面的流程使用。
3. 选择打开方式
通过Alfred的List Filter
来提供两个选项,是使用webstorm还是使用vscode。
4. 判断并启动
分别使用Conditional
和Open File
整体图:
这里可以根据自己的需求修改编辑器,如果只需要一个编辑器,可以把listFilter和条件判断直接去掉了。
本文首发于 一粟(https://www.zeyio.com),欢迎转载,但是必须保留本文的署名和链接。