Table of Contents

1 简介

1.1 序

1.2 安装

1.3 激活

首先需要把下面4个Org命令添加到.emacs里

(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-ca" 'org-agenda)
(global-set-key "\C-cc" 'org-capture)
(global-set-key "\C-cb" 'org-iswitchb)

如果文件是以.org结尾的,那么打开来就是Org mode模式,如果是普通文件里打开Org mode模式,需要在开头加入下面这句:

MY PROJECTS    -*- mode: org; -*-

1.4 反馈

1.5 惯例

2 文档结构

2.1 大纲

Org 是在大纲模式之上实现的。大纲模式可以让我们用层次结构来组织文档,这是做笔记和想法的非常好实现方式。这种结构可以折叠(隐藏)文档的一部分而只显示文档的大概结构或者只显示我们正在处理的部分。Org 大大简化了大纲模式的使用,它把大纲模式的整个显示/隐藏功能整合到了一个命令中:org-cycle,这个命令绑定到了TAB键上。

2.2 标题

标题定义了大纲树的结构。它以处于一行左边缘的一个或多个星号开头。例如:

* Top level headline
** Second level
*** 3rd level
     some text
*** 3rd level
      more text

* Another top level headline

如果你不喜欢太多的星号,可以以空格后加一个星号作为标题的开头。Clean view,那里有设置方法。

2.3 视图循环

2.3.1 全局和本地循环

<TAB> (org-cycle)

,-> FOLDED -> CHILDREN -> SUBTREE --.
'-----------------------------------'

<S-TAB> (org-global-cycle)

C-u <TAB>

,-> OVERVIEW -> CONTENTS -> SHOW ALL --.
'--------------------------------------'

C-u C-u <TAB> (org-set-startup-visibility)

C-u C-u C-u <TAB> (outline-show-all)

C-c C-r (org-reveal)

C-c C-k (outline-show-branches)

C-c <TAB> (outline-show-children)

C-c C-x b (org-tree-to-indirect-buffer)

C-c C-x v (org-copy-visible)

2.3.2 初始可视化

当EMACS第一次打开Org文件时,全局状态是设置为折叠OVERVIEW, 只有顶层标题才可见。这个可以通过配置变量 org-startup-folded来改变,或者在每个单独的文件的任意位置加入下面任何一句:

#+STARTUP: overview
#+STARTUP: content
#+STARTUP: showall
#+STARTUP: showeverything

C-u C-u <TAB> (org-set-startup-visibility)

2.3.3 捕获不可见的编辑

2.4 移动

下面的命令可以跳转到缓冲区其他的标题。

快捷键 命令 含义
C-c C-f (org-forward-same-level) 下个同级标题
C-c C-b (org-backward-same-level) 上个同级标题
C-c C-u (outline-up-heading) 回到上级标题
C-c C-j (org-goto) 跳到其他位置但是不改变大纲视图

2.5 结构编辑

快捷键 命令 含义
M-<RET> (org-insert-heading) 插入一个同级标题/项目。如果光标是用在一行的开头,并且有个标题或一个文本列表项目(见Plain lists),新的标题/项目创建在当前行前面。如果用在一个常规的文本行开头,则把这行变为标题。如果处于一行的中间,这一行会被分开,后面的一部分成为新的标题。 如果你不想那一行被分开,自定义org-M-RET-may-split-line
C-<RET> (org-insert-heading-respec-content 在当前子树下插入一个新标题
M-S-<RET> (org-insert-todo-heading 插入和当前标题同级的新的TODO项目。也可见变量org-treat-insert-todo-heading-as-state-change
C-S-<RET> (org-insert-todo-heading-respect-content 插入和当前标题同级的新的TODO项目。像C-<RET>,新的标题会被插在当前子树后
<TAB> (org-cycle) 新的没有文本的条目,第一个<TAB>使它降级为之前的子级。第二次<TAB>让它成为父级,然后这样一直到顶级。然后再一次<TAB>回到初始状态。
M-<left> (org-do-promote) 提升当前标题一级
M-<right> (org-do-demote 降低当前标题一级
M-S-<left> (org-promote-subree) 提升当前子树一级
M-S-<right> (org-demote-subtree) 降低当前子树一级
M-S-<up> (org-move-subtree-up) 往上移动子树(和之前的同级子树交换)
M-S-<down> (org-move-subtree-down) 往下移动子树(和之前的同级子树交换)
M-h (org-mark-element) 标记当前元素。如果重复按,则会标记随后的元素。
C-c @ (org-mark-subtree) 标记当前的子树。如果重复按,则会标记随后同级的子树
C-c C-x C-w (org-cut-subtree) 杀死子树,从缓冲中移除,但是保存在kill ring里。如果加N前缀参数,则杀死N个随后的子树
C-c C-x M-w (org-copy-subtree) 复制子树到kill ring. 加参数N前缀,复制N个随后的子树
C-c C-x C-y (org-paste-subtree) 从kill ring里拽回子树。这个会改变子树的等级以适合树在当前的位置。拽回的级别也可用数字前缀指定,或拽回在一个标题标记如‘****’的后面
C-y (org-yank) 取决于选项org-yank-adjusted-subtree和org-yank-folded-subtree, Org的内部yank命令可以很聪明的用和C-c C-x C-y同样的命令粘贴子树文件夹。默认下,没有级别调整会被取代,但是拽回的树会折叠除非这样做会忍受文档之前的可视性。任何对这个命令的前置参数都会强制一个常规的yank执行,沿着前缀。一个比较好的办法来强制执行yank是C-u C-y. 如果你在yank后使用yank-pop, 它会坦率的拽回之前杀死的项目,而不调整和折叠
C-c C-x c (org-clone-subtree-with-time-shift  
C-c C-w (org-refile)  
C-c ^ (org-sort)  
C-x n s (org-narrow-to-subtree)  
C-x n b (org-narrow-to-block)  
C-x n w (widen)  
C-c * (org-toggle-heading)  
     

2.6 稀疏树

Org 模式的一个重要的功能是能根据大纲树中选择的信息构造出稀疏的树,这样文档就可以尽可能地折叠,但是选择的信息和它对应的标题会显示出来。试下就知道它是怎样工作的了。 Org 模式有几个命令可以创建这种树,这些命令都可以通过调度器来使用:

快捷键 命令 含义
C-c / (org-sparse-tree)  
C-c / r or C-c / / (org-occur)  
M-g n or M-g M-n (next-error)  
M-g p or M-g M-p (previous-error)  

对频繁使用的特定搜索字符串稀疏树,你可以使用选项org-agenda-custom-commands来定义快速键盘来达到特定的稀疏树。这些命令可以在整个日程调度器中使用。比如:

(setq org-agenda-custom-commands
         '(("f" occur-tree "FIXME")))

将会定义C-c a f为一个快捷键来匹配字符串"FIXME"而创造一个稀疏树。 可以用EMACS命令ps-print-buffer-with-faces来打印稀疏树,而不打印出文档的不可视部分。或者你可以使用C-c C-e C-v来输出文档的可视部分并打印结果文件。

2.7 文本列表

在大纲树的一项中,自定义格式的列表可以提供更多的组织结构,也使我们可以得到一个复先框列表(见[复先框])。Org 模式可以处理这种列表,并且 每个导出器(见导出)也能解析和格式化它们。 Org 能够识别有序列表、无序列表和描述列表。

  • 无序列表项以‘-’、‘+’开头,或者‘*'。
  • 有序列表以数字加'.'或')'开始,比如'1.'或'1)'. 如果你想以其它值开头,那么可以以[@20]开始。
  • 描述列表属于无序列表用‘::’将项和描述分开。

同一个列表的项目必须要统一缩进,列表序号必须左对齐。 同一列表中的项的第一行必须缩进相同程度。当下一行的缩进与列表项的的开头的符号或者数字相同或者更小时,这一项就结束了。当所有的项都结束时,或者后面空2行时,列表就结束了。比如:

** Lord of the Rings
       My favorite scenes are (in this order)
       1. The attack of the Rohirrim
       2. Eowyn's fight with the witch king
          + this was already my favorite scene in the book
          + I really like Miranda Otto.
       3. Peter Jackson being shot by Legolas
          - on DVD only
          He makes a really funny face when it happens.
       But in the end, no individual scenes matter but the film as a whole.
       Important actors in this film are:
       - Elijah Wood :: He plays Frodo
       - Sean Astin :: He plays Sam, Frodo's friend.  I still remember
         him very well from his role as Mikey Walsh in The Goonies.

。。。 因为缩进是用来管理这些列表的,所以其它结构比如'#+BEGIN…'块也可以缩进当作一个特别的列表。 。。。

快捷键 命令 含义
<TAB> (org-cycle) 项目可以和标题一样折叠,不过一般需要当光标在文本项目上的时候。可以参考org-cycle-include-plain-lists以了解更多。如果这个变量设为integrate,文本列表就会被当作低级别的标题一样。。。。
M-<RET> (org-inser-heading) 当前级插入新的项目。如果这个命令用在项目中间,项目会被一分为二,第二部分成为新的项目。如果这个命令是在项目之前执行的,新的项目就会被创建在当前项前面。
S-up   在当前列表里调到之前或之后的项目上,但是只在org-support-shift-select关闭的时候,如果不是你仍然可以段落跳转命令比如C-<up>和C-<down>这非常相似的效果
S-down    
M-up   移动包括子项目的项目上/下(交换同级前后的项目)。如果是有序列表,则会自动重新编号。
M-down    
M-left   增加和减少项目缩进。
M-right    
M-S-<left>    
M-S-<right>    
C-c C-c    
C-c -    
C-c *    
C-c C-*    
S-left/right    
C-c ^    

2.8 抽屉:把东西藏起来

有时候为了把和项目关联的信息隐藏起来,但是平时又不想看到。就可以用到Org的抽屉。除了标题和抽屉本身,所有其他都可以放在抽屉里。抽屉看上去像这样:

** This is a headline
       Still outside the drawer
       :DRAWERNAME:
       This is inside the drawer.
       :END:
       After the drawer.

你可以交互式的通过org-insert-drawer插入抽屉,快捷键是<C-c C-x d>. 如果有活动区域,这个命令会把这区域放入抽屉。如果有前缀,这个命令会调用org-insert-property-drawer并在当前标题下增加一个属性抽屉。 可以用<M-TAB>来完成抽屉关键字。

2.9 区块:折叠区块

Org mode使用begin…end区块来包含各种不同的代码,引用等内容。这些区块可以用TAB折叠和展开。你也可以在单文件头通过配置startup来折叠全部区块。

#+STARTUP: hideblocks
#+STARTUP: nohideblocks

2.10 脚注:脚注在Org的语法里是怎样定义的

Org mode支持脚注创建 脚注由方括号开始,要求放在第0列,不能有缩进。它在下一个脚注定义,标题或2个连续的空行后结束。比如:

The Org homepage[fn:1] now looks a lot better than it used to.
...
[fn:1] The link is: http://orgmode.org

Org mode扩展了数字语法到名称和可选的内部定义。以下是一些参考:

[fn:name]
[fn::This is the inline definition of this footnote]
[fn:name:a definition]

以下是脚注的命令:

快捷键 含义
C-c C-x f 这是一个移动命令。当光标处理引用处时,跳转到它的定义;当光标处理定义处时,跳转到第一个引用处。其他情况下,新建一个脚注。当有前缀时,会提供一个菜单供选择操作,其中包括重新给脚注编号。
C-c C-c 在定义和引用之间跳转
C-c C-o  
or  
mouse-1/2  
C-c '  

2.11 Org结构模式:在Org外编辑结构

2.12 Org语法:正式的语法描述

3 表格

3.1 内部表格编辑器:简单表格

Org 能够很容易地处理 ASCII 文本表格。任何以‘|’为首个非空字符的行都会被认为是表格的一部分。’|‘也是列分隔符。一个表格是下面的样子:

| Name  | Phone | Age |
|-------+-------+-----|
| Peter | 1234  | 17  |
| Anna  | 4321  | 25  |

当你在表格内部输入 TAB、RET 或者 C-c C-c 时表格都会自动调整。TAB 会进入下一个区域(RET 进入下一行)并且创建一个新的行。表格的缩进程度可以在第一行设定。以’|-’开头的一行会作为一个水平分隔行,当它下次调整排列时会将‘-’扩展至填充整行。所以想要建上面的那个表格,只需键入:

|Name|Phone|Age|
|-

然后 TAB 排列表格。还有一个更快的方法就是键入|Name|Phone|Age,再 C-c RET。 在表格区域中输入文本时,DEL、BACKSPACE 和所有其他的字符会以特殊的方式处理,防止影响到其他的区域。当按 TAB、S-TAB 或者 RET 将光标移动到其他区域时,区域中会自动填充一些空格。

  • 创建和转换

C-c | (org-table-create-or-convert-from-region) 把活动区域转换为表格。如果每行包括至少一个TAB符号,就用TAB划分。如果每行包括一个逗号(CSV),就用逗号来划分。如果当前没有活动区域就会建立一个空的 Org 表格。你可以使用一个前缀参数来强制一个分隔符:C-u 强制 CSV, C-u C-u强制TAB, C-u C-u C-u……. 如果没有活动区域,这个命令会生成一个空白Org表格。其实用|Name|Phone|Age C-c RET 来建表会更简单一点。

  • 调整和区域移动
快捷键 命令 含义
C-c C-c (org-table-align) 调整表格,不移动光标
C-c SPC (org-table-blank-field) 光标处空白
<TAB> (org-table-next-field) 调整表格,将光标移到下一个区域,必要时新建一行
S-<TAB> (org-table-previous-field) 调整表格,将光标移到上一个区域
<RET> (org-table-next-row) 调整表格,移到下一行。如果必要就建一新行。在开头或行尾,<RET>仍然做个NEWLINE,所以可以用来分割表格
M-a (org-table-beginning-of-field) 移到当前单元格前,或之前的单元格
M-e (org-table-end-of-field) 移到当前单元格末,或下一个单元格
  • 列和行的编辑
快捷键 命令 含义
M-<left> (org-table-move-column-left) 移动当前列
M-<right> (org-table-move-column-right) 向左/右
M-S-<left> (org-table-delete-column) 杀死当前列
M-S-<right> (org-table-insert-column) 在当前光标左边插入新的列
M-<up> (org-table-move-row-up) 移动当前行
M-<down> (org-table-move-row-down) 向上/下
M-S-<up> (org-table-kill-row) 杀死当前行或水平线
M-S-<down> (org-table-insert-row) 在当前行上插入一个新行。如有前置参数,则在当前行下面创建
C-c - (org-table-insert-hline) 在当前行下插入水平线。如有前置参数,这线在当前行上面创建
C-c <RET> (org-table-hline-and-move 在当前行下插入水平线,移动光标到线下的新行里。
C-c ^ (org-table-sort-lines) 在区域中整理表格线. ……..
  • 区域
快捷键 命令 含义
C-c C-x M-w (org-table-copy-region) 复制表格矩形区域内容到粘贴板. ….
C-c C-x C-w (org-table-cut-region) 剪切表格矩形内容到粘贴板
C-c C-x C-y (org-table-paste-rectangle) 复制一个矩形内容到表格….
M-<RET> (org-table-wrap-region) ….
  • 计算
快捷键 命令 含义
C-c + (org-table-sum) 计算当前列,或矩形选区里的数. 结果显示在表格下方可以用C-y插入
S-<RET> (org-table-copy-down) 如果当前区域是空的,从上面开始第一个非空区域复制….
  • 其它
快捷键 命令 含义
C-c ' (org-table-edit-field) 在单独的窗口编辑当前区域….
M-x org-table-import RET  
C-c (org-table-create-or-convert-from-region ….
M-x org-table-export RET   输出表格,。。。

如果你不喜欢表格自动的编辑方式,想要去掉“|”,可以在下面关掉

(setq org-enable-table-editor nil)

这样的话唯一还能使用的命令是C-c C-c来手工对齐。

3.2 列宽和对齐方式

列宽是表格编辑器自动调整的。列的对齐也是根据小数来自动调整的。。。。

3.3 列组

3.4 Orgtbl minor模式

3.5 数据表

3.5.1 参考

3.5.2 计算公式语法

3.5.3 EMACS LISP 公式

3.5.4 持续和时间值

3.5.5 单元格和范围公式

3.5.6 列公式

3.5.7 Lookup 函数

3.5.8 编辑和调试公式

3.5.9 更新表格

3.5.10 高级特征

3.6 Org-Plot

Org-Plot可以根据存在表格里的信息,生成图形或ASCII艺术图形

  • Graphical plots using Gnuplot

Org-Plot通过使用Gnuplot http://www.gnuplot.info 和 gnuplot-mode http://xafs.org/BruceRavel/GnuplotMode 生成2D,3D图形. 要看到这个效果必须保证你已经把2样都安装好了. 然后使用 C-c " g or M-x org-plot/gnuplot <RET> 在下面的表格里

#+PLOT: title:"Citas" ind:1 deps:(3) type:2d with:histograms set:"yrange [0:]"
| Sede      | Max cites | H-index |
|-----------+-----------+---------|
| Chile     |    257.72 |   21.39 |
| Leeds     |    165.77 |   19.68 |
| Sao Paolo |     71.00 |   11.50 |
| Stockholm |    134.19 |   14.33 |
| Morelia   |    257.56 | 17.67   |

更多使用方法,可以见教程 http://orgmode.org/worg/org-tutorials/org-plot.html

  • Plot Options
  • ASCII bar plots

4 超链接

4.1 链接格式:ORG里链接的格式

普通的是这样的文本结构

[[link][desciption]] or alternatively [[link]]

当方括号完成后,有描述的就显示描述内容,没有描述的就是链接内容。按C-c C-l可以编辑链接和描述内容。如果光标在末尾或开头,那么按<BACKSPACE>可以删除方括号并显示文本内容,再添加完整方括号则显示连接内容或链接本身。

4.2 内部链接

如果一个链接地址并不是 URL 的形式,就会作为当前文件内部链接来处理。最重要的一个例子是:

[[#my-custom-id]]

它会链接到 CUSTOMID 属性是 “my-custom-id” 的项。 这样的链接

[[My Target]] 或 [[My Target][Find my target]]

会出现在当前文件的搜索里。 当光标在链接上的时候,可以用 C-c C-o 来跟踪 或用鼠标单击。链接到自定义的IDs时会指向标题。最好的匹配是链接像’' 如果没有专用的目标存在,则会在缓冲里找匹配的名字。比如:

 #+NAME: My Target
| a  | table |
|----+-------|
| of | four cells |

如果以上也找不到,那么会查标题或TODO关键词和标签。

在输出过程中,内部链接会被用来标记物件并用数字来对齐他们。。。。

 - one item
- <<target>>another item
Here we refer to item [[target]].

当输出时,最后一句话会变成"Here we refer to item 2" 在非org文件里,搜索会在链接文本里进行。以上例子,会搜索"my target" …

4.2.1 Radio targets

Org可以自动的让普通文本里出现的目标转成链接。。。。

4.3 外部链接

Org 支持的链接格式包括文件、网页、新闻组、BBDB 数据库项、IRC 会话和记录。外部链接是 URL 格式的定位器。以识别符开头,后面跟着一个冒号,冒号后面不能有空格。下面是一些例子:

http://www.astro.uva.nl/~dominik          on the web
    doi:10.1000/182                           DOI for an electronic resource
    file:/home/dominik/images/jupiter.jpg     file, absolute path
    /home/dominik/images/jupiter.jpg          same as above
    file:papers/last.pdf                      file, relative path
    ./papers/last.pdf                         same as above
    file:/myself@some.where:papers/last.pdf   file, path on remote machine
    /myself@some.where:papers/last.pdf        same as above
    file:sometextfile::NNN                    file, jump to line number
    file:projects.org                         another Org file
    file:projects.org::some words             text search in Org file31
    file:projects.org::*task title heading search in Org
    file32
    docview:papers/last.pdf::NNN              open in doc-view mode at page
    id:B7423F4D-2E8A-471B-8810-C40F074717E9   Link to heading by ID
    news:comp.emacs                           Usenet link
    mailto:adent@galaxy.net                   Mail link
    mhe:folder                                MH-E folder link
    mhe:folder#id                             MH-E message link
    rmail:folder                              RMAIL folder link
    rmail:folder#id                           RMAIL message link
    gnus:group                                Gnus group link
    gnus:group#id                             Gnus article link
    bbdb:R.*Stallman                          BBDB link (with regexp)
    irc:/irc.com/#emacs/bob                   IRC link
    info:org#External links                   Info node or index link
    shell:ls *.org                            A shell command
    elisp:org-agenda                          Interactive Elisp command
    elisp:(find-file-other-frame "Elisp.org") Elisp form to evaluate

以上链接里,一些是通过contrib /文件存在的。比如,以下链接到VM或Wanderlust信息是有用的:

vm:folder                                 VM folder link
    vm:folder#id                              VM message link
    vm://myself@some.where.org/folder#id      VM on remote machine
    vm-imap:account:folder                    VM IMAP folder link
    vm-imap:account:folder#id                 VM IMAP message link
    wl:folder                                 WANDERLUST folder link
    wl:folder#id                              WANDERLUST message link

… 链接应该有[[阔起来,并可以加描述:

[[http://www.gnu.org/software/emacs/][GNU Emacs]]

4.4 使用链接

ORG提供了不同的方法来用语法创建链接

快捷键 命令 含义
C-c l (org-store-link)  
C-c C-l (org-insert-link)  
C-u C-c C-l    
C-c C-l (with cursor on existing link)  
C-c C-o (org-open-at-point)  
<RET>    
mouse-2    
mouse-1    
mouse-3    
C-c C-x C-v (org-toggle-inline-images  
C-c % (org-mark-ring-push)  
C-c & (org-mark-ring-goto)  
C-c C-x C-n (org-next-link)  
C-c C-x C-p (org-previous-link)  

4.5 ORG之外使用链接

你可以使用org语法的链接不仅仅在org文件,可以是其它的在emacs缓冲里的。

global-set-key "\C-c L" 'org-insert-link-global)
(global-set-key "\C-c o" 'org-open-at-point-global)

4.6 链接短号

有时候长URL会输起来很麻烦,这个时候可以用链接短号

[[linkword: tag][description]]

tag是可选的,linkword必须是字母开头,包含字母,数字,'-'和‘_' . 可以通过设置来表示:

(setq org-link-abbrev-alist
       '(("bugzilla"  . "http://10.1.2.9/bugzilla/show_bug.cgi?id=")
        ("url-to-ja" . "http://translate.google.fr/translate?sl=en&tl=ja&u=%h")
        ("google"    . "http://www.google.com/search?q=")
        ("gmap"      . "http://maps.google.com/maps?q=%s")
        ("omap"      . "http://nominatim.openstreetmap.org/search?q=%s&polygon=1")
        ("ads"       . "http://adsabs.harvard.edu/cgi-bin/nph-abs_connect?author=%s&db_key=AST")))

…. 如果只是简单的在文档里用可以这样:

#+LINK: bugzilla  http://10.1.2.9/bugzilla/show_bug.cgi?id=
#+LINK: google    http://www.google.com/search?q=%s

4.7 文件链接里的搜寻选项

。。。

[[file:~/code/main.c::255]]
[[file:~/xx.org::My Target]]
[[file:~/xx.org::*My Target]]
[[file:~/xx.org::#my-custom-id]]
[[file:~/xx.org::/regexp/]]

4.8 自定义搜索

。。。

5 待办事项

5.1 TODO基础:标记和显示TODO入口

标题以TODO开头就可以变成待办事项

*** TODO Write letter to Sam

最重要的命令有

快捷键 命令 含义
C-c C-t (org-todo) 让TODO在未标记->TODO->DONE重复循环
C-u C-c C-t   当TODO关键词。。。
S-<right> / S-<left>    
C-c / t (org-show-todo-tree)  
C-c a t (org-todo-list)  
S-M-<RET> (org-insert-todo-heading)  

5.2 多状态工作流程

5.2.1 TODO关键词作为工作流状态

可以用TODO关键词来显示一个工作中的项目进程的不同的序列状态

(setq org-todo-keywords
      '((sequence "TODO" "FEEDBACK" "VERIFY" "|" "DONE" "DELEGATED")))

5.2.2 TODO关键词作为类型

第二种可能就是使用TODO关键词去显示项目的不同类型。

(setq org-todo-keywords '((type "Fred" "Sara" "Lucy" "|" "DONE")))

5.2.3 单文件设置多个关键词

(setq org-todo-keywords
          '((sequence "TODO" "|" "DONE")
            (sequence "REPORT" "BUG" "KNOWNCAUSE" "|" "FIXED")
            (sequence "|" "CANCELED")))

你也可能会使用下面命令:

  • C-u C-u C-c C-t
  • C-S-<right>
  • C-S-<left>
  • S-<right>
  • S-<lest>

5.2.4 设置TODO状态快捷键

(setq org-todo-keywords
          '((sequence "TODO(t)" "|" "DONE(d)")
            (sequence "REPORT(r)" "BUG(b)" "KNOWNCAUSE(k)" "|" "FIXED(f)")
            (sequence "|" "CANCELED(c)")))

5.2.5 为不同文件设置关键词

#+TODO: TODO FEEDBACK VERIFY | DONE CANCELED

(你也可以写 #+SEQTODO。。。)或

#+TYP_TODO: Fred Sara Lucy Mike | DONE 
#+TODO: TODO | DONE
#+TODO: REPORT BUG KNOWNCAUSE | FIXED
#+TODO: | CANCELED

5.2.6 TODO关键词

可以用org-todo-keyword-faces, 比如:

(setq org-todo-keyword-faces
          '(("TODO" . org-warning) ("STARTED" . "yellow")
            ("CANCELED" . (:foreground "blue" :weight bold))))

5.2.7 TODO

* TODO Blocked until (two) is done
    ** DONE one
    ** TODO two

    * Parent
      :PROPERTIES:
      :ORDERED: t
      :END:
    ** TODO a
    ** TODO b, needs to wait for (a)
    ** TODO c, needs to wait for (a) and (b)  

。。。

* This entry is never blocked
      :PROPERTIES:
      :NOBLOCKING: t
      :END:

5.3 进度日志

当你改变一个 TODO 状态为 DONE 时,或者当你每次改变一个 TODO 项的状态时,Org 都会自动记录时间戳或者作一个记录。这是高度可配置的。可以基于每一个关键字进入设置,并且可以定位到一个文件甚至子树。

5.3.1 完成的项目:什么时候这个项目会被标记完成?

最基本的日志功能是跟踪一个特定项目的完成。这可以这样实现:

(setq org-log-done 'time)

这时当你将一个项目从一个 TODO(未完成)状态改变为一个完成状态时,标题下面就会插入一行 “CLOSED:[timestamp]”。如果你想和时间戳一起作一个记录,用: …

5.4 优先级

如果你广泛地使用 Org 模式,这样你就会有大量的 TODO 项。给它们设定优先级就很有必要。可以在 TODO 项的标题中加入一些标记(cookie)来设置它们的优先级,像这样:

*** TODO [#A] Write letter to Sam Fortune
  • 默认情况下,org支持3个优先级'A','B','C'.'A'是最高优先级。一个没有入口的cookie会被当作'B'.优先级只有在视图归类里面会不同,在视图外,他们没有任何继承意思。cookies可以通过配置org-proority-faces来高亮显示不同颜色。
  • 优先级可以用到任何其它大纲视图结点,而不一定非要TODO项目
快捷键 命令 含义
C-c   设置当前大纲优先级,命令显示A,B,C,当你用空格代替,优先级的标记会从大纲删除。优先级也可以被远程的改变,从时间线和视图缓冲通过 , 命令
S-<up> (org-priority-up)  
S-<down> (org-priority-down) 升/降当前标题的优先级。这些键也用来修改时间戳

-你可以修改优先级范围,通过设定org-highest-priority, org-lowest-priority和org-default-priority

#+PRIORITYES:A C B

5.5 任务细分

  • 很多时候将一个大的任务分成几个的易于完成的小任务是明智的。你可以通过在TODO项目下新建一个大纲树,并在子树上标记子任务来实现这个功能。为了能对已经完成的任务有个大致的了解,你可以在标题的任何地方插入‘[/]’或者‘[%]’。当每个子任务的状态变化时,或者当你在标记上按 C-c C-c时,这些标记状态也会随之更新。例如:
* Organize Party [33%]
    ** TODO Call people [1/2]
    *** TODO Peter
    *** DONE Sarah
    ** TODO Buy food
    ** DONE Talk to neighbor
  • 如果一个标题同时有复选框和TODO子项目在下面,状态标记就会变得很模糊.设置属性 COOKIEDATA 为'checkbox'或'todo'来解决他。
  • 如果你想统计标记数任何TODO子项目(不仅仅是直接子项目),配置org-hierarchical-todo-statistics. 为一个单独的子树做的时候,可以包括'recursive'到COOKIEDATA属性值里
* Parent capturing statistics [2/20]
      :PROPERTIES:
      :COOKIE_DATA: todo recursive
      :END:
  • 如果你想让一个TODO项目在它所有子项目都完成时标记为DONE,你可以这样设置:
(defun org-summary-todo (n-done n-not-done)
      "Switch entry to DONE when all subentries are done, to TODO otherwise."
      (let (org-log-done org-log-states)   ; turn off logging
        (org-todo (if (= n-not-done 0) "DONE" "TODO"))))

    (add-hook 'org-after-todo-statistics-hook 'org-summary-todo)
  • 另一种可能就是复选框的使用来标记一个大数量子任务的层级。

5.6 复选框

  • 在文本列表里面的每个项目可以做为复选框,通过'[]'开头。 这和TODO项目很相似,但是更轻便。复选框不在全局TODO表里, 所以他们常被用来把一个任务细分为很多简单的步骤。或者你可以用来当作购物列表。通过C-c C-c来选中复选框,或鼠标(非常感谢PIOTR ZIELINSKI'S org-mouse.el)
  • 这是一个例子:
* TODO Organize party [2/4]
      - [-] call people [1/3]
        - [ ] Peter
        - [X] Sarah
        - [ ] Sam
      - [X] order food
      - [ ] think about what music to play
      - [X] talk to the neighbors
  • 复选框是层级的,所以当一个子复选框被选中的时候,就会在父复选框中显示出来。
  • '[2 / 4]''[ 1 / 3]'是用来显示一共有几个,其中几个完成了。。。。
  • 如果当前节点是有续属性,那边复选框就必须按顺序来选择,不然会出错。
快捷键 命令 含义
C-c C-c (org-toggle-checkbox) 切换复选框状态。。。
C-c C-x C-b (org-toggle-checkbox)  
M-S-<RET> (org-insert-todo-heading) 插入一个新的复选框项目。这只在纯文本列表里才工作
C-c C-x o (org-toggle-ordered-property) 触发顺序属性入口,。。。
C-c # (org-update-statistics-cookies)

6 标签

  • 要为交叉相关的信息提供标签和上下文,一个不错的方法是给标题分配标签。Org 模式能够广泛地支持标签。
  • 每一个标题都能包含多个标签,它们位于标题的后面。标签可以包含字母,数字, ‘_’ 和 ‘@’ 。标签的前面和后面都应该有一个冒号,例如,“:work:”。可以指定多个标签,就像“:work:urgent:”。标签默认是粗体,并和标题具有相同的颜色。

6.1 标签继承:标签使用大纲的树状结构

  • 标签具有大纲树的继承结构。如果一个标题具有某个标签,它的所有子标题也会继承这个标签。例如,在列表
* Meeting with the French group      :work:
    ** Summary by Frank                  :boss:notes:
    *** TODO Prepare slides for him      :action:
  • 中,尽管没有明确标出,最后一个标题会有标签“:work:”,“:boss:”,“:note:”,和“:action”。你也可以设定一个标签让所有的标题都继承,就好像标签在包含整个文件的第零级标题中指定了一样。
#+FILETAGS: :Peter:Boss:Secret:
  • 限制标签继承特别的标签,用og-tags-exclude-from-inheritance. 完全关闭用 org-use-tag-inheritance

6.2 设置标签   标签设置

  • 直接在标题后用 ":tag name:"
  • C-c C-q (org-set-tags-command): 插入TAG,自动对齐
  • C-c C-c (org-set-tags-command): 当标签在标题上时,和上面的命令一样是插入标签的意思。
  • 可以动态的选缓冲中设置的标签或自定义标签
#+TAGS: @work @home @tennisclub
#+TAGS: laptop car pc sailboat
  • 如果已经全局设置过标签用变量:org-tag-alist, 但是想要动态插入标签列表在一个特殊的文件,可以加个空白的标签到行:
#+TAGS:
  • 如果你有个优先的系列想用到每个文件里,除了每个文件定义标签行外,你可以指定一个标签 org-tag-persistent-alist. 你可以通过加个STARTUP选项来关闭。
#+STARTUP: noptag
  • 可以在EMACS的INIT文件里定义常用标签:
(setq org-tag-alist '(("@work" . ?w) ("@home" . ?h) ("laptop" . ?l)))
  • 如果标签只是和你工作的文件相关, 那么你可以替换设置为:
#+TAGS: @work(w)  @home(h)  @tennisclub(t)  laptop(l)  pc(p)
  • 标签接口会显示可以用的标签窗口,如果你要另起一行,可以加'\n'到标签列表
#+TAGS: @work(w)  @home(h)  @tennisclub(t) \n laptop(l)  pc(p)
  • 或写成2行
#+TAGS: @work(w)  @home(h)  @tennisclub(t)
    #+TAGS: laptop(l)  pc(p)
  • 也可以通过括号分组标签
#+TAGS: { @work(w)  @home(h)  @tennisclub(t) }  laptop(l)  pc(p)
  • 你显示至多一个'@work','@home','@tennisclub'应该被选择。不要忘记C-c C-c激活变动的地方。

6.3 标签查找 7 属性 7.1 扩展阅读 8 日期和时间 8.1 时间戳 8.2 创建时间戳 8.3 截止期限和计划安排 8.4 记录工作时间 9 捕获——转发——存档 9.1 捕获 9.2 转送笔记 9.3 归档 10 议程视图 10.1 议程文件 10.2 议程调度器 10.3 内建议程视图 10.3.1 周/日议程 10.3.2 全局TODO列表 10.3.3 匹配标签和属性 10.3.4 单文件时间轴 10.3.5 查找视图 10.4 议程缓冲区的命令 10.5 定制议程视图 11 准备导出 11.1 结构的组成元素 11.2 图片和表格 11.3 纯文本的例子 11.4 包含文件 11.5 嵌入 LaTex 12 导出 12.1 导出选项 12.2 导出调度器 12.3 ASCII/Latin-1/UTF-8 的导出 12.4 HTML的导出 12.5 LaTeX和PDF的导出 12.6 DocBook的导出 12.7 iCalendar的导出 13 发布 14 处理源代码 15 杂项 15.1 补全 15.2 一个更清晰的大纲视图 15.3 MobileOrg