LWN:利用Org mode和iCalendar来管理自己的task!

关注了就能看到更多这么棒的文章哦~

Managing tasks with Org mode and iCalendar

July 14, 2020
This article was contributed by Martin Michlmayr
From: https://lwn.net/Articles/825837/
Translation benefits from DeepL

之前的文章里我介绍了todo.txt和Taskwarrior这两个任务管理工具。本文会继续研究任务管理工具,看看Org mode(这是一个最初为Emacs创建的系统),以及利用iCalendar标准的工具。现在是时候看看能否找到一个满足我的需求的系统了。

Not just for Emacs

Org mode是一种用于记笔记和进行项目规划的Emacs mode,不过我们下面会看到Org的工作流程和文件格式已经在Emacs之外得到了许多应用。Org mode可以让你在Emacs中轻松地记笔记、维护待办事项列表(to-do list)、规划项目等。Org的社区网站https://orgmode.org/worg/ 将其描述为 "用简单的纯文本文件来组织复杂生活的强大系统"。这听起来相当吸引人,因为很多读者可能很欣赏简单文本文件的能力,也可能很赞同现代生活越来越复杂。

Org mode的有趣之处在于,它不仅仅是一个任务管理器,而是一个组织管理你自己的生活的一套系统。Org mode还可以用来保存各种笔记,比如想法、引用、一系列网页链接,或者是代码的片段。我注意到的是,我经常在一天的时间里,在进行一系列的活动时记下一些想法和创意,比如在处理一个问题、阅读文章、或者与他人交流的时候。这些笔记中的一部分可能只是我想要保存下来一些观察到的信息,而另一些可能会在今后引发一些具体的任务。从这个角度来看,将笔记和任务都保存在同一个文档中似乎是很自然的事。

