实现
来看一下 workflow 的排版:
通过三个关键字的Alfred命令,分别实现设置alias(sal, set alias),删除alias(dal, delete alias),查找(gal, get alias)。
其中sal和dal使用简单的keyword输入,而gal为了使用Alfred通过的展示候选列表和搜索匹配的能力,而使用了Script Filter作为输入。三者都通过shell调用了一个实现主要功能的python脚本easy_alias.py,通过传入不同的action参数来区分行为。
sal:
python easy_alias.py set {query}
dal:
python easy_alias.py del {query}
gal:
python easy_alias.py show {query}cat filter.output
easy_alias.py
coding=utf8
import sys
import json
from os import listdir, makedirs
from os.path import isfile, join, exists, expanduser
base_path = expanduser(“~/.easy_alias”)
file_name = “alias_conf”
file_path = join(base_path, file_name)
alias_map = dict()
def init():
if not exists(base_path):
makedirs(base_path)
if not exists(file_path):
open(file_path, ‘w’).close()
def get_key_and_value(text):
seqs = text.strip().split(’ ')
if len(seqs) < 2:
return None, None
key = seqs[0];
value = reduce(lambda x, y: x.strip() + ’ ’ + y.strip(), seqs[1:])
return key, value
def get_alias_map():
with open(file_path, ‘r’) as f:
for line in f.readlines():
k, v = get_key_and_value(line)
if k == None or v == None:
continue
alias_map[k] = v
def set_alias():
if len(sys.argv) < 3:
return
text = sys.argv[2].strip()
k, v = get_key_and_value(text)
if k == None or v == None:
return
alias_map[k] = v
def del_alias():
if len(sys.argv) < 3:
return
key = sys.argv[2].strip()
new_content = “”
if key in alias_map:
alias_map.pop(key)
def show_alias():
items = list()
for k, v in alias_map.iteritems():
d = {
“uid”: k,
“type”: “default”,
“title”: k,
“subtitle”: v,
“arg”: v,
“autocomplete”: k,
“icon”: {
“type”: “fileticon”,
“path”: “icon.png”
}
}
items.append(d)
show = {“items”: items}
with open(‘filter.output’, ‘w’) as f:
f.write(json.dumps(show))
def write_map_to_file():
file_content = ‘’
for k, v in alias_map.iteritems():
file_content += k + ’ ’ + v + ‘\n’
with open(file_path, ‘w’) as f:
f.write(file_content)
if name == ‘main’:
init()
get_alias_map()
action = sys.argv[1]
with open(join(base_path, ‘logs’), ‘a’) as f:
f.write(str(sys.argv) + ‘\n’)
if (action == ‘set’):
set_alias()
if (action == ‘del’):
del_alias()
if (action == ‘show’):
show_alias()
write_map_to_file()
效果
设置一个alias
查找一个alias
删除一个alias
如果觉得通过sal设置和dal删除的方式太麻烦,也可以直接编辑~/.easy_alias/alias_conf
保存文件再查询
作业
这个 workflow 本身很简单很好实现。本文也希望不仅仅只是一个简单分享,希望能与读者有所互动,所以打算留个回家作业。
可以发现现在 dal 命令现在需要使用者盲打key,而不是像gal这样可以搜索补全。这会给使用者带来一定烦恼。回家作业就是将 dal 命令也改造成像 gal 一样可以搜索补全的形式。
后台回复:workflow 领取你的课外作业吧!另外还有目前功能齐全的 Release 版本,欢迎大家使用!
总结
让我们回过头看一下我们再开始时面对的问题是否得到了很好的解决。
-
我们无法改变工作中频繁需要冗长信息的状况,但是我们通过访问剪切板的方式让输入变得简单。
-
我们用一个文件将这些信息集中在一起,并且通过工具打打提升了我们检索这些信息的效率。
-
Alfred提供给我们一个在检索并获取这些信息上无需切换窗口,并且操作非常简单的方式。
很高兴,我们很大程度上解决了我们先前提出的这些问题!