前言

2012 年至今,Drafts 一直被放在我手机的 Dock 栏,是我使用时间最长的一款第三方 App,同时也是我最想推荐给别人的一款 App。因为它足够简单,又足够复杂。它适合每一个人,任何人都可以按照自己的想法去使用,而不必苦恼该如何上手,因为你只要在上面打字就好。

如今 Drafts 5 来了,我依然推荐。因为你还是只要在上面打字就好,并且它还变得更「好用」了。

对新用户来说,我不太建议一上来就去研究和尝试 Drafts 的一些进阶功能。尽管那些功能看起来很酷,感觉可以做很多事情,但其实有些你并不需要。没有任何目的的折腾往往会给人带来不必要的焦虑。我们只要先把最基础的功能用好就行,比如在上面打字。

这次 Drafts 5 的更新内容比较多,本文主要介绍下一些重要的更新和细节,为大家在使用 Drafts 5 时提供一些帮助1

简洁又熟悉的界面

Drafts 5 的界面和 4 没有多大差别。使用方式也差不多,右划呼出 draft 列表 「抽屉」 ,左划呼出动作列表 「抽屉」 ,键盘扩展也还在。原先的 key 和 action 被合并为了「 动作组 」。draft 列表也能看到更多的内容。继续右划或者左划,可以看到新的标签「抽屉」和动作组「抽屉」。把这些界面称为 「抽屉」再适合不过,因为你可以把「它」拉到一半,再松手缩放回去。

列表界面

在文本编辑器界面顶部新增了一个标签按钮,底部新增了一个 Focus Mode 按钮和两个导航键。

Focus Mode 称为「专注模式」,在设置中也有这个选项。 一旦开启,下次再打开 Drafts,就会总是显示上一次正在编辑的 draft,而不再会因为一段时间没用,就自动新建一个空白的 draft。如果你喜欢在 Drafts 中写作,这个功能就很实用,下次打开就能继续写作。另外,点按两个导航键能在多个 draft 中快速切换,省去了需要打开 draft 列表切换的麻烦。

Focus Mode

在 Focus Mode 下,如果当前的 draft 运行动作后被 Archive 或者 Trash,那 Drafts 5 会自动打开下一个 draft,而不是新建一个 draft。开发者 Greg 例举了一个直观又实用的使用场景:当他在写一篇较长的关于 Drafts 5 的文档时,想发 Twitter,他只要点击新建写下内容,然后运行发送 Twitter 的动作,结束后该 draft 被删除,并自动跳转到下一个刚刚正在编写的文档。这就是所谓的「专注模式」。

更多样的界面设置

Drafts 5 有了更多自定义界面的选项。包括 6 种主题,9 种图标,编辑器界面的语法高亮。其中语法高亮支持 Plain Text、Markdown、Simple List、Taskpaper、JavaScript 五种。其中 Markdown 采用了 MMD 6.0 的渲染引擎。

主题设置

有一点值得注意的是,我们可以分别对这五种语法模式设置不同的字体、等宽字体、字号、行高、段间距、外边距、段落号等一系列选项。并且和当前 draft 的 UUID 绑定,互相独立,互不影响。

语法高亮和文字显示

也就是说你可以在 Drafts 5 中使用五种不同的「系统」来处理文本。用 Plain Text 来随手记录,Markdown 写作,Simple List 检查清单,Taskpaper 处理任务,JavaScript 编写脚本。

Taskpaper 和 JavaScript 语法高亮

新增的标签系统

标签是 Drafts 5 新增的一个重要特性,也是很多用户期待已久的一个功能。点击顶部的标签图标就能添加新的标签,键盘上方会根据你输入的字母匹配显示现有的标签供你选择。另外在标签旁边还新增了一个添加为「旗标」的快捷入口。

标签系统

开发者 Greg 曾在 Slack 群说过一些关于标签功能的看法:

Tagging is personal. I still do not see tagging in Drafts as a full-on organization system. My intention is to allow workspaces of a sort….so for people who process a lot of things, they can group and filter the draft space to process those items.That’s why the inbox/archive/flagged/trash are all still there and All filtered by the selected tag.

