Org-mode的列视图简明教程

原文Emacs Org's Column View, 由 Bastien Guerry 编辑,维护。本文只做学习之用。

简介:默认列视图

首先按 C-c C-x C-c 打开默认列视图, 将每个 outline item 转换成一个显示其某些属性的表格行。

只可以在列视图起作用的条目上,按 q 关闭列视图,返回到普通视图, 但可以从缓冲区中的任何位置打开列视图。

第一个标题现在是一列显示属性的可浏览列。 缓冲区的第一个突出显示的行简要地告诉你在每个列中显示什么属性。 在这个截图中,它显示:

ITEM for the headline title
  T for the TODO keyword
  P for the priority cookie
  T for the tags

默认列仅显示 当前条目的内容(标题内容) ,/TODO/ 状态, 当前条目的优先级及其标签,稍后将看到如何添加自己的其他属性。

此默认设置由变量 org-columns-default-format 所定义的,该全局值为:

#+COLUMNS: %25ITEM %TODO %3PRIORITY %TAGS
Element Description
%25ITEM display the item in a 25-characters-width field
%TODO display the TODO state of the item
%3PRIORITY display the priority in a 3-chars-width field
%TAGS display the tags of the entry

自定义默认列视图

好的,现在让我们来自定义列视图。

例如,我们要更改 PRIORITY 字段和 TAGS 字段的宽度:

#+COLUMNS: %25ITEM %5TODO %1PRIORITY %10TAGS

TODO字段(%5TODO)现在为5个字符,而优先级和标签字段为1和10。

现在我们要更改列的标题。 例如 - 由于我们是这样的勤奋工作 - 每个项目其实就是一个 /Task/:

#+COLUMNS: %25ITEM(Task) %5TODO(To-do) %1PRIORITY %10TAGS

以上还添加了一个 To-do 的别名,用于显示此条目的TODO状态。

列视图中添加其他属性

要怎么在列视图中添加其他属性呢? 例如,我们想要添加 SCHEDULED 属性。 那么只需要重新定义全局 #+COLUMNS 选项,如下所示:

#+COLUMNS: %30ITEM %10SCHEDULED %TODO %3PRIORITY %TAGS

刷新 Org 缓冲区来使配置生效,然后再次输入 C-c C-x C-c 。 现在列视图中显示SCHEDULED属性。

** Exemple of outline item with a SCHEDULED property
   SCHEDULED: <2007-10-14 dim>

可用在列视图中可用属性如下所示:

ITEM         The content of the headline.
TODO         The TODO keyword of the entry.
TAGS         The tags defined directly in the headline.
ALLTAGS      All tags, including inherited ones.
PRIORITY     The priority of the entry, a string with a single letter.
DEADLINE     The deadline time string, without the angular brackets.
SCHEDULED    The scheduling time stamp, without the angular brackets.

以上属性都是特殊属性,但是可以定义自己的属性。

在自定义属性进行复杂的操作之前,让我们来学习如何为不同的子树使用不同的列视图。

定义子树的列视图

要定义特定条目的列视图,只需添加特殊属性 :COLUMNS: 即可:

** Top node for columns view
   :PROPERTIES:
   :COLUMNS:  %25ITEM %TAGS %PRIORITY %TODO
   :END:

此视图将用于条目及其整个子树 - 除非其子节点有其自己的列视图。

看下面的示例:

** Top node for columns view
   :PROPERTIES:
   :COLUMNS: %25ITEM %TAGS %PRIORITY %TODO
   :END:
*** TODO Example 1
*** TODO Example 2
*** DONE Example 3

但是,如果你突然喜欢 %TAGS%TODO 的右边呢? 将光标放在 %TAGS 字段中,然后按 M-right ,它会将该字段向右移动。

