利用Launchbar和Ulysses打造快捷资料搜集系统
原始需求
记得应该是在少数派上看到过一篇介绍如何以drafts为中心,打造ios系统的工作流程。瞬间就觉得这个工作流程正是我一直在寻找但又苦苦不能得的。后来按照这篇文章的思路,又结合自己的特殊需求修改,就形成了ios系统上以drafts为几乎所有的输入入口的一个流程。
- 任务、待办等都通过drafts转2Do
- 每日二句心灵鸡汤,通过drafts搜集资料,筛选后发微信群,再转印象笔记存档
- 灵感、读书感悟直接写在drafts中,然后存档,以后需要深入思考时再转印象笔记或Ulysses
- 日记在drafts中写草稿,修改,然后转存DayOne
至少到现在为止非常满意这套输入流程。但是每天工作的大部分时间用的生产工具是Mac OS,所以就想在Mac OS上有没有类似drafts的软件,可以让我完成同样的流程呢?
我的需求
由于mac的操作性比用手机要方便得多,各种软件都带有全局的快捷键,所以理论上不需要像ios上这样的一个软件转发的功能。仔细分析了自己的需求,发现资料的搜集和整理花去了我大部分的时间,而且很多操作不断重复:
- 选取重要的段落、文字
- 复制(Commander+c)
- 切换到印象笔记(或者Ulysses)
- 找到搜集资料统一入口文章
- 粘贴(Commander+v)
作者Bigice 在《用 Drafts + LaunchBar + Evernote 打造 Daily Record 系统 》这篇文章提供了很好的解决方案,就是LaunchBar+印象笔记的方案。但是两个原因让我没有完成应用文章中提供的脚本和方法,而是把资料搜集的入口放到了Ulyssess中:
- 在我的体系中,印象笔记是一个数据仓库,几乎不会在印象笔记中进行资料的加工。而从各渠道搜集过来的资料可能还需要进行筛选,剪枝,所以直接入到印象笔记不太合适。
- 直接复制文章中的AppleScript似乎有语法问题,不能直接使用。
实现方法
因此,最终我使用了LauncherBar+Ulysses的组合,其他逻辑和原理和Bigice文章中一致。
- Launchbar中新建action, 使用什么名字随便,关键是default.py文件的脚本怎么写。我对Python相对更熟悉一点,所以就选用Python作为脚本语言。另外,现在Python3就已成熟,所以脚本头指定了
#!/usr/local/bin/python3。与Ulysses的交互也利益于丰富的URL Scheme,可以点这里看详细规则。
default.py的源码如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27#!/usr/local/bin/python3
#
# 把选Instant Send的内容发住Ulysses,并自动隐藏Ulysses
#
import sys
import json
import subprocess as sp
import os
import time
my_env = os.environ.copy()
my_env["PATH"] = "/usr/local/bin:" + my_env["PATH"]
now = int(time.time())
timeStruct = time.localtime(now)
strTime = time.strftime("%Y-%m-%d %H:%M:%S", timeStruct)
text = "- "+sys.argv[1]+" <*"+strTime+"*>"
text = text.replace('ulysses://','ulysses%3A%2F%2F')
url_scheme = "ulysses://x-callback-url/insert?id=[[ariticle_id]]&newline=prepend&text="+text
my_command = ["open", url_scheme]
content = sp.check_output(my_command, env=my_env)
apple_script_name = "hide.scpt"
my_command = ["osascript", apple_script_name]
content = sp.check_output(my_command, env=my_env)
- 脚本用得比较顺手,但使用过程中有一点比较不爽的是每次LaunchBar胡Instant Send把内容粘贴进Ulysses后,就会停留在Ulysses的界面,还得自己手动切换回到之前浏览的界面,并且于是想了好多办法都没法解决这个问题。比如一开始想通过URL Scheme的x-success参数回到原应用,但是没有办法知道之前使用的到底是什么应用。最终的解决办法还是AppleS。在调用完Ulysess的Url Scheme后再调用一段AppleScript,这段脚本的作用是按快捷键Commant+H(隐藏当前窗口)。
想要使用这种方法,必须在Action中再新建一个脚本,我叫他hide.scpt,脚本的代码如下:1
2
3
4--自动隐藏当前窗口(Command+H)
tell application "System Events"
key code 4 using {command down}
end tell
在default.py中增加调用的hide.scpt的代码就可以了:1
2
3apple_script_name = "hide.scpt"
my_command = ["osascript", apple_script_name]
content = sp.check_output(my_command, env=my_env)
利息AppleScript可以调用键盘的功能,其实可以做很多事,至于如何搭配就看每个人的想象了。
附件
最后附上Mac键盘对应的key code的表供参考:

本文作者 : Peizhi
原文链接 : http://learso.com/passages/利用Launchbar和Ulysses打造快捷资料搜集系统/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!