的确,标签是一个比较私人的东西,每个人对标签使用的方式也不同。当然如果你有比较好的用法的话,欢迎分享。目前 Drafts 5 的标签系统比较简单,只有一个单一的嵌套层级。那就是 draft 的「状态」,即当前标签下的 draft 是处于 Inbox、Archive、Flagged 还是 Trash。所以一个 draft 拥有标签和状态两种属性,我们可以通过这两个参数来对 drafts 进行过滤和整理。同时在标签「抽屉」还能选择多标签过滤,目前这里多标签之间的关系是「与」,而不是「或」。在选择标签过滤时,还能选择不包含某个标签的选项,可用于一个 draft 有多个标签的情形。

新增的 Workspaces

Workspaces 字面理解的意思是「工作台」。它能实现的功能是把多标签过滤和文本搜索的结果,保存为多个工作台,用于不同的场景切换,在不同场景下处理不同的文本,就像 GTD 中的「透视」一样。

Workspace 编辑界面

目前我主要保存了四个工作台,分别是 Drafts、Thoughts、Writing 和 Code。Thoughts 工作台是所有含有 daily thoughts 标签的 drafts;Writing 工作台是所有含有 writing 标签的 drafts;Code 工作台是所有含有 code 标签的 drafts。而 Drafts 工作台是所有不含 daily thoughts、writing、code 这三个标签的 drafts。由于目前 Drafts 5 还不支持「与」的标签过滤方式,所以必须多建一个「 主标签 」来过滤。

每个工作台的 draft 又有 Inbox、Flag、Archive、Trash 四种状态。通过在 Workspaces 中关闭 Inbox includes flagged 按钮,就能把每个 draft 清晰得归类到各自的位置。

Writing 和 Code 工作台

Workspaces 这个功能对于重度用户来说必定是一个常用又高级的功能。它能让用户快速进入对应的工作状态。为此 Drafts 5 单独新增了一个 DRAFTS-WORKSPACES 的 Widget,用于快速启动。同时也能用 URL Schemes 快速打开,具体代码为 drafts5://x-callback-url/workspace?name=Name

全新的「整理」模式

「整理」模式是我一直都非常喜欢的一个功能。我经常用它来快速整理我的「每日回顾」,如今它变得更好用了。

新的「整理」功能有两种模式。一种是 Block 模式,把每一个「段落」分成一个个区块元素,另一种是 Line 模式,把每一行分成一个个元素,包括空白行。想要调整排序,长按上下移动即可。可惜目前 Drafts 5 还不支持多行「拖拽」调整,不然效率会高很多2。左划删除,右划复制,点击文字部分还可以直接编辑内容。

Arrange Mode

我们可以很容易在界面底部开启「整理」功能,这是针对全文的。除了这个入口,Drafts 5 还支持在选中文字弹出的窗口中开启该功能,并只对选中的文字进行整理和排序。另外在键盘扩展的「管理」按钮上也能找到它。

以上谈论的都是基于用户界面来触发「整理」功能的场景。接下来从代码层面来谈一下触发的方法。

首先,Drafts 5 直接提供了相关的 Script 功能。我们可以在官方文档中找到,具体代码为 editor.showArrange()。然后我们就能把它放到键盘扩展上,直接开启,省去了把键盘缩回的一步。不过,还有一个需要与之区别开来的功能是 editor.arrange(text)。它的作用是将获取的文本通过「整理」模式整理好后,把结果传递给下一个「步骤」。所以我们可以把 editor.showArrange() 看作是「整理」按钮的快捷方式,但不具备传递数据的能力。

两种 Arrange Scripts 的区别

另外一个方法是利用 URL Schemes 来开启。这是 Drafts 5 新增的一个功能。这个功能的特色在于,它可以发送任意文本至 Drafts 5 进行「整理」,而不保存在 Drafts 5 中,并将结果直接发送至目标 App。我们可以在官方文档中找到,具体代码为 drafts5://x-callback-url/arrange?x-success=APP-URL。目前我用得较多的是这个功能。因为我常在 1Writer 中写文章,有时需要调整一些版块的先后顺序,或者某些段落的细节。具体实现的功能是,将 1Writer 编辑器界面选中的文本(未选中的话默认是全文)发送至 Drafts 5 中「整理」,点击完成后将结果替换至 1Writer 中。你可以点此链接将动作安装至 1Writer。

Arrange in Drafts 5

全新的分享菜单

开发者 Greg 重新设计了 Drafts 5 的分享菜单,并且细节更加丰富,操作界面更加友好。首先,最直观的是增加了添加「标签」和「旗标」的功能。