Org mode提供了一系列丰富的功能,例如折叠各个p(即把各个标题下面的信息隐藏起来不用显示)、为task来记录时间记录(就是记录开始和结束的时间)、从Emacs或其他应用程序(如Web浏览器或PDF阅读器)中搜集笔记或任务、维护表格(包括支持文本式的电子表格运算)、以及导出为其他格式(如HTML、LaTeX或Open Document格式)。在task管理方面,Org mode具有任务管理工具中常见的功能,如记录状态(比如TODO和DONE)、任务依赖关系(通过sub-task即子任务表示)、优先级(如[#A]为最高优先级)和tag标签(如:@home:)。

这些功能可以这样使用:

* LWN
** DONE Write article about task managers, part 1
** TODO [#A] Write article about task managers, part 2 :@home:
*** TODO [#A] Review Org mode
SCHEDULED: <2020-07-09 Thu 12:00> DEADLINE: <2020-07-09 Thu 17:00>

这里的星号表示标题,可以用于标记子p(或者表示某个task的sub-task)。由于Org把task和note混在了一起,所以如果某条note有状态(比如TODO),它基本上就成了一个任务。每个p都可以有一行表示时间规划,关键词是SCHEDULED、DEADLINE和CLOSED。有一个更详细的例子,适合作为Org语法的教程,参见这里:https://writequit.org/denver-emacs/presentations/files/example.org.html

Org mode还内置支持了scheduled task和deadline的日程支持。有许多教程(https://orgmode.org/worg/org-gtd-etc.html )展示了如何在Org mode下实现任务管理系统,能达到流行的GTD(Getting Things Done)系统的要求。

尽管Org最开始是作为Emacs的一种模式的,但Org file format文件格式已经在许多其他应用程序中有了支持。https://orgmode.org/worg/ 有一个其他可以支持org格式的工具列表,虽然那个页面似乎有些过时了。可以用Pandoc将Org文件转换为其他markup标记格式,Orga(https://github.com/orgapp/orgajs )提供了一个JavaScript中的Org解析器,GitHub和GitLab可以自动对Org文件进行渲染,等等。

我主要使用的编辑器是Vim,它也提供了一个基于Org format的插件,叫做Vim-OrgMode(见上图),它支持Emacs的Org mode的基本功能,比如折叠内容、改变任务状态和显示Agenda议程。。不过,与Emacs相比功能比较有限(比如不支持表格)。另一个Vim插件Vim Do Too看起来也很不错,但它更多的是 "受到Org mode的启发",而不是一个完全兼容的替代品。

对于那些想在通过网页或者移动设备上添加task的人来说,org-web(https://org-web.org/ )是一个可选项。这款网络应用在浏览器中运行,而不是运行在服务器上,它支持Dropbox和Google Drive,提供了很多功能,包括Agenda日程视图和表格功能。不过有一个潜在的缺点,org-web是专门为移动应用场景而优化的。organice(https://organice.200ok.ch/ )则解决了这个问题,它是org-web的一个合作branch,它是为移动和桌面浏览器构建的。Organice提供了大量的文档,它的比较页面(https://organice.200ok.ch/documentation.html#comparison )强调了一些优势,比如支持WebDAV(可以用来与Nextcloud同步)。

 [Orgzly]

最后,Orgzly(见上图)是一款热门的Android应用。尽管Orgzly只有一个核心开发者,但开发相当活跃。Orgzly支持将Org文件保存在Dropbox上、使用WebDAV、或者保存到本地存储。它提供了许多人们期望从移动设备的任务管理工具中获得的功能,比如scheduled events和deadline时间会有提醒。虽然支持在task中添加地理位置信息,但Orgzly还没有基于位置的提醒功能。它确实包含了一些内置的过滤器(Agenda、next three days、scheduled),并且可以定义自定义过滤器(也就是Orgzly中的 "search")。

总的来说,Org生态系统看起来相当有吸引力。文件格式简单,但功能强大。虽然Emacs的Org mode是最成熟的,但也有许多其他有趣的解决方案,将Org的应用范围扩展到了Emacs之外。

Standards, standards, ... and iCalendar

在回顾了三种不同的任务存储方式之后,就开始思考一个问题,为什么没有一个标准,用来描述task。当然,愤世嫉俗者会指出关于标准的xkcd漫画(https://xkcd.com/927/ )。不过事实证明是有一个真正的标准的,那就是iCalendar,也名为RFC 5545(https://tools.ietf.org/html/rfc5545 )。很多读者可能对微软Outlook和Google日历等应用通过电子邮件发送的ICS文件很熟悉,这些文件以VEVENT的形式包含了事件的信息。但该标准还定义了task,称之为VTODO,并具有支持它们所需的常用功能(优先级、进度、计划和到期日期、依赖关系等)。

iCalendar也是一种基于text的格式,不过它比todo.txt或Org更复杂,而且通常不会需要手动编辑。iCalendar比其他替代品更吸引人的地方在于它设计时就考虑到了同步这个需求。CalDAV可以用来同步日历(包括task)。日历可以存储在Nextcloud上(自行托管或通过众多提供商之一),或者使用Radicale或Xandikos自行搭建的托管服务器上。Vdirsyncer是一个用于同步日历和联系人的命令行工具,Android上的DAVx5也是一个支持它的工具。

围绕iCalendar构建的应用有很多。在Android上,我首先发现了OpenTasks。这款应用看起来相当吸引人,并提供了基本的任务管理,但缺少了许多重要的功能,包括recurring tasks重复任务和sub-tasks子任务。关于子任务的支持,在GitHub上有个issue,其中说会等到重复任务实现完之后再着手进行,但该评论是在2017年的,到目前为止,重复任务功能仍然没有实现。

还有一个维护更加积极的安卓应用,虽然也只有一个核心开发者,这就是上图的Tasks。它可以在F-Droid上安装。在Google Play上它的名字叫做Tasks.org。Tasks起源于Astrid,多年前Astrid曾是一款很受欢迎的应用,但这个公司被雅虎收购后,Astrid的发展就停止了。(爱挑毛病的编者早在2011年就评测过Astrid)。Tasks感觉相当精致,它有一些很有吸引力的地方,比如不仅可以给标签指定颜色,还可以指定图标。你可以把任务给隐藏起来等到过几天再出现,可以定义自定义过滤器,并根据你的位置信息接收提醒。Tasks 实现了任务管理器的核心功能,当然还有很多尚未实现的功能需求,比如滑动手势、进度条和 Markdown格式的显示美化。

由于iCalendar是一个标准,所以可以很容易地使用多个应用程序来管理任务。虽然我发现手机上的Tasks很有用,可以获得提醒也可以在旅途中添加任务,但我更喜欢用桌面软件进行更深入的管理。从这个角度来说,Nextcloud Tasks(见下图)看起来相当吸引人。它支持任务管理的核心功能,比如子任务、优先级、计划日期和到期日、以及进度管理。遗憾的是,,尽管开发者(是业余时间从事Nextcloud Tasks的工作)一直积极对票据发表评论,并邀请人们提交拉取请求,不过开发速度还是相当缓慢。此外,如果能与Nextcloud更好地整合,比如实现Nextcloud里的project的概念并跟其他Nextcloud应用(比如Deck,一个Kanban形式的organization tool)配合起来,那么这个应用将更加有用。

还有一些命令行下的iCalendar解决方案,尽管这些产品不像Taskwarrior那样成熟。Todoman,可以用来从命令行来list、edit和create任务。还有calcurse,这是一个基于curse库的日历,可以把任务显示出来。

综上所述,iCalendar是一个event和task的标准,并在许多工具中都有实现。除了这里介绍的之外,还有KDE的Korganizer、GNOME To Do等都使用了iCalendar格式。但它有一个缺点,这种格式虽然是基于文本的,但比较复杂,很难手动直接编辑。

Summary

在调查了四个不同的任务管理系统之后,是时候给出结论了。首先,我看到了open-source项目中非常常见的一种趋势。虽然开源的吸引力之一是有大量的工具可做选择,非常丰富多样。但这也是一个诅咒:介绍到的这些任务管理系统中,很多有几个半成品的解决方案,而不是针对每个类别(命令行、网络和移动场景)等都有一个完美的解决方案。如果有更多的开发者联合起来专注于一个解决方案,我们可能会有更成熟、更持久的项目。

说到这里,我觉得这四个系统都有一定的吸引力,并提供了强大的解决方案。就我个人而言,todo.txt在我看来过于简单。虽然这种格式对一些用户来说肯定相当有吸引力,但我觉得Org的格式更有表现力,但又足够简单,可以手工编辑。与todo.txt相比,Org中只是简单地增加了一个标题功能,就带来很大的不同,因为这样一来我们就可以在文件中更有结构和条例。然而,一个较好的todo.txt编辑器就可以地将文件结构化以提供类似的功能,比如利用tags标签来创建一些virtual p。

当我开始调查时,我非常确定我需要寻找一个移动应用加上一个桌面(无论是原生的或是基于Web的)应用程序的组合来管理任务。虽然我之前一直是一个使用命令行方式的人,但是,似乎任务管理如果有一个现代的、可视化的设计的话会很有好处,允许你轻松地对认为进行排序分类,把重要的任务与其他任务分开。然而,Taskwarrior的强大的text工具让我感到惊讶,它让任务管理变得简单。我也认为Org很有吸引力,因为我花了很多时间都在编辑文本,在我的文本编辑器中如果能管理任务,感觉是一个正确的选择。遗憾的是,Vim的Org插件的功能比起Emacs的Org mode来说还是弱了不少。

最有前途的选择似乎是iCalendar,因为它是一个实际存在的标准。它的应用广泛性,可能会随着时间的推移而增加。不幸的是,这种格式对于常规的手动编辑来说还不够简单,我宁愿把Org文件存储在Git中,也不愿意采用iCalendar文件来放到Git中。虽然两者都是纯文本文件,但Org文件的前后变动会更容易读懂。

如果我们是在一个理想的世界里的话,我会让Taskwarrior使用一个iCalendar的backend(后台),这样我就可以把Taskwarrior强大的基于文本的工具和iCalendar所拥有的网络和移动解决方案结合起来。尽管到目前为止,我主要倾向于基于iCalendar的解决方案,但我还是无法抵制Org这个强大而又简单的系统,感觉它用起来非常自然。

虽然我还没有完全下定决心,但有一个结论是明确的。除了todo.txt不适合我个人之外,我发现所有的系统都是可用的,而且各有各的吸引力。我可以选择这三个系统中的任何一个。唯一的问题是哪一个最适合我的工作流程,想要知道答案的话,唯一的方法是开始利用我自己的task来把工具先用起来,看看我适应得如何。我会添加一个任务,最晚在一年之后会重新来看看这个话题。

全文完

LWN文章遵循CC BY-SA 4.0许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注LWN深度文章以及开源社区的各种新近言论~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值