Agenda插件org-super-agenda插件和agenda的自定义设置
缘起
在使用了org mode进行日程管理和工作记录后,尽管有不定期的archive,我的GTD.org这个文件已经超过了4000行。直接使用这个文件来管理日程已经显得不怎么方便,除非每天都进行一次全程的回顾,才可能把各个日程和待办梳理出来,所以一定要使用一些方法,将这些待办和日程过滤出来,才有可能实现有效的管理。
在自定义agenda之前
默认的agenda命令其实有了一些基本的过滤。具体的内容可以在 org-agenda
后查看到
a
Agenda for current week or day 这个最常用,显示周的日程t
list of all TODO entries 这个可以把所有有着TODO状态的清单列出来T
Entries with special TODO kwd 和上一条类似,过程中会增加一个过滤条件,显示指定的TODO关键字的清单m
Match a TAGS/PROP/TODO query 根据tag来过滤显示清单M
Likd m, but only TODO entries 和m功能相同,但只显示带有TODO关键字的清单s
search for keywords 根据关键字搜索S
Like s, but only TODO entries 和s功能相同,但只显示带有TODO关键字的清单/
Multi-occur?
Find :FLAGGED: entries*
Toggle sticky agenda views<
Brffer, subtree/region restriction 限定范围>
Remove restriction 取消限定e
Export agenda views#
List stuck project 显示停滞的项目,何为停滞,可以自定义,按!
就可进入自定义菜单C
Configure custom agenda commands 打开自定义agenda配置的界面
个人认为,在上述命令中,除了 a
t
T
之外,其它并不实用,特别是那几条搜索的命令。因为进入agenda界面就是想查看一下还有什么遗忘的内容,因为已经想不起来做什么了,就不可能还能想起什么关键字来进行搜索了。
在自定义之agenda前,最多使用的就是 a
偶尔会使用 t
来查看那些没有指定日期的任务。因此在这个阶段,我尽量为每个任务指定一个时间,这样所有的任务都基本在 a
上展示出来。
自定义agenda
自定义的菜单可以通过emacs的设置界面进行配置,以下是我曾经配置的一个结果
(setq org-agenda-custom-commands
'(("n" "Agenda and all TODOs" ;; n 是自定义的快捷键 Agenda and all TODOs是标题
((tags-todo "@Tom|@Mary" nil) ;; 显示是todo状态的,且tag是 “@Tom”或”@Mary”的。当时的目的是重点关注这两个人相关任务
(agenda "" nil) ;; 显示日程,这一块和 =org-agenda= =a= 的效果一致
(todo "TODO" nil) ;; 显示所有 TODO 的任务
(todo "WAIT" nil)) ;; 显示所有WAIT的任务
nil)))
经过上述设置后,即可在 C-c a n
后显示自定义的日程。前提是 C-c a
已经和 org-agenda
绑定
使用org-super-agenda
很早就了解到有这么个插件,但是作者的站点介绍并没有吸引我,所以一直没有用。
我一直存在着这么一个困扰,就是在一个项目的下级列表中如果有一个任务,显示在agenda中,如果离开了上级菜单的这个context,可能会对这个任务的理解造成问题。如果这个时候从 agenda view
TAB
回去,上级的任务也没有展开,查看也是不方便。
为了解决这个问题,我直接去网上搜索了下,如何在agenda里显示上级任务。搜索的结论是使用 org-super-agenda,作者回答了提出问题的网友,并给出了配置。这使我下定决心使用这个插件。
项目地址:https://github.com/alphapapa/org-super-agenda
安装和使用
安装使用melpha,手工安装的方式在项目的页面上也有。
配置的过程就是配置 org-super-agenda-groups
,配置后即可分类别进行显示。
可以使用 setq
和 let
方式进行定义,但使用 let
后,在Agenda view里 g
刷新后会失效。
作者在页面上给出了一个截图,同时给出了这个截图的配置,仔细学习一下配置,能够对这个插件有较好的理解。
先名词解释
这是一个group的例子:
(:name "Today" ; Optionally specify section name
:time-grid t ; Items that appear on the time grid
:todo "TODAY") ; Items that have this TODO keyword
这是一个 :selector
一些规则
- 在一个group里,selector之间是or的关系
- 一个selector里如果有2个选项,也是or的关系,如:
:tag ("food" "dinner")
如果要and:and (:tag "shopping" :tag "@town")
- group之间有排序,可以用
:order
来排,也可以使用默认定义的顺序来排,在一个org-super-agenda-groups
里,在上一条被显示到的,不会再被下一条显示。或者说上一条中未被过滤显示的,会被排到下一条,接受下一条的过滤。:order
只影响过滤的排序,不影响显示的排序。 - 个人发现,只有有 TODO状态的列表才会显示。
常用的几个selector
:name
标题:and
与,因为默认都是或,所以如果要与的话,就要用到这个。:discard
和:not
的例子,(:discard (:not (:priority "A")))
如显示 priority 是A的。(:discard (:priority "C"))
不显示priority是C的。:auto-group
在每个列表中设置:PROPERTIES
可分类显示列表,这也是实现列表属于哪个项目的手段。但是如果设置了这个选项,如果上级任务没有设置属性的话,会无法过滤显示。:tag
标签过滤条件,发现如果是继承的标签是无效的
设置agenda的模板
基本思路和原先自定义的基本相同
- 尽量安排日程,在日历是显示
- 没有明确日期的,在日历下显示
- 列出所有在建的项目,需要关注的项目。前提是定期回顾所有项目,将需要关注项目的根列表设为
TODO
- 尽量可以分类,任务的项目名。前提是所有项目设置
:agenda-group:
属性