另外,Drafts 5 把原先的 Prepend 和 Append 按钮隐藏在了下一个层级。现在是先选择要添加的 draft,然后再进一步选择是 Prepend 还是 Append,最后再点击 Open 或者 Save 来确认。比起原先先选择 Prepend 或者 Append 再选择 draft 直接作为 Save 效果的方式来说,这样做的好处就是大大减少了误触的几率,多给了用户一个进一步确认和缓冲的机会,不会让新用户突然产生一种不知所以的感觉。

分享菜单界面

在 App 的设置界面,同样提供了分享菜单的自定义模板,可以按照自己的喜好来调整。另外还多了一个语法高亮的选项。这个语法高亮模式是和之前的设置同步的。在分享菜单中预览看到的和在 Drafts 5 中看到的语法高亮是一样的。

更完善的「拖拽」功能

iOS 11 新增的「拖拽」功能使得 iPad 在生产力方面又提高了一个等级,这也是大家在讨论 iPad 作为生产力工具这一方面经常谈及的一个话题。而对屏幕相对较小的 iPhone 来说,虽然也支持一定程度的「拖拽」,但基本都是一些无法上升到「生产力」高度的操作,大多都是为了实现「拖拽」而「拖拽」。

而个人认为 Drafts 5 这次支持的「拖拽」功能在一定程度上比其他应用在生产力方向上更向前了一步3

支持「拖拽」触发动作

什么情况下需要「拖拽」去触发动作?如果直接在 Drafts 中输入文字后,马上处理的话显然不需要「拖拽」这个操作。有一种情况是需要「拖拽」去触发动作的,那就是需要对多个 drafts 进行批处理的时候。

Multi actions

Drafts 5 支持对多个 draft 依次运行同一个动作。比如你需要把不同的 draft 内容通过邮件发送给不同的收件人,只需在 draft 列表按住一个 draft「拖拽」,然后点选另外几个需要发送的内容保持不动,另一只手打开动作组「抽屉」,然后将所有内容放置到 Mail 动作并松手,就能按照原先的方式发送邮件,一个 draft 执行完会自动执行下一个。这种方式显然比手动一个个发送效率高得多。

支持「拖拽」合并同时新建

我们往往有需要把多个类似属性的 draft 合并为一个 draft 的需求。在 Drafts 5 中,只要在 draft 列表多选,然后点击 Operations 就能选择 Merge 合并,和 Drafts 4 一样还能自定义分隔符。

其实,Drafts 5 还能利用「拖拽」实现该功能,并且操作更直观。还是一只手按住一个 draft「拖拽」,然后点选另外几个需要合并的 draft 先保持不动。另一只手点击左下角的新建「+」按钮。然后另一只手松手就得到了合并后的结果。

Merge

不过比起原生的 Merge 功能,这种处理方式有两个缺陷。一个是原先合并的 draft 还是被保留在那里,需要手动删除。另一个是合并的每个 draft 之间无法设置分隔符。不过毕竟这个方法不是专为合并而设计,所以只能算是讨巧,仅适用于想要快速合并少量 draft 的情况。

支持「拖拽」快速复制功能

在 draft 列表中并没有提供快速新建某个 draft 的副本的功能。而有时我们需要将它保留一个备份,然后再修改内容。虽然 Drafts 5 有恢复历史文件的功能,但操作起来比较复杂,没有直接复制一份来得方便。

Drag to copy

其实,想要复制一个副本很简单,只要按住往上或下「拖拽」一点,当出现「+」号松手就完成了。

支持「拖拽」插入任意位置

这个功能其实在 Drafts 4 中就有了。如果你常在 Drafts 5 中写作,这会是一个经常用到的功能。它能实现的效果是把选中的文本「拖拽」至任意光标的位置,调整文字顺序,就像在桌面级系统上处理文字一样。

更完善的动作分享

便捷的动作分享是 Drafts 的一大特色,人们可以将自己制作的动作通过链接分享给别人安装,也可以将它分享到 Drafts 的动作社区供更多的人检索和使用。可以说,是动作社区使得 Drafts 在更多的普通用户中流行开来。Workflow 也一样,人们可以很方便得通过链接或者社区安装一个制作好的 workflow,并且大多都不需要自己再改就可以直接使用了。

动作社区

此次 Drafts 的更新提供了更加完善的动作分享方案。原先的 Drafts 4 有两种分享方案。一种是直接分享为 URL Schemes 链接来安装,适用于私人间的分享。另一种则是分享到动作社区,适用于对外公开的分享4