如果你想让一个区域变得更宽? 没问题。 只要去那个字段,然后按`>'来扩大字段(或'<'缩小它)。

如果要交互定义属性的列元素,请转到其字段并按's'。

已知道如何自定义每个条目的列视图,接下来就到自定义属性了。

为某些属性添加 summary-types

来定义一个包含自己的列视图和一些属性的新条目:

** My project
   :PROPERTIES:
   :COLUMNS:  %20ITEM %9Approved(Approved?){X} %Owner %11Status %10Time_Spent{:}
   :END:

有点复杂,这里解说一下。 一个 :COLUMNS: 属性,定义了列视图,具体每个元素具体含义如下:

Element Description
%20ITEM display the item (20 characters for this field)
%9Approved(Approved?){X} display the "Approved" property
%Owner display the "Owner" property
%11Status display the "Status" property
%10TimeSpent{:} display the "Timespent" property

{X}{:} 具体代表了什么,有什么含义呢? 它们定了 summary-types.

{X} 表示:如果所有条目的 Approved 属性都具有 [X] 值,才最终显示 [X] (否则显示 [-][ ] )。

{:} 表示:通过把 Timespent 属性中找到的所有时间值求和,来显示总的时间支出。

一旦有了 :COLUMN: 属性定义,可以通过 C-c C-x p 交互地添加任何属性。 它将提示输入属性的名称,并根据属性(如果有)的 _ALL 关联属性或缓冲区中找到的值提供默认的可能值。

定义属性的所有可能值

定义 summary-types 类型意味着需要为某些属性设置一组有限的可能值。

例如,上面讨论的 Approved 应该只有两个可能的值: [ ][X]

Status 属性也是同样的:你可能只想定义一些状态, 如 "In progress" "Not started yet" "Finished"。

可以使用 _ALL 后缀来限制任何属性的允许值,如下所示:

** My project
   :PROPERTIES:
   :COLUMNS:  %20ITEM %9Approved(Approved?){X} %Owner %11Status %10Time_Spent{:}
   :Owner_ALL:    Tammy Mark Karl Lisa Don
   :Status_ALL:   "In progress" "Not started yet" "Finished" ""
   :Approved_ALL: "[ ]" "[X]"
   :END:

| Owner_ALL    | only accept Tammy Mark Karl Lisa Don                   |
| Status_ALL   | only accept "In progress" "Not started yet" "Finished" |
| Approved_ALL | only accept "[ ]" "[X]"                                |

注意:* _ALL属性是元属性,定义了如何使用属性本身的规则。

当位于列的字段中时,可以通过按 a 来定义关联属性的所有可能值: 它将提示当前的一组允许的值,你可以编辑它。

在子树中有三个条目的完整的例子

下面是一个关于列视图如何影响条目及其子树的显示的示例。 好好观察并测试它。

** My project
   :PROPERTIES:
   :COLUMNS:  %20ITEM %9Approved(Approved?){X} %Owner %11Status %10Time_Spent{:}
   :Owner_ALL:    Tammy Mark Karl Lisa Don
   :Status_ALL:   "In progress" "Not started yet" "Finished" ""
   :Approved_ALL: "[ ]" "[X]"
   :END:

*** Item 1
    :PROPERTIES:
    :Owner:    Tammy
    :Time_spent:   1:45
    :Status:   Finished
    :END:

*** Item 2
    :PROPERTIES:
    :Owner:    Tammy
    :Status:   In progress
    :Time_spent:   0:15
    :END:

*** Item 3
    :PROPERTIES:
    :Owner:    Lisa
    :Status:   Not started yet
    :Approved: [X]
    :END:

从列视图编辑属性

到现在为止还挺好。 但是,列视图的一个好处是它可以让您快速访问和编辑任何属性。

使用 v 在minibuffer中显示字段值。

使用 e 来交互地选择/编辑值。

使用 S-left/right 循环遍历字段中的允许值。

使用 a 编辑此属性的允许值。

结论: 能做的还有更多更多

好的,以上就是今天的全部了。 但是让我告诉你最后两个提示,让你进一步探索的列视图:

  1. 您可以使用列视图并循环浏览可见性。
  2. 列视图也适用于议程缓冲区。

推荐阅读更多精彩内容