现在的 Drafts 5 除了保留了原先的两种分享方式之外,还新增了一个以「文件」形式分享的方式。比起 URL Schemes,这种方式更稳定,也更推荐,同时也避免了一长串的字符占用更多的视觉空间。更方便的是,现在 Drafts 5 还支持「动作组」的分享。也就是说,你可以一键把同一类别的动作都安装到你设备上。比如把开发者分享的 Markdown 常用的工具栏一键安装到你的 Drafts 5 上,比起以往一个个安装,效率要高得多。

动作的分享

开发者 Greg 还对动作社区的分享进行了升级。原先的分享机制比较简单,只有分享者和是否公开在社区展示两个设置。现在还增加了对动作的描述、预览和是否已在社区分享的状态判断。如果该动作已经在社区上分享过了, Drafts 5 会保留一个「标识符」,并通过 iCloud 来同步。这样最初始分享的分享者就可以对该动作进行修复和更新,或者直接删除等操作。我们可以通过这个链接来查看和搜索别人分享的动作。

更丰富的 Script 功能

如果说 Drafts 4 中的 Script 功能是 Basic 的话,那 Drafts 5 中的 Script 功能就是 Pro 了,它比上一版更强大,能实现更多进阶的功能。

Drafts 5 采用了 Apple 提供的 JavaScriptCore 来执行 Script。开发者 Greg 推荐先在 w3schools.com 上学习下 JavaScript 的基础课程,对新手有一定帮助。全新的 Script 功能扩展了多个环境对象,使得 draft 的属性(包括编辑)和系统内部的模块、Web 模块深度结合。因此原本在 Drafts 4 中可以执行的 Script,在 Drafts 5 上可能就无法执行了。不过开发者已经给出了十分详细的 Script 文档,其中的一些实例可以让你快速上手。另外也给出了比较可靠的动作迁移方案(下文会提到)。接下来主要介绍下新增的一些重要的 Script 功能。

支持「自然语言」的识别

新版 Script 环境采用了 Date.js 库。简单来说,它是一个 JavaScript Date 的增强的扩展库,同时可以把一些基础的自然语言(只支持英文)进行语法分析,使得 JavaScript 可以识别出对应的日期和时间。

比如现在我们能直接在 Drafts 5 中输入自然语言的句子,向提醒事项中添加新的事项并设置好提醒时间。举个简单的例子:“在购物清单中添加一个明天早上七点买鸡蛋的提醒事项。”

NL Reminder

具体操作方式是,在 Drafts 5 中第一行输入「买鸡蛋」,第二行输入「7am tomorrow」,然后运行动作。打开「提醒事项」,我们就会在 Shopping 列表内看到「买鸡蛋」的事项,并且提醒日期也已经设置为明早七点。以下为代码注释:

// 搜索或者新建一个 Shopping 的列表
var list = ReminderList.findOrCreate(”Shopping“);
// 在列表中新建一个提醒事项
var reminder = list.createReminder();
// 将 draft 的标题设置为提醒事项的名称
reminder.title = draft.title ;
// 利用 Date.js 把 draft 的 body 部分的语句识别为日期并赋予值给 date
var date = Date.parse(draft.processTemplate(”[[body]]“));
// 为提醒事项添加提醒的 date 日期
var alarm = Alarm.alarmWithDate(date);
// 为提醒事项增加提醒功能
reminder.addAlarm(alarm);
// 保存提醒事项
reminder.update();

支持系统提醒事项和日历的深度整合

正如上文所提到的。Drafts 5 的 Script 支持了诸多系统提醒事项的设置参数,包括了备注、提醒日期、优先级。并能检测某个提醒事项是否有提醒,是否已经完成等。如果你常用的任务管理 App 是 GoodTask 3,那就不需要利用 URL Schemes 跳转,就能直接在 GoodTask 中添加新任务。

同样日历也支持在 Drafts 5 中直接创建一个新事件,并设置好事件名称、备注、起始日期、结束日期等参数。具体可以查看开发者提供的 Event 文档

支持 HTTP 的请求

现在 Drafts 5 支持通过 APIs 来获取 HTTP 请求了,包括 GET、POST、PUT、DELETE 等多种方法。或者直接利用 HTTP GET 来下载指定网址的 RAW HTML5

Download RAW

为方便用户上手,开发者给出了三个示例。一个是利用 GitHub 的 API 发布一个公开的 gist。另一个是利用 Micro.blog 的 API 发布文章。这个需要注册账户,并配置好对应认证的 token。最后一个是更进阶的利用 Zapier 的 Catch Hook Trigger 来触发运行一个 Zap。这个同样需要配置好对应的参数才能运行。

不过对于大多数用户来说应该挺希望 Drafts 5 能整合 WordPress,并直接在 Drafts 5 中发布文章,可惜目前还不支持。然而 Colin Walker 利用了新的 HTTP 特性,编写出了可以直接在 Drafts 5 中发布 WordPress 文章的脚本。但是需要一些初期的准备工作,比如需要 WordPress 支持 Markdown,需要在网站上先安装好 Basic Authentication handler 插件,需要网站支持 HTTPS 等。具体可以查看他分享的动作链接

另外应该也有很多用户在使用 Todoist 作为任务管理应用。davenicholls 分享了他制作的 Todoist Quick Add。可以实现将每行的文字添加为新任务,并设置好过期日期或时间。当然也需要先设置好自己的 Token。

其实 Drafts 5 支持 HTTP 请求后,可以做很多关于 Web Automation 的事情。只要你正在使用的 Web 服务提供了详细的 API 文档,就可以利用 Drafts 5 中的「步骤」与本地的一些应用相结合,创建自己的一套文字工作流。只是相比 Workflow 学习成本更高一些。比如利用某天气预报的 API 获取当前的天气情况,然后创建日记模板,最后发送至 Bear 并添加日记的标签。

支持 CallbackURL 的调用

利用 Script 中的 CallbackURL,我们可以实现将 Drafts 中的数据传递给第三方应用,并将处理后的数据传回 Drafts 的 Script,供下一步使用。比如下面这个 Script 脚本。

var selected = editor.getSelectedText();
const baseURL = "workflow://x-callback-url/run-workflow";
var workflow = "Get App Link";
var cb = CallbackURL.create();
cb.baseURL = baseURL;
cb.addParameter("name", workflow);
cb.addParameter("input", "text");
cb.addParameter("text", selected);
  var success = cb.open();
  if (success) {
    response = cb.callbackResponse;
    var url = response["result"];
    editor.setSelectedText(url);
  console.log("Text Replaced");
}
else {
console.log(cb.status);
if (cb.status == "cancel") {
context.cancel();
}
else {
context.fail();
}
}

它能实现的功能是。利用 Workflow 查询 Drafts 中选中的应用名称,并返回 Markdown 链接,替换原先的文本。前提需要先创建一个名为 Get App Link 的 Workflow,并将 Script 中的 workflow 的名称设为一致。

Get App Link

另外开发者也提供了一个利用 CallbackURL 将多行文本分别在 Fantastical 中新建一个事件的 Script 脚本

支持 Things 3 的自动化流程

前段时间 Things 3 迎来了 3.4 版本的更新,至此 Things 3 真正加入了自动化工作流的行列。其中的 add-json 命令,可以让其他应用开发者,通过在自己的应用内添加相关代码,实现将自己应用内的文本内容导出到 Things 3 中,并生成对应的项目和任务的功能。为此 Things 3 开发商也提供了十分详细的 URL Schemes 文档JSON Coder 文档

New Project to Things

举个简单的例子,利用 Drafts 5 在 Things 3 中创建一个完整的项目。以下为代码注释:

// 创建一个新的项目。并把 draft 中第一行的文字内容设为项目的名称,第二行的文字内容设为项目的备注。
var project = TJSProject.create();
project.title = draft.processTemplate(”[[line|1]]“);
project.notes = draft.processTemplate(”[[line|2]]“);
// 把 draft 中第三行的文字内容设为项目下的一个标题。
var heading = TJSHeading.create();
heading.title = draft.processTemplate(”[[line|3]]“);
project.addHeading(heading);
// 在标题下新建一个任务,并把 draft 中第四行的文字内容设为任务名称,第五行的文字内容设为任务备注。
var todo = TJSTodo.create();
todo.title = draft.processTemplate(”[[line|4]]“)
todo.notes = draft.processTemplate(”[[line|5]]“)
project.addTodo(todo);
// 在任务下新建一个列表,并把 draft 中第六行的文字内容设为列表的名称。
var checklistitem = TJSChecklistItem.create();
checklistitem.title = draft.processTemplate(”[[line|6]]“)
todo.addChecklistItem(checklistitem);
// 为通过 Things 的 add-json 命令增加一个新的项目而创建一个容器。
var container = TJSContainer.create([project]);
// 利用 CallbackURL 命令打开 Things 的 add-json 命令,并返回 Drafts。
var cb = CallbackURL.create();
cb.baseURL = container.url;
var success = cb.open();
if (success) {
console.log(”Project created in Things“);
}
else {
context.fail();
}

比起面向普通用户使用的 URL Schemes 命令来说,面向开发者使用的 add-json 命令会稍显复杂,不过它能新建项目标题。而普通用户使用的 URL Schemes 只能在现有的项目标题下创建一个新的任务。建议根据自己实际的使用情况,选择一种适合自己的创建方法。

支持 Prompt UI 的自定义

Prompt 步骤是一个可以让用户自定义对话框的功能。它能将自定义的按钮标签,传递给下一个步骤使用。在 Drafts 5 中除了保留了这个功能外,还新增了通过 Script 添加日期选择组件、单选框组件、多选框组件和开关组件的功能。

Things Prompt to Inbox

利用这些组件,在编辑运行动作的时候我们就能将一些常用的选择列表整合到一个对话框内,然后只要弹出一次对话框就好,而不必像以前需要多次弹出对话框来选择。设置好一些常用的 Prompt 后,还能在别的动作步骤中重复使用。

Things Prompt to Project

下面是我利用 Script 为 Things 制作的一个 Prompt。它默认将 draft 的 [[title]] 和 [[body]] 作为任务的名称和备注,保存到 Things 的 Inbox 中。如果想要把任务添加到指定的项目,并添加标签和提醒的话,只要关闭 Add to Inbox 按钮,在对话框中选择项目和标签,然后点击 OK 按钮就好。

var p = Prompt.create();
p.title = ”Add Todo to Things“;
p.message = ”Add to Inbox or Set Project, Tag & Date“;
p.addSwitch(”inboxsw“, ”Add to Inbox“, true);
var options1 = [”Writing“, ”Learning“, ”App List“];
var selectedOptions1 = [];
p.addSelect(”s1“, ”Select Project“, options1, selectedOptions1, false);
var options2 = [”wait“, ”important“, ”easy“];
var selectedOptions2 = [];
p.addSelect(”s2“, ”Select Tag“, options2, selectedOptions2, true);
p.addDatePicker(”myDate“, ”Start Date“, new Date(), {
”mode“: ”dateAndTime“
});
p.addButton(”OK“);
p.show();
if (p.fieldValues[”inboxsw“] == true ) {
  var startDate = [];
  }
  else {
  var startDate = p.fieldValues[”myDate“];
  }
if (p.buttonPressed == ”OK“) {
  var todo = TJSTodo.create();
  todo.title = draft.processTemplate(”[[title]]“);
  todo.tags = p.fieldValues[”s2“];
  todo.list = p.fieldValues[”s1“];
  todo.when = startDate;
  todo.notes = draft.processTemplate(”[[body]]“)
  var container = TJSContainer.create([todo]);
  var cb = CallbackURL.create();
  cb.baseURL = container.url;
  var success = cb.open();
  if (success) {
  console.log(”Todo created in Things“);
  }
  else {
  context.fail();
  }
}
else {
  context.cancel();
}

支持步骤动作中的诸多类型

除了上述提到的对象,Script 中还支持了包括 Mail、Message、Dropbox、iCloud Drive、Google Drive、One Drive 等步骤中的动作。其中 Mail 还支持后台发送。更多详细内容可以访问官方的 Wiki 文档

略微变化的 URL Schemes

Drafts 5 的 URL Schemes 和 4 相比并没有太大的变化。只是基础的 URL Schemes 改为了 drafts5:// ,并新增了一个 [[tag]] 的标签。另外更新了一个 Search 的 URL Schemes:drafts5://x-callback-url/search?query=Query-Text&tag=Tag。它能实现的功能是直接打开 Drafts 的搜索框,并利用标签过滤然后搜索。另外则是上文提到新增的一个 Arrange 的 URL Schemes,和一个直接打开某个 Workspace 的 URL Schemes。更多详细内容可以访问官方文档

新增的 App 论坛

为了让用户更方便地使用、讨论和分享关于 Drafts 的各种话题,开发者创建了一个基于 Discourse 平台的论坛。用户注册以后可以在对应的版块中寻求帮助,或者分享自己的使用心得等。开发者也会在 Integration GuidesTips & Tricks 等版块中发布一些使用技巧和帮助的文章。

App 论坛

作为一个主力运营的论坛,用户可以集中在这里反馈任何关于 Drafts 的问题,以及提出一些未来特性的需求。这对任何使用者来说都是一件极其方便的事情。从此不必再依靠各种搜索引擎去寻找答案,花费的时间多不说,结果还不一定找得到,何况搜的还是一个这么小众的问题。所以,如果你想更好地使用 Drafts 的话,非常建议在该论坛注册账户,并通过这个渠道来获取帮助和讨论反馈。长久以来受益的不光是自己,也会帮助到他人,而他人的问题也会在未来某天帮助到你。

关于文本同步的细节

Drafts 5 依然支持 iCloud 在多设备间自动同步存储 drafts、动作、配置和记录等数据。不管你是否有多设备,都建议开启这个选项。因为一旦误把 Drafts 5 删除,我们还能重新下载它,并自动把 iCloud 上的数据同步至 App 中。

当编辑文本的时候,打开 draft 列表,在「搜索」按钮旁会看到一个正在旋转的圆圈,说明 Drafts 5 正在同步数据。

然而,在多设备的情况下往往会遇到这样一种情形。在 iPad 上编辑完文本后,需要切换到 iPhone 上继续编辑。当你打开 Drafts 5 的时候,iPad 上的内容还没同步过来,而你已经开始在 iPhone 上编辑了。那此时的同步机制会是什么样的呢?开发者 Greg 给出了这样的回答:

  1. 如果两者的文本内容都一样,那么不作任何改变;
  2. 如果两者的文本内容不一样,但是本地的文本内容没有改变,那么同步 iPad 过来的文本内容;
  3. 如果两者的文本内容不一样,而本地的文本内容已经改变,那么在编辑器中保留本地的编辑文本版本,从 iPad 同步过来的版本则被放在历史记录里。

显然我们上述的情况属于第 3 种。所以如果想要使用 iPad 上同步过来的文本内容的话,最好先等 iPhone 上的 Drafts 5 同步完成后再继续编辑。

出现上述情况的原因也很简单。Drafts 5 是按照时间顺序来同步的。所有类型的数据(包括 drafts、动作、配置、记录等)的改变都是批量进行的,所以它们都会按照改变的顺序来依次同步。当然,这还和当前设备的电池电量和寿命有关。如果当前设备的电量比较低,或者在蜂窝数据连接的情况下,从另一个设备同步过来的内容并不会马上送达,而 Drafts 5 就会周期性地不断去获取请求,这就导致了一定程度上同步的延迟。

关于文本和动作备份的细节

Drafts 5 继续保留了 drafts 和动作的备份功能,同样建议开启该选项,并打开周期性自动备份功能。这样 Drafts 5 就会根据你打开和使用 App 的频率,每 7 天自动备份 drafts 和动作组数据。

文本的导出和备份

有一点需要注意的是,如果你开启了周期性自动备份功能,并有多设备同时使用的情况。那么一般只需要在一个设备上开启该功能就好。这样可以避免一些不必要的备份错误。

关于 Drafts 4 的键盘扩展和动作的迁移

Drafts 5 内置了把 Drafts 4 中的 Drafts、Actions、Keys 批量迁移的选项。需要两个 App 同时安装在手机上,为避免重复,只需要执行一次就好。在最新版的 Drafts 4 中也为每个动作单独提供了一个迁移至 Drafts 5 的选项,以满足不同用户的需求。从 Drafts 4 中迁移过来的 Actions 和 Keys 分别被分到一个动作组里,所以对 Drafts 5 中现有的动作不会产生影响,也不会让人混淆。

Drafts 4 和 5 的数据迁移

对于一些可能在 Drafts 5 上运行错误的 Script,开发者也自动匹配修正了部分语法,比如一些需要使用 “editor” 对象的语句。然而还是无法保证所有修正后的 Actions 和 Keys 都可以使用,如果你遇到了某些经常需要使用的 Actions 或者 Keys 迁移不成功,在动作社区又找不到替代的话,可以向开发者寻求帮助。

有些 Drafts 4 中能运行,但 Drafts 5 无法运行的动作。对于这些动作,开发者在 Drafts 4 中给出一种「 迂回 」的解决方案:选择 Add as Callback 选项,当把该动作迁移至 Drafts 5 时,会新增一个调用 Drafts 4 中该动作的一个步骤,运行完成后再返回至 Drafts 5。更多详细信息可以查看开发者提供的官方文档

关于 Drafts 5 的定价策略

Drafts 5 是一个全新上架、免费+订阅的应用。目前旧版 Drafts 4 则继续保留,用于数据的迁移等。免费版用户可以使用最基础的一些功能。包括新建、编辑、同步 drafts 和标签,以及标签过滤和运行从动作社区安装的动作等。高级版则可以自定义编写规则,切换主题,使用 Workspaces 等功能。同时,开发者透露 Mac 版也在开发中,并且已经做了很多前期工作。Pro 版订阅价格为:13 元/月,133 元/年(7 天免费试用期)。你可以在这里看到更详细的说明。

定价策略

后记

本次 Drafts 5 的推出,除了更强大的功能吸引人们之外,讨论最多的应该还是它的定价策略:免费+订阅的模式。

2017 年已经有诸多应用转变为订阅制了。虽说这是趋势,但这对原本是买断制,现在转为订阅制的应用来说,引起的争议会更大些,况且还是一个工具属性较强的应用。不过这次 Drafts 5 带来的新功能足以让重度用户心满意足,在这个时间点推出订阅模式是一个明智的选择。它的新功能会让那些重度用户觉得值这个价,免费版也为潜在用户提供了更多尝试的机会。

个人认为,不管开发者采用哪种定价方式,只要有对应的理由,那就是合理的。而引起争议的往往是每位用户价值观和消费习惯的不同。有些人觉得值,那就订阅使用了。有些人觉得不值,那就使用免费版或者寻找其他他认为值的应用作为替代品。争议是好的,不管是你和别人的争论还是自己内心的纠结。它都可以让你反思,我真的需要继续付费来使用它吗?还是只是为了付费后缓解自己的焦虑感?是时候重新认识一下自己真正需要的是什么了。

进阶技巧和细节

  • 在 draft 列表长按 Select 触发全选功能;
  • 应用的角标可以通过自定义过滤标签来显示;
  • 在键盘扩展一栏上下划动可以在动作组间快速切换;
  • 能同时在不同的 Inbox、Flagged、Archive 的列表选择多个 drafts,然后进行批处理;
  • Trash 列表下的 draft 会在 7 天后自动删除;
  • Merge 的同时,也会把 draft 的标签一起合并;
  • 在某 Workspace 下新建的 draft 会自动添加过滤的标签;
  • 支持连接同一服务的不同账号,比如可以通过不同的推特账号发送推文,不过不支持 Evernote 的多账号;
  • 如果编辑的 Script 脚本较长的话,可以把其中一半的脚本放入下一个步骤编辑,这样可以提升编辑框的加载速度,运行的效果是一样的;
  • 在「标准视图」模式的 Plus 设备上,开启 Drafts 5 的横屏模式后,可以通过点击 side bar 实现和 iPad 一样把 draft「抽屉」或者动作组「抽屉」固定在一边的效果。

分享链接汇总

  1. Drafts 5 官方文档首页:Drafts | Documentation for Drafts 5
  2. Drafts 5 动作社区:Action Directory | Drafts Action Directory
  3. Drafts 5 URL Schemes 文档:URLs | Drafts
  4. Drafts 5 Script Wiki 文档:Scripting
  5. 从 Drafts 4 迁移的文档:Migrating from Drafts 4
  6. 在提醒事项添加购物清单的动作:Shopping Reminder
  7. 获取应用 Markdown 链接并替换的动作:Get App Link
  8. 获取应用 Markdown 链接的 Workflow:Get App Link
  9. 1Writer 中利用 Drafts 5 整理的动作:Arrange in Drafts 5
  10. 在 Things 中新建一个完整项目的动作:Add New Project in Things
  11. 使用 Prompt 在 Things 中新建一个任务的动作:Add to Things Prompt
  12. 发布文章至 WordPress 的动作:Post to WordPress via: Colin Walker
  13. 向 Todoist 添加任务的动作:Todoist Quick Add via: davenicholls
  14. 向 Fantastical 添加多个事件的动作:Event in Fantastical

Happy Hacking 👽

最后,分享一个自己根据开发者发布的 Dark-Light Preview 动作修改的两种主题,直接点击安装即可。

Dark-Light Preview (with custom css)

预览效果图