天天看點

轉載 Org-mode 簡明手冊Org-mode 簡明手冊

轉載來自:

https://www.cnblogs.com/Open_Source/archive/2011/07/17/2108747.html#sec-4-1

Org-mode 簡明手冊 UP | HOME

Org-mode 簡明手冊

Table of Contents

  • 1 簡介
    • 1.1 序
    • 1.2 安裝
    • 1.3 激活
    • 1.4 回報
  • 2 文檔結構
    • 2.1 大綱
    • 2.2 标題
    • 2.3 視圖循環
    • 2.4 移動
    • 2.5 結構編輯
    • 2.6 稀疏樹
    • 2.7 文本清單
    • 2.8 腳注
  • 3 表格
  • 4 超連結
    • 4.1 連結格式
    • 4.2 内部連結
    • 4.3 外部連結
    • 4.4 使用連結
    • 4.5 目标連結
  • 5 待辦事項
    • 5.1 使用TODO狀态
    • 5.2 多狀态工作流程
    • 5.3 進度日志
    • 5.4 優先級
    • 5.5 任務細分
    • 5.6 複選框
  • 6 标簽
    • 6.1 标簽繼承
    • 6.2 設定标簽
    • 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

1 簡介1

1.1 序

Org 是一個用文本方式來快速高效地做筆記、維持待辦事項和做項目計劃的模式。它是一個創作釋出系統。

這個文檔是 Org-mode 手冊的一個壓縮版本。包含了所有的基本功能和指令,以及一些重要的定制提示。本文檔寫給不想閱讀200多頁手冊的新手。

1.2 安裝

重要:

如果你用的是 Emacs 或者 XEmacs 包裡的 Org 版本,請跳過本節,直接閱讀 1.3 節。

如果你是從網站上下載下傳的 Org 版本,無論是 zip 包還是 tar 檔案或者是 Git 檔案,最好在分發包目錄裡直接來設定它。把 lisp 子目錄加到 Emacs 的加載路徑裡,可以把下面兩句加在 “.emacs” 檔案裡:

(setq load-path (cons "~/path/to/orgdir/lisp" load-path))
(setq load-path (cons "~/path/to/orgdir/contrib/lisp" load-path))
      

為了提高速度可以用下面的 shell 指令将 Lisp 檔案編譯一下:

make
      

再把下面一行加到 .emacs 檔案裡。它可以使檔案中的函數自動加載,而不是啟動 Org 模式時立即加載。

(require 'org-install)
      

1.3 激活

把下面幾行加到 .emacs 檔案裡。後三行是為指令定義全局快捷鍵――請改成适合你自己的。

;; The following lines are always needed. Choose your own keys.
(add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode))
(add-hook 'org-mode-hook 'turn-on-font-lock) ; not needed when global-font-lock-mode is on
(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-ca" 'org-agenda)
(global-set-key "\C-cb" 'org-iswitchb)
      

設定之後,打開 .org 擴充的檔案會自動進入 org 模式。

1.4 回報

如果你發現了問題,或者有問題評論或新想法,可以給Org的郵件清單 [email protected] 發郵件。了解更多資訊或者送出 bug,參見手冊。

2 文檔結構

Org是基于Outline模式的,它提供了更靈活的編輯結構檔案的指令。

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
      

如果你不喜歡太多的星号,可以以空格後加一個星号作為标題的開頭。檢視 15.2 節 [Clean view],那裡有設定方法。

2.3 視圖循環

大綱模式可以隐藏緩沖區裡的部分正文。Org 用綁定到 TAB 和 S-TAB 上的兩個全指令來改變視圖。

TAB 子樹循環:當加上一個字首參數時(C-u TAB),在下面的狀态中改變目前子樹的視圖
FOLDED -> CHILDREN -> SUBTREE
當加上shift鍵時會觸發全局的視圖循環。
S-TAB和C-u TAB 全局循環:使整個緩沖區在下列狀态中循環
OVERVIEW -> CONTENTS -> SHOWALL
C-u C-u C-u TAB 顯示全部,包括drawers。

當 Emacs 剛打開檔案時,全局的狀态是 OVERVIEW,也即隻有頂層的标題可見。這可以通過變量 org-startup-folded 來設定。也可以通過 startup 關鍵字設定隻對單個檔案有效:

#+STARTUP: content
      

2.4 移動

下面的指令可以跳轉到緩沖區其他的标題。

C-c C-n 下個标題
C-c C-p 上個标題
C-c C-f 下個同級的标題
C-c C-b 上個同級的标題
C-c C-u 回到上層标題

2.5 結構編輯

M-RET 插入一個同級标題。如果光标在文本清單中,建立一個新的項(見 2.7 節 [Plain lists])。如果處于一行的中間,這一行會被分開,後面的一部分成為新的标題。
M-S-RET 插入一個和目前标題同級的 TODO 項
TAB(新的空的條目中) 如果新的條目中還沒有文字,TAB 會調整到合适的級别。
M-LEFT/RIGHT 将目前的标題提升/降低一個等級。
M-S-LEFT/RIGHT 将目前子提升/降低一個等級。
M-S-UP/DOWN 将子樹上/下移(和前/後個子樹交換)。
C-c C-w 将條目或區域傳送到另一個檔案中。見 9.2 節 [Refiling notes]。
C-x n s/w 将緩沖區視圖局限到目前子樹中/再次放寬視圖

如果有活動區域(暫時标記狀态),提升和降低功能将會對區域中的所有标題起作用。

2.6 稀疏樹

Org 模式的一個重要的功能是能根據大綱樹中選擇的資訊構造出稀疏的樹,這樣文檔就可以盡可能地折疊,但是選擇的資訊和它對應的标題會顯示出來。試下就知道它是怎樣工作的了。

Org 模式有幾個指令可以建立這種樹,這些指令都可以通過排程器來使用:

C-c / 它會提示再輸入一個字元來選擇稀疏樹的建立指令。
C-c / r 觸發後,會提示輸入比對串,并且将所有比對的項顯示成稀疏樹。所有的比對項都會高亮顯示;按 C-c C-c 取消高亮。

其他的基于 TODO 關鍵字、标簽或屬性來選擇标題的稀疏樹指令,我們會在本手冊的後面讨論。

2.7 文本清單

在大綱樹的一項中,自定義格式的清單可以提供更多的組織結構,也使我們可以得到一個複先框清單(見 5.6 節[複先框])。Org 模式可以處理這種清單,并且 HTML 導出器(見12章)也支援這種格式。

Org 能夠識别有序清單、無序清單和描述清單。

  • 無序清單項以‘-’、‘+’或者‘*‘開頭。
  • 有序清單項以‘1.’、‘1)’或者開頭。
  • 描述清單用‘::’将項和描述分開。

同一清單中的項的第一行必須縮進相同程度。當下一行的縮進與清單項的的開頭的符号或者數字相同或者更小時,這一項就結束了。當所有的項都關上時,或者後面有兩個空行時,清單就結束了。例如:

** 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.
   Important actors in this film are:
   - Elijah Wood :: He plays Frodo
   - Sean Austin :: He plays Sam, Frodo's friend.
      

當光标位于一項的第一行時(帶有項标志符号的行),下面的指令将會作用于該項:

TAB 折疊項
M-RET 在目前級别插入一個項,有字首時是強制建立一個标題
M-S-RET 插入一個帶有複先框的項(見 2.5 節[複先框])
M-S-UP/DOWN 将目前項和它的子項向上/下移動(和相同的縮進的前/後一個項交換位置)。如果清單是有序的,數字會自動改變
M-LEFT/M-RIGHT 提升/降低項的縮進,不包含子項
M-S-LEFT/RIGHT 提升/降低項的縮進,包含子項
C-c C-c 如果項中有複先框,就觸發改變其狀态。并且自動保持本項的符号與縮進在清單中的一緻性
C-c - 循環改變将目前清單的項标志符号

2.8 腳注

腳注就是以腳注定義符号開頭的一段話,腳注定義符号是将腳注名稱放在一個方括号裡形成的,要求放在第0列,不能有縮進。而引用就是在正文中将腳注名稱用方括号括起來。例如:

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

用下面的指令來處理腳注:

C-c C-x f 這是一個移動指令。當光标處理引用處時,跳轉到它的定義;當光标處理定義處時,跳轉到第一個引用處。其他情況下,建立一個腳注。當有字首時,會提供一個菜單供選擇操作,其中包括重新給腳注編号。
C-c C-c 在定義和引用之間跳轉
擴充閱讀:

手冊第 2 章

Sacha Chua's tutorial

3 表格

Org 提供了快速易用的表格編輯功能。通過調用 Emacs 内嵌的 ‘calc’包(對于 Emacs 的電腦可以檢視 Emacs Calculator 手冊)它支援類似于制表軟體的計算操作。

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 | 将活動區域(選中區域)轉換成一個表。如果第一行至少有一個 TAB 字元,就用 TAB 劃分内容;如果第一行都有逗号,就分逗号劃分内容;否則就用空白符來劃分區域。如果目前沒有活動區域就會建立一個空的 Org 表格。其實用|Name|Phone|Age C-c RET 來建表會更簡單一點。

調整和區域移動
C-c C-c 調整表格,不移動光标
TAB 調整表格,将光标移到下一個區域,必要時建立一行
S-TAB 調整表格,将光标移到上一個區域
RET 調整表格,将光标移到下一行,必要時會建立一行
編輯行和列
M-LEFT/RIGHT 左/右移目前列
M-S-LEFT 删除目前行
M-S-RIGHT 在光标位置左邊添加一列
M-UP/DOWN 上/下移目前行
M-S-UP 删除目前行
M-S-DOWN 在目前行上面添加一行。如果有字首,則在下面添加一行
C-c - 在目前行下面添加一個水準線。如果帶字首,則在上面添加一行水準線
C-c RET 在目前行下面添加一個水準線。并将光标移動到下一行
C-c ^ 将表排序。目前位置所在的列作為排序的依據。排序在距目前位置最近的兩個水準線之間的行(或者整個表)中進行
擴充閱讀:

手冊第 3 章

Bastien’s table tutorial

Bastien’s spreadsheet tutorial

Eric’s plotting tutoria

4 超連結

就像 HTML 一樣,Org 也提供了檔案的内部連結,以及到其他檔案、新聞討論區、電子郵件的外部連結等連結格式。

4.1 連結格式

Org 能夠識别 URL 格式的文本并将它們處理成可點選的連結。通常連結格式是這樣的:

[[link][description]]  或者  [[link]]
      

連結輸入一旦完成(所有的括号都比對),Org 就會改變它的視圖。這裡會看到 ”description“ 和 ”link“ ,而不是

[[link][descriptoin]]
      

[[link]]。
      

要想編輯連結,可以光标置于連結上并鍵入 C-c C-l。

4.2 内部連結

如果一個連結位址并不是 URL 的形式,就會作為目前檔案内部連結來處理。最重要的一個例子是

[[#my-custom-id]]
      

它會連結到

CUSTOM_ID

屬性是 “my-custom-id” 的項。

類似

[[My Target]]
      

[[My Target][Find my target]]
      

的連結,點選後本檔案中查找對應的目标

“<<My Target>>”

4.3 外部連結

Org 支援的連結格式包括檔案、網頁、新聞討論區、BBDB 資料庫項、IRC 會話和記錄。外部連結是 URL 格式的定位器。以識别符開頭,後面跟着一個冒号,冒号後面不能有空格。下面是一些例子:

http://www.astro.uva.nl/~dominik            on the web
file:/home/dominik/images/jupiter.jpg       file, absolute path
/home/dominik/images/jupiter.jpg            same as above
file:papers/last.pdf                        file, relative path
file:projects.org                           another Org file
docview:papers/last.pdf::NNN                open file in doc-view mode at page NNN
id:B7423F4D-2E8A-471B-8810-C40F074717E9     Link to heading by ID
news:comp.emacs                             Usenet link
mailto:[email protected]                     Mail link
vm:folder                                   VM folder link
vm:folder#id                                VM message link
wl:folder#id                                WANDERLUST message link
mhe:folder#id                               MH-E message link
rmail:folder#id                             RMAIL message link
gnus:group#id                               Gnus article link
bbdb:R.*Stallman                            BBDB link (with regexp)
irc:/irc.com/#emacs/bob                     IRC link
info:org:External%20links                   Info node link (with encoded space)
      

連結的括号應當是閉合的。當連結含有描述文字是顯示描述文字而不是連結位址(見 4.1 節[連結格式]),例如:

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

如果描述資訊是一個檔案名或者是指向圖檔的 URL。HTML 導出(見 12.4 節[HTML 導出])時會将圖檔内聯成一個可以點選的按鈕。如果沒有描述資訊且連結指向一個圖檔,那麼圖檔就會嵌入到導出的 HTML 檔案中。

4.4 使用連結

Org 提供了以下方法來建立和使用連結。

C-c l 在目前位置儲存一個連結。這是一個全局指令(你可以設定自己的快捷鍵),可以在任何類型的緩沖區中使用。連結儲存下來以便以後插入 Org 檔案中(見下面)
C-c C-l 插入一個連結。它會讓你輸入,你可以輸入一個連結,也可心用上/下鍵來擷取儲存的連結。它還會讓你輸入描述資訊。
C-c C-l(光标在連結上) 當光标處于連結上時,你可以修改連結
C-c C-o 或者 mouse-1 或者 mouse-2 打開連結
C-c & 跳回到一個已記錄的位址。用 C-c % 可以将位址記錄下來,内部連結後面的指令也會自動将位址記錄下來。使用這個指令多次可以一直往前定位。

4.5 目标連結

檔案連結可以包含一些其他資訊使得進傳入連結接時可以到達特定的位置。比如雙冒号之後的一個行号或者搜尋選項。

下面是一些包含搜尋定位功能的連結例子以及其說明:

file:~/code/main.c::255                     進入到 255 行
file:~/xx.org::My Target                    找到目标‘<<My Target>>’
file:~/xx.org/::#my-custom-id               查找自定義 id 的項
      
擴充閱讀:

手冊第四章

5 待辦事項

Org 模式并不用一個單獨的檔案來維持 TODO 清單2。它是一些筆記的集合體,因為 TODO 清單是在你記錄筆記的過程中逐漸形成的。你 Org 模式下可以很容易地将樹中的一項标記為一個 TODO 的項。用這種方式,資訊内容不會備援加倍,而且可以顯示 TODO 項的上下文環境。

當然,這種處理待辦事項的方式會将它們分散于各個筆記檔案中。Org 模式提供了一些方法使我們可以把它們看作一個整體來處理。

5.1 使用TODO狀态

當标題以 TODO 開關時它就成為了一個 TODO 項,例如:

***TODO Write letter to Sam Fortune
      

下面是一些使用 TODO 項的常用指令:

C-c C-t 将目前項的狀态在(unmarked)->TODO->DONE 之間循環切換,同樣的切換也可以在時間軸(timeline) 和議程( agenda) 的緩沖區(buffer)中用 t 鍵“遠端”進行。(見 2.6 節[稀疏樹])
S-RIGHT/LEFT 選擇下一個/上一個 TODO 狀态,與上面的循環方式相同。
C-c / t 在稀疏樹中顯示 TODO 項。将 buffer 折疊,但是會顯示 TODO 項和它們所在的層次的标題。
C-c a t 顯示全局 TODO 清單。從所有的議程檔案中收集 TODO 項到一個緩沖區中。詳見 10.3.2 節。
S-M-RET 在目前項下插入一個新的 TODO 項。

改變 TODO 的狀态會觸發标簽改變。檢視選項 org-todo-state-tags-triggers 的描述獲得更多資訊。

5.2 多狀态工作流程

你可以用 TODO 關鍵字來定義不同的狀态,用以處理項,比如:

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

豎直線将 TODO 關鍵字(還需要進一步的動作)和 DONE 狀态(不需要進一步的動作)分隔開。如果你不給出豎直線,最後一個狀态會作為 DONE 狀态。設定之後,C-c C-t 就會将狀态從 TODO 轉換到 FEEDBACK,再轉換到 VERIFY,最後到 DONE 和 DELEGATED。

有時你可能希望同時使用幾個不同的 TODO 狀态集合。例如,你可能想要一個基本的 TODO/DONE,以及一個修改 bug 的工作流程和一個隔開的狀态來表示取消的項目(既還是 DONE,也不需要進一步的動作),你可以這樣設定:

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

關鍵字應該各不相同,這樣對于一個選項 Org 才知道該用哪個狀态序列(集合)。例子中也給出了快速使用一個關鍵字的方法,就是在關鍵字後面括号中給出快捷字母——當用 C-c C-t時,會詢問,讓你輸入一個字母。

要定義隻在一個檔案中有效的 TODO 關鍵字,可以在檔案中任意地方給出下面的文本:

#+TODO: TODO(t) | DONE(d)
#+TODO: REPORT(r) BUG(b) KNOWNCAUSE(k) | FIXED(f)
#+TODO: | CANCELED(c)
      

當改變這些行中的一行後,光标停留在改變行上,用 C-c C-c 讓改變生效。

5.3 進度日志

當你改變一個 TODO 狀态為 DONE 時,或者當你每次改變一個 TODO 項的狀态時,Org 都會自動記錄時間戳或者作一個記錄。這是高度可配置的。可以基于每一個關鍵字進入設定,并且可以定位到一個檔案甚至子樹。怎樣記錄一個任務的工作時間,見 8.4 節。

完成的項目

最基本的日志功能是跟蹤一個特定項目的完成。這可以這樣實作:3

(setq org-log-done 'time)
      

這時當你将一個項目從一個 TODO(未完成)狀态改變為一個完成狀态時,标題下面就會插入一行 “CLOSED:[timestamp]”。如果你想和時間戳一起作一個記錄,用:4

(setq org-log-done 'note)
      

這時會提示你輸入一個記錄(note),并将它儲存在标題為“Closing Note”項目之下。

跟蹤TODO狀态變化

你可能想跟蹤 TODO 狀态的變化。可以隻記錄一個時間戳,也可以為變化作一個帶時間戳的記錄。記錄會被插入到标題之後形成清單。當有很多記錄之後,你可能希望将記錄取出放到抽屜裡。通過定制變量 org-log-into-drawer 可以實作這個功能。 對于狀态記錄,Org 可以實作基于每個狀态關鍵字的設定。實作方法是在每個後的括号中指定“!”(記錄時間戳)或“@”(作一個記錄)。例如:

#+TODO: TODO(t) WAIT([email protected]/!) | DONE(d!) CANCELED([email protected])
      

将會設定 TODO 關鍵字和快速通路字母,以及當一個項目設為 DONE 時,會記錄時間戳,當狀态變為 WAIT 或 CANCELED 時,會作一個記錄。這個文法也适用于變量 org-todo-keywords。

5.4 優先級

如果你廣泛地使用 Org 模式,這樣你就會有大量的 TODO 項。給它們設定優先級就很有必要。可以在 TODO 項的标題中加入一些标記(cookie)來設定它們的優先級,像這樣:

*** TODO [#A] Write letter to Sam Fortune
      

Org模式支援三個優先級别:’A‘、’B‘和’C‘。’A‘是最進階别,如不指定,’B‘是預設的。優先級隻在議程中有用。

C-c , 設定目前标題的優先級。按’‘’‘’‘選擇一個級别,或者SPC删除标記(cookie)。
S-UP
S-Down 增加/減少目前标題的優先級。

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
      

5.6 複選框

當純文字中的項以‘[]’開頭時,就會變成一個複選框。複選框不會包含在全局 TODO 清單中,是以它們很适合地将一個任務劃分成幾個簡單的步驟。下面是一個複選框的例子:

* TODO Organize party [1/3]
  - [-] call people [1/2]
    - [ ] Peter
    - [X] Sarah
  - [X] order food
  - [ ] think about what music to play
      

複選框是分層工作的。是以如果一個複選框項目如果還有子複選框,觸發子複選框将會使該複選框變化以反映出一個、多個還是沒有子複選框被選中。

下面是處理複選框的指令:

C-c C-c 觸發複選框的狀态或者(加上字首)觸發複選框的的存在狀态。
M-S-RET 增加一個帶有複選框的項。這隻在光标處于純文字清單項(見 2.7 節)中才起使用。
擴充閱讀:

手冊第5章

David O’Toole’s introductory tutorial

Charles Cave’s GTD setup

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”。你也可以設定一個标簽讓所有的标題都繼承,就好像标簽在包含整個檔案的第零級标題中指定了一樣。用下面的方法5:

#+FILETAGS: :Peter:Boss:Secret:
      

6.2 設定标簽

在标題後可以很容易地輸入标簽。在冒号之後,M-TAB 可以補全标簽。也有一些專門的指令用于輸入标簽:

C-c C-q 為目前标題輸入标簽。Org 模式既支援補全,也支援單鍵接口來設定标簽,見下文。回車之後,标簽會被插入,并放到第 org-tags-column 列。如果用字首 C-u,會把目前緩沖區中的所有标簽都對齊到那一列,這看起來很酷。
C-c C-c 當光标處于标題上時,這個指令同C-c C-q。

Org 支援基于一個标簽清單來插入标簽。預設情況這個清單是動态建構的,包含了目前緩沖區中使用過的所有标簽。你也可以通過變量 org-tag-alist 在全局設定一個标簽的硬清單(hard list)。另外,對于某個特定檔案你也可以用下面這幾行設定一個預設清單:

#+TAGS: @work @home @tennisclub
#+TAGS: laptop car pc sailboat
      

預設 Org 模式用一個迷你緩沖區補全設施來輸入标簽。另外,它也實作了一個更快速,稱為 快速标簽選擇 ( fast tag selection )的标簽選擇方法。這使得你隻用按一次鍵就可以選擇或者取消一個标簽。為了使它能很好地工作,需要為常用的标簽賦唯一的值。你可以在你的“.emacs”檔案中通過設定變量 org-tag-alist 作全局設定。例如,如果你需要在不同的檔案中經常要給條目添加标簽“:@home:”,這時你就可以像這樣設定:

(setq org-tag-alist '(("@work" . ?w) ("@home" . ?h) ("laptop" . ?l)))
      

如果标簽隻用于目前正在處理的檔案,那麼你可以這樣設定标簽選項行:

#+TAGS: @work(w) @home(h) @tennisclub(t) laptop(l) pc(p)
      

6.3 标簽查找

一旦标簽體系設定好,就可以用來收集相關聯的資訊到指定清單中。

C-c \
C-c / m 用比對标簽搜尋的所有标題構造一個稀疏樹。帶字首參數C-u時,忽略所有還是TODO行的标題。
C-c a m 用所有議程檔案比對的标簽構造一個全局清單。見第 10.3.3 節。
C-c a M 用所有議程檔案比對的标簽構造一個全局清單,但隻搜尋 TODO 項,并強制搜尋所有子項(見變量 org-tags-match-listsublevels)。

這些指令都會提示輸入字元串,字元串支援基本的邏輯去處。像“+boss+urgent-project1”,是搜尋所有的包含标簽“boss”和“urgent”但不含“project1”的項;而 “Kathy|Sally”,搜尋标簽包含“Kathy”或者“Sally”和項。搜尋字元串的文法很豐富,支援查找TODO關鍵字、條目級别和屬性。更詳細的介紹和例子,見第 10.3.3 節。

擴充閱讀

手冊第 6 章

Sacha Chua’s article about tagging in Org-mode

7 屬性

屬性是一些與條目關聯的鍵值對。它們位于一個名為

PROPERTIES

的特殊抽屜中。第一個屬性都單獨一行,鍵在前(被冒号包圍),值在後:

* CD collection
** Classic
*** Goldberg Variations
    :PROPERTIES:
    :Title:    Goldberg Variations
    :Composer: J.S. Bach
    :Publisher: Deutsche Grammophon
    :NDisks:   1
    :END:
      

通過設定屬性

“:Xyz_ALL:”

,你可以為屬性

“:Xyz:”

設定所有合法的值。這個特定的屬性是有 繼承性 的,即,如果你是在第 1 級别設定的,那麼會被應用于整個樹。當合法的值設定之後,設定對應的屬性就很容易了,并且不容易出現打字錯誤。用CD唱片集為例,我們可以預定義發行商和盒中的CD光牒數目:

* CD collection
  :PROPERTIES:
  :NDisks_ALL: 1 2 3 4
  :Publisher_ALL: "Deutsche Grammophon" Philips EMI
  :END:
      

也可以在全局設定 org-global-properties ,或者在檔案級别設定:

#+PROPERTY: NDisks_ALL 1 2 3 4
      
C-c C-x p 設定一個屬性。會詢問屬性名和屬性值。
C-c C-c d 從目前項中删除一個屬性。

要基于選擇的屬性建立稀疏樹或者特殊清單,跟标簽搜尋的指令相同(見第6.3節)。搜尋字元串的文法在第10.3.3節中詳述。

7.1 擴充閱讀

手冊第7章

Bastien Guerry’s column view tutorial

8 日期和時間

為了支援工程的計劃,TODO 項可以标記上日期和/或時間。帶有日期和時間資訊的特定格式的字元串在 Org 模式中稱為時間戳。

8.1 時間戳

時間戳是一個具有特定格式的日期(可能帶有時間和時間段)說明,例如 ~ 2005-10-01~

Tue

, ~ 2003-09-16~

Tue

09:39

,或者 ~ 2003-09-16~

Tue

12:00-12:30

。 時間戳可以出現在樹條目的标題和正文的任何地方。它能使條目隻在特定的日期才出現在議程清單中。(見第 10.3.1 節)我們區分為:

普通時間戳;事件;約會

一個簡單的時間戳隻是給一個條目加上時間和日期。這跟在紙質的議程上寫下約會和事件是一樣的。

* Meet Peter at the movies <2006-11-01 Wed 19:15>
* Discussion on climate change <2006-11-02 Thu 20:00-22:00>
      
具有時間間隔的時間戳

一個時間戳可以包含一個時間間隔,表示事件不隻在指定的時間發生,還在每隔一個特定的時間如 N 天(d)、周(w)、月(m)或者年(y)之後重複發生。下面的事件每周二在議程中顯示:

* Pick up Sam at school <2007-05-16 Wed 12:30 +1w>
      
日記樣式的 sexp 條目

為了能定義更複雜的時間,Org 模式支援 Emacs 月曆/日記包(calendar/diary package)中的日記條目。例如:

* The nerd meeting on every 2nd Thursday of the month
  <%%(diary-float t 4 2)>
      
時間/日期段

兩個時間戳用‘–’連接配接起來就定義了一個時間段:

** Meeting in Amsterdam
   <2004-08-23 Mon>--<2004-08-26 Thu>
      
非激活的時間戳

跟普通時間戳一樣,但是這裡是方括号而不是尖括号。這種時間戳是未激活的,它 不 會讓一個條目顯示在議程中。

* Gillian comes late for the fifth time [2006-11-01 Wed]
      

8.2 建立時間戳

時間戳要有特定的格式,這樣才能被Org模式識别。下面的指令可以用來正确地處理時間戳的格式。

C-c . 詢問日期并輸入正确的時間戳。當光标處理一個時間戳之上時,是修改這個時間戳,而不是插入一個新的。如果這個指令連用再次,就會插入一個時間段。加上字首會附帶目前時間。
C-c ! 功能同C-c .,但是插入的是一個未激活的時間戳。
S-LEFT/RIGHT 将光标處理的時間戳改變一天。
S-UP/DOWN 改變時間戳中光标下的項。光标可以處在年、月、日、時或者分之上。當時間戳包含一個時間段時,如 “15:30-16:30”,修改第一個時間,會自動同時修改第二個時間,以保持時間段長度不變。想修改時間段長度,可以修改第二個時間。

當 Org 模式詢問時間/日期時,能接收任何包含時間和/或日期的字元串,它能根據目前的時間日期智能地分析字元串,進而得到沒有指明的資訊。你也可以用彈出的月曆中選擇日期。想完整地了解時間/日期詢問的工作方式,可以參考手冊。

8.3 截止期限和計劃安排

時間戳前面可以加一些關鍵字來協助計劃安排。

截止期限

意義:任務(大多數情況都會是一個TODO項,當然也可以不是)應該完成的日期。

C-c C-d 在标題下面一行插入一個帶有“DEADLINE”關鍵字的時間戳。

在 截止日期 , 任務 會列在 議程 中。另外, 今天的議程 會在任務到期 orgdeadline-warning-days 天前對即将即将到期以及已經過期的任務給出提醒,直到任務被标記為 DONE。例如:

*** TODO write article about the Earth for the Guide
    The editor in charge is bbdb:Ford Prefect
    DEADLINE: <2004-02-29 Sun>
      
日程安排

意義:你計劃在給定的那個日期開始進行那項任務。6

C-c C-s 在标題下面插入一個帶有“SCHEDULED”關鍵字的時間戳。

在給定的日期标題會列在議程中。7另外,對于過期的日程安排會在編輯為 今天 并給出提醒,直到被标記為 DONE。也就是說,任務會自動推遲日期直到它被完成。

*** TODO Call Trillian for a date on New Years Eve.
    SCHEDULED: <2004-12-25 Sat>
      

有些任務需要一再重複出現。Org 模式在截止期限、計劃安排和普通時間戳中用所謂的中繼器來管理這種任務。在下面的例子中:

** TODO Pay the rent
   DEADLINE: <2005-10-01 Sat +1m>
      

+1m 是一個中繼器;上面的意思是任務有一個截止期限 ~ 2005-10-01~ ,并從這個日期開始每月都重複出現。

8.4 記錄工作時間

使用 Org 可以記錄在一個工程中花在某些特定任務上的時間。

C-c C-x C-i 開始目前條目的計時(clock-in)。這會插入一個 CLOCK 關鍵字和一個時間戳。加上 C-u 字首,從目前已經計時的任務中選擇任務。
C-c C-x C-o 停止計時(clock-out)。這會在開始計時的地方插入另一個時間戳。它會直接計算使用時間并插入到時間段的後面如 “=> HH:MM”。
C-c C-x C-e 為目前的計時任務更新進度。
C-c C-x C-x 取消目前的計時。當你誤操作打開一個計時時,或者轉而去做其他事情時,這個指令就很有用。
C-c C-x C-j 跳轉到包含目前正在運作的計時的任務條目。用 C-uf字首從目前計時的任務中選擇。
C-c C-x C-r 在目前檔案插入一個包含像 Org 表格一樣的計時報告的動态塊。當光标正處于一個存在的塊上時,更新它。

#+BEGIN: clocktable :maxlevel 2 :emphasize nil :scope file

#+END: clocktable

如何定制視圖,見手冊。
C-c C-c 在一個已經存在的計時表格之上時,更新它。 更新動态塊。光标需要置于動态塊

#+BEGIN

這行。

l 鍵可能會在時間軸(見第 10.3.4 節)和議程(見第 10.3.1 節)中使用來檢視一天中處理和關閉了哪些任務。

擴充閱讀

手冊第 8 章

Charles Cave’s Date and Time tutorial

Bernt Hansen’s clocking workflow

9 捕獲——轉發——存檔

任何組織系統都有一個重要功能,就是能捕獲新的靈感或者任務,并将相關的引用材料與之聯系起來。Org 提供了一個捕獲過程來建立任務。它将與一個任務相關的檔案(附件)儲存在一個特定的目錄下。在系統中,任務和項目經常移動。将整個項目樹儲存到一個歸檔檔案中可以保持系統簡潔快速。

9.1 捕獲

Org 的擷取一個新條目的方法很大程式上受 John Wiegley 的 excellent remem-ber package 的影響。它使得你可以在工作流程中中斷一小會兒來存貯一個簡短的筆記。Org可以為新條目定義模闆,并将它們與不同的目标檔案關聯起來以儲存筆記。

設定截取位置8

下面的定制為筆記設定了一個預設的目标9檔案,并為捕獲新的任務定義了一個全局快捷鍵10。

(setq org-default-notes-file (concat org-directory "/notes.org"))
(define-key global-map "\C-cc" 'org-capture)
      
截取的使用
C-c c 啟動一個捕獲過程。進入一個窄的間接緩沖區來編輯條目。
C-c C-c 一旦完成捕獲資訊的輸入,可以用 C-c C-c 傳回之前的視窗,繼續中斷的工作。
C-c C-w 将條目儲存到一個接收位址(見第2節)并結束。
C-c C-k 取消捕獲過程,傳回之前的狀态。
捕獲模闆

用可以用不同的模闆來做不同的捕獲筆記,并将它們儲存到不同的地方。例如,你想将新任務儲存到檔案“TODO.org”的“Tasks”标題下,而将日記項目儲存到“journal.org”中一個時間樹中。你可以:

(setq org-capture-templates
      '(("t" "Todo" entry (file+headline "~/org/gtd.org" "Tasks")
         "* TODO %?\n %i\n %a")
        ("j" "Journal" entry (file+datetree "~/org/journal.org")
         "* %?\nEntered on %U\n %i\n %a")))
      

其中,第一個字元串是模式的關鍵字,第二個字元串是簡短的描述資訊。接着是條目的類型和儲存筆記的目标位址。最後是模闆本身,它利用%作轉義符基于時間和上下文來填充一些資訊。

當你調用 M-x org-capture 時,Org 提示輸入一個鍵來選擇模闆(如果你有多個模闆),然後就會給出像這樣的内容:

* TODO
 [[file:link to where you were when initiating capture]]
      

在擴充模闆時,可以用%轉義符進行動态地插入内容。下面是一些可以使用的項,檢視手冊獲得更多的選項。11

%a 注解,通常是由 org-store-link 建立的連結
%i 初始化内容,當記憶時區域被C-u調用
%t 時間戳,隻是日期
%T 帶有日期和時間的時間戳
%u,%U 同上,但是時間戳不激活

9.2 轉送筆記

當你回顧捕獲的資料時,可以想把其中的一些條目轉送到另一清單中,比如說到一工程項目。剪切,查找正确的位址,然後再粘貼筆記,這就似乎有些麻煩。為了簡化這個過程,可以用專門的指令:

C-c C-w 轉送光标處的條目或者區域。這個指令會提供一些目标位址供選擇,你可以通過補全功能選擇一個。條目(或者區域中的所有條目)就會作為一個子項填充到目标标題下。
預設情況下,目前緩沖區的一級标題會被作為轉送的目标,你可以通過設定給出跨多個檔案的複雜的定義。詳見變量 org-refile-targets 的描述。
C-u C-c C-w 借助于轉送功能的接口來跳轉到一個标題。
C-u C-u C-c C-w 跳轉到 org-refile 最後轉送子樹所到的地方。

9.3 歸檔

當一個用(子)樹表示的工程完成後,你可能想把它移走,不讓它再在議程裡顯示。歸檔能使你的工作檔案變得簡潔,并能使議程視圖構造等全局搜尋保持高效。最常用的歸檔指令是将工程樹移到另一個檔案——歸檔檔案。

C-c C-x C-a 用變量 orgarchive-default-command 指定的指令歸檔目前的項。
C-c C-x C-s 或者簡化為 C-c $ 将光标處的子樹歸檔至 org-archive-location 指定的位置。

預設的歸檔位置是目前檔案同目錄下,名為目前檔案名後加

“_archive”

的檔案。例子和設定位置的方法見變量 org-archivelocation 的幫助資訊。下面是一個在緩沖區内設定該變量的方法:

#+ARCHIVE: %s_done::
      
擴充閱讀

手冊第9章

Charles Cave’s remember tutorial

Sebastian Rose’s tutorial for capturing from a web browser

10 議程視圖

根據 Org 的工作方式,TODO 項、時間戳和帶标簽的标題分散在一個或者多個檔案中。為了能夠檢視某一天的項目或者事件,資訊必須收集在一起,以一種的有條理方式排序、顯示。有幾種不同的視圖,見下文。

收集的資訊在一個專門的議程緩沖區中顯示。這個緩沖區是隻讀的,但是提供了一些指令可以通路原 Org 檔案中對應的條目,并且可以遠端地編輯這些檔案。從議程緩沖區中遠端編輯是說,比如,你可以在議程緩沖區中改變标題和約會的日期。議程緩沖區中使用的指令在第 10.4 節列出。

10.1 議程檔案

顯示的資訊通常是從各個議程檔案中收集來的,這樣檔案在變量 org-agenda-files 中列出。

C-c [ 将目前檔案加入到議程檔案清單中。目前檔案會被加到清單的前面。如果檔案已經在清單中,會被移到前面。帶有字首時,檔案添加/移到到後面。
C-c ] 将目前檔案從議程檔案清單中删除。
C-, 周遊議程檔案清單,依次通路其中的每一個檔案。

10.2 議程排程器

視圖是通過議程調試器建立的,通常我們會給它設定一個全局快捷鍵——比如 C-c a (見第1.2節)。按 C-c a 之後,就會提示再輸入一個字母來執行對應的指令:

a 月曆式的議程。(見 10.3.1)
t/T TODO 項的清單。(見 10.3.2節)
m/M 比對某個标簽表達式的标題的清單。(見 10.3.3)
L 目前檔案的時間軸視圖。(見 10.3.4)
s 通過關鍵字和/或正規表達式選中的條目的清單。

10.3 内建議程視圖

10.3.1 周/日議程

周/日議程就像紙質的議程一樣,用以顯示本周或當天的所有任務。

C-c a a 從一列 Org 檔案中為本周收集出一個議程。議程顯示出每天的條目。

Emacs 包含了 Edward M. Reingold 的月曆和日記功能。Org 模式能識别日記的文法并允許在 Org 檔案中直接使用日記的 sexp 條目:12

* Birthdays and similar stuff
#+CATEGORY: Holiday
  %%(org-calendar-holiday) ; special function for holiday names
#+CATEGORY: Ann
  %%(diary-anniversary 5 14 1956) Arthur Dent is %d years old
  %%(diary-anniversary 10 2 1869) Mahatma Gandhi would be %d years old
      

Org 可以跟 Emacs 的約會提醒功能結合。想添加議程檔案中的約會提醒,可以使用指令 org-agenda-to-appt。詳見幫助文檔的描述。

10.3.2 全局TODO清單

全局TODO清單将所有未完成的 TODO 項格式化并集中到一處。TODO 項的遠端編輯使得我們隻用按一下鍵就可以改變 TODO 項的狀态。TODO 清單中可以使用的指令在第10.4節給出。

C-c a t 顯示全局 TODO 清單。這會從所有的議程檔案(見第10章)中收集 TODO 項到一個緩沖區中。
C-c a T 同上,但可以選擇 TODO 關鍵字

10.3.3 比對标簽和屬性

如果議程檔案中的标題帶有标簽(見第6章)或者帶有屬性(見第7章),就可以基于這些中繼資料篩選标題到議程緩沖區中。這裡描述的比對文法在用 C-c / m 建立稀疏樹時也同樣适用。在标簽清單中可以使用的指令在第10.4節描述。

C-c a m  将比對指定的标簽集的所有标題生成一個清單。這個指令詢問篩選規則,可以是标簽的邏輯表達式,如 “+work+urgent-withboss” 或 “work|home” (見第 6 章)。如果你經常使用某個搜尋,可以将它定義成一個指令。(見第 10.2 節)
C-c a M  同 C-c a m,但隻複選同時也是 TODO 項的标題。                                                                         
      
比對文法

搜尋字元串可以使用 ‘&’ 作與運算, ‘|’ 作或運算。‘&’ 的限制力比 ‘|’ 的強。括号功能現在還沒實作。用以搜尋的元素可以是标簽 、比對标簽的正規表達式、或者像 PROPERTY OPERATOR VALUE 這樣帶有比較操作符的用來比較屬性值的表達式。第一個元素前面加 ‘-’ 表示不選比對的項,加 ‘+‘ 表示選擇比對的項。使用 ’+‘ 和 ’-“ 時,與操作符 ‘&’ 就是可選的了。這裡有一些隻使用标簽的例子。

”+work-boss“               選擇标有”:work:“的标題,但去掉同時也标有”:boss:“的标題。。
”work|laptop“              選擇标有”:work:“或者”:laptop:“的行。
”work|laptop+night“        跟前面相同,但要求标有”:laptop:“和行也要标有”:night:“。
      

比對标簽時你也可以嘗試同時比對屬性,詳細内容見手冊。

10.3.4 單檔案時間軸

時間軸用時間排序視圖概述單個檔案中的所有帶有時間戳的條目。這個指令的目的是用來給出一個工程中事件的鳥瞰圖。

C-c a L 給出 Org 檔案中所有帶時間戳條目的排序視圖。帶有 C-u 字首時,沒有完成的 TODO 項(作了安排的以及沒作安排的)也列在目前日期下。

10.3.5 查找視圖

這個議程視圖用來對 Org 模式下的條目進行普通的文本查找。對于查找筆記很有用。

C-c a s 這個查找方式可以讓你通過比對子串或者用邏輯表達式指定關鍵字來選擇條目。

例如,查找字元串

”computer equipment“

将會查找包含子串

”computer equipment“

的條目。查找視圖也可以用布爾邏輯查找條目中的關鍵字。查找字元串

”+computer +wifi -ethernet-{8\.11[bg]}“

将會搜尋包含關鍵字

computer

wifi

但不含

ethernet

,并且不被正規表達式

8\.11[bg]

(排除 8.11b 和 8.11g) 比對的筆記條目。

注意,除了議程檔案,這條指令也會搜尋 org-agenda-text-search-extra-files 中列出的檔案。

10.4 議程緩沖區的指令

議程緩沖區中的條目連結到了它們的源 Org 或者日記檔案。有一些指令可以用來顯示和跳轉到條目的源位置,也可以從視圖緩沖區中”遠端“編輯源檔案。下面隻是所有指令的一個選集,浏覽

Agenda

菜單和手冊獲得完整的清單。

動作
n 下一行(同 DOWN 和 C-n)。13
p 上一行(同 UP 和 C-p)。14
檢視/轉到 Org 檔案
mouse-3
SPC 在另一個視窗中顯示條目的源位置。帶字首使得整個條目在大綱中可見,而不隻是标題。
TAB 在另一個視窗中條目的源位置。在 Emacs 22 之前的版本,mouse-1 也有這個功能。
RET 轉到條目的源位置并删除其它的視窗。15
改變顯示方式
o 删除其他的視窗。
d / w 切換到日/周視圖。
f 和 b 時間前移或者後移來顯示随後的 org-agenda-current-span 天。例如,如果顯示了一周的内容,切換到下/上一周。
. 轉到今天。
j 詢問日期并轉到那天。
v l 或簡化為 l 觸發日志模式(Logbook mode)。在日志模式中,當記錄功能打開(變量 org-log-done)時标記為 DONE 的條目,以及在那天計時的條目,都會顯示在議程中。
r 或 g 重新構造議程,以反映最新的狀态。
s 儲存目前 Emacs 會話的所有 Org 緩沖區和ID的位址。
二級篩選和查詢編輯

/

根據标簽過濾目前的緩沖區。提示你輸入一個字母選擇一個标簽。先按‘-’排除一個标簽。
\ 通過增加條件縮小目前議程的視圖。16
遠端編輯(參考手冊獲得更多指令)
0-9 數字參數。
t 修改議程和 org 檔案中的條目的TODO狀态。
C-k 删除目前的議程條目以及源檔案中它的整個子樹。
C-c C-w 傳送目前的條目。
C-c C-x C-a 或簡作 a 用在 org-archive-default-command 中設定的預設歸檔指令對目前的條目對應的整個樹進行歸檔。
C-c C-x C-s 或簡作 $ 歸檔目前标題對應的樹。
C-c C-s 規劃(Schedule)一個條目,帶有字首參數時删除規劃時間戳。
C-c C-d 為條目設定截止期限,帶字首時删除截止期限。
S-RIGHT 和 S-LEFT 将與目前行相關的時間戳改變一天。
I 對目前條目開始計時。
O / X 暫停/取消最近開始的計時。
J 在另一個視窗中跳轉到正在進行的計時。

10.5 定制議程視圖

自定義搜尋的主要用途是對于頻繁使用的搜尋進行快捷鍵綁定,進而快捷地建立議程緩沖區或者稀疏樹(當然後者隻涵蓋目前緩沖區的内容)。自定義的指令是用變量 org-agenda-custom-commands 來配置的。你可以用 C-c a C 來定制這個變量。也可以直接在 ”.emacs“ 中用 Emacs lisp 來設定。下面的例子包含了所有合法的搜尋類型:

(setq org-agenda-custom-commands
      '(("w" todo "WAITING")
        ("u" tags "+boss-urgent")
        ("v" tags-todo "+boss-urgent")))
      

每個項的首字元串是使用排程器指令 C-c a 之後要給出的鍵以使用相應的指令。通常都是單個字元。第二個參數是搜尋類型,接着是用來進行比對的字元串或者正規表達式。上面的例子定義了:

C-c a w 對于包含關鍵字 ”“ 的 TODO 項的全局搜尋。
C-c a u 對于帶有标簽 ”:boss:“ 而不含标簽 ”:urgent:“ 的标題的全局标簽搜尋。
C-c a v 同搜尋 C-c a u,但搜尋範圍隻限于同時也是 TODO 項的标題。
擴充閱讀

手冊第 10 章

Mat Lundin’s tutorial about custom agenda commands

John Wiegley’s setup

11 準備導出

當導出 Org 模式的文檔時,導出器在後端(backend)盡可能準确地反映出文檔的結構。由于所要導出的目标文檔像 HTML,LaTeX 和 DocBook 具有豐富的格式,Org 為富導出(rich export)提供了一些規則。這節概述 Org 模式緩沖區中的準備規則。

11.1 結構的組成元素

文檔标題

導出檔案的标題在特定行給出:

#+TITLE: This is the title of the document
      
标題和章節

第二章描述的大綱結構确定了導出文檔的結構基礎。然而由于大綱結構也用于(比如說)清單和任務,是以隻有前三個級别用作标題。更深的級别會被看作項目清單。你可以通過變量 org-export-headline-levels 在全局設定這個開關,或者隻是在單個檔案中設定:

#+OPTIONS: H:4
      
目錄表

目錄表通常會直接插入在文檔第一個标題之前。

#+OPTIONS: toc:2 (目錄中隻顯示二級标題)
#+OPTIONS: toc:nil (無目錄)
      
段落、分行和引用

段落之間至少要有一空行。如果你想實作段内分行,可以在行後加上“\\”。

要想在一個區域内實作分行,而其他地方使用正常格式,你可以使用下面的構造,它也可以用來實作詩歌的格式:

#+BEGIN_VERSE
 Great clouds overhead
 Tiny black birds rise and fall
 Snow covers Emacs

     -- AlexSchroeder
#+END_VERSE
      

當從另外一個文檔中引用一段話時通過會讓它左右都縮進。在 Org 文檔中可以這樣作引用:

#+BEGIN_QUOTE
Everything should be made as simple as possible,
but not any simpler -- Albert Einstein
#+END_QUOTE
      

如果你想讓某些文本居中,可以這樣:

#+BEGIN_CENTER
Everything should be made as simple as possible, \\
but not any simpler
#+END_CENTER
      
強調和等寬

你可以讓文字

粗體

, 斜體 , 下劃線 ,

代碼

,以及

逐文本

,如果必需,也可以'劃掉'。代碼和逐文本的字元串不會以Org模式的文法格式來處理,會被逐字輸出。想要插入一個水準格尺17,用一個隻含有破折号的行來實作,要求至少有5個破折号。

注釋行

以‘#‘位于第 0 列的行會被看作注釋,不會被導出。如果你想要一個縮進的行也被作為注釋,用“#+”開頭。另外以關鍵字 “COMMENT” 開頭的子樹整個樹都不會被導出。最後,被

“#+BEGIN_COMMENT“

”#+END_COMMENT”

包圍的整個區域也都不會被導出。

C-c ; 在一個項的開頭觸發 COMMENT 關鍵字

11.2 圖檔和表格

對于 Org 模式的表格,以豎直線開頭的行會成為表格的首行。你可以在表格前面用下面幾行為表格指定标題和标簽,以友善交叉引用,在文本中可以用

\ref{tab:basic-data}

來引用它:

#+CAPTION: This is the caption for the next table (or link)
#+LABEL: tbl:basic-data
   | ... | ... |
   |-----+-----|
      

一些後端(HTML,LaTeX,以及 DocBook)允許直接插入圖檔到導出的文檔中。Org 也可以,隻要圖檔的連結不含有描述部分就行了,例如:

[[./img/a.jpg]]
      

如果你希望為圖檔定義一個标題,或者一個标簽友善内部交叉引用,可以讓圖檔單獨一行,在前面加上:

#+CAPTION: This is the caption for the next figure link (or table)
 #+LABEL: fig:SED-HR4049
 [[./img/a.jpg]]
      

你也可以為圖形指定一些其他的特性。但由于這與後端18密切相關,可以參考關于特定後端的章節獲得詳細資訊。

11.3 純文字的例子

你可以包含進來一些純文字的例子,這不屬于準備的範疇。這些例子會等寬排版,是以适用于代碼以及其他類似的情況:

#+BEGIN_EXAMPLE
Some example from a text file.
#+END_EXAMPLE
      

為了簡單化,一些小型的例子也可以将各行以冒号開頭。冒号前面可以有空格:

Here is an example
   : Some example from a text file.
      

對于一些程式設計語言的源代碼以及一些其他的文本,可以被 Emacs 的字型鎖(font-lock)特殊标記,你也可以讓它們像在Emacs的緩沖區中那樣顯示:

#+BEGIN_SRC emacs-lisp
(defun org-xor (a b)
   "Exclusive or."
   (if a (not b) b))
#+END_SRC
      

為了能在支援這種語言的專門的緩沖區中編輯例子,可以用 C-c , 啟動和退出編輯緩沖區。

11.4 包含檔案

當導出文檔時,你可以包含其他檔案中的内容。比如,想包含你的“.emacs”檔案,你可以用:

#+INCLUDE: "~/.emacs" src emacs-lisp
      

可選的第二個第三個參數是組織方式(例如,“quote”,“example”,或者“src”),如果是 “src”,語言用來格式化内容。組織方式是可選的,如果不給出,文本會被當作 Org 模式的正常處理。用 C-c ,可以通路包含的檔案。

11.5 嵌入 LaTex

對于需要包含數學符号和特殊方程的科學筆記,Org 模式支援嵌入 LaTeX 代碼到檔案中。你可以直接使用類 TeX 的宏來輸入特殊符号,輸入方程,或者整個 LaTeX 環境。

Angles are written as Greek letters \alpha, \beta and \gamma. The mass if
the sun is M_sun = 1.989 x 10^30 kg. The radius of the sun is R_{sun} =
6.96 x 10^8 m. If $a^2=b$ and $b=2$, then the solution must be either
$a=+\sqrt{2}$ or $a=-\sqrt{2}$.

\begin{equation}
x=\sqrt{b}
\end{equation}
      

特殊設定之後,導出 HTML 時 LaTeX 代碼片斷會生成圖檔并包含進來。

擴充閱讀

手冊第11章

12 導出

Org模式文檔可以導出成多種格式:ASCII 用于包含在郵件中;HTML 用來釋出到網頁上;LaTeX/PDF 用來列印出漂亮的文檔;DocBook 通過DocBook工具轉換成其他各種各樣的格式。也可以導出成 iCalendar 格式,将計劃資訊并入到桌面月曆中。

12.1 導出選項

導出器能識别緩沖區中提供附加資訊的特殊行。這樣行可以放在檔案中的任何地方。整個集合可以用 C-c C-e t 插入到緩沖區中。

C-c C-c t 插入導出選項模闆,見下面的例子
#+TITLE:       the title to be shown (default is the buffer name)
#+AUTHOR:      the author (default taken from user-full-name)
#+DATE:        a date, fixed, of a format string for format-time-string
#+EMAIL:       his/her email address (default from user-mail-address)
#+DESCRIPTION: the page description, e.g. for the XHTML meta tag
#+KEYWORDS:    the page keywords, e.g. for the XHTML meta tag
#+LANGUAGE:    language for HTML, e.g. ‘en’ (org-export-default-language)
#+TEXT:        Some descriptive text to be inserted at the beginning.
#+TEXT:        Several lines may be given.
#+OPTIONS:     H:2 num:t toc:t \n:nil @:t ::t |:t ^:t f:t TeX:t ...
#+LINK_UP:     the ``up'' link of an exported page
#+LINK_HOME:   the ``home'' link of an exported page
#+LATEX_HEADER: extra line(s) for the LaTeX header, like \usepackage{xyz}
      

12.2 導出排程器

所有的導出指令都可以通過導出排程器來使用,排程器是一個字首快捷鍵,它會提示輸入一個字母來指定指令。通常整個檔案都會被導出,但是如果選中區域包含大綱樹,就會導出大綱樹,并以第一個标題作為檔案标題。

C-c C-e 用來導出和釋出的排程器

12.3 ASCII/Latin-1/UTF-8 的導出

ASCII導出功能能給 Org 檔案提供的一個簡單易讀的版本,它隻包含純 ASCII 文本。Latin-1 和 UTF-8 導出用它們能編碼的特殊字元擴充了檔案的功能。

C-c C-e a 導出 ASCII 檔案
C-c C-e n 和 C-c C-e N 和上面的指令一樣,但是用 Latin-1 編碼19
C-c C-e u 和 C-c C-e U 和上面的指令一樣,但是用 UTF-8 編碼

12.4 HTML的導出

C-c C-e h 導出 HTML 檔案
C-c C-e b 導出 HTML 檔案并用浏覽器打開

想要将 HTML 以純文字方式複制到導出檔案,可以:

#+HTML: Literal HTML code for export
      

或者

#+BEGIN_HTML
 All lines between these markers are exported literally
 #+END_HTML
      

12.5 LaTeX和PDF的導出

C-c C-e l 導出 LaTeX 檔案
C-c C-e p 導出 LaTeX 檔案,并處理成 PDF 檔案
C-c C-e d 導出 LaTeX 檔案,處理成 PDF 檔案,并打開

預設,LaTeX輸出是使用article類型。但你可以在檔案中通過選項

#+LaTeX_CLASS: myclass

來改變,但類型必須是 org-export-latex-classes 中列出的。

第 11.5 節撰述的内嵌的 LaTeX 可以正确地插入到 LaTeX 檔案中。跟 HTML 導出器相似,也可以通過

#+LaTeX:

#+BEGIN_LaTeX ... #+END_LaTeX

來加入純文字的 LaTex 代碼。

12.6 DocBook的導出

C-c C-e D 導出 DocBook 檔案

跟 HTML 導出器相似,也可以通過

#+DocBook:

#+BEGIN_DocBook ... #+END_DocBook

結構來加入純文字的 DocBook 代碼。20

12.7 iCalendar的導出

C-c C-e i 在一個 “.ice” 檔案中為目前檔案建立 iCalendar 項。
C-c C-e c 從 org-agenda-files 中的所有檔案建立一個較大的 iCalendar 檔案,并寫入到 org-combined-agenda-icalendar-file 指定的檔案中。
擴充閱讀

手冊第12章

Sebastian Rose’s image handling tutorial

Thomas Dye’s LaTeX export tutorial Eric Fraga’s BEAMER presentation tutorial

13 釋出

Org 包含一個釋出管理系統,可以配置一個由互相連結的 Org 檔案組成的工程項目的自動向 HTML 轉換。你也可以設定 Org,将導出的 HTML 頁面和相應的附件如圖檔,源代碼檔案等自動上傳到伺服器。如何設定,詳見手冊。

下面是一個例子:

(setq org-publish-project-alist
      '(("org"
         :base-directory "~/org/"
         :publishing-directory "~/public_html"
         :section-numbers nil
         :table-of-contents nil
         :style "<link rel=\"stylesheet\"
                href=\"../other/mystyle.css\"
                type=\"text/css\"/>")))
      
C-c C-e C 提示指明一個項目,将所有的檔案釋出。
C-c C-e P 釋出包含目前檔案的項目。
C-c C-e F 隻釋出目前檔案。
C-c C-e E 釋出所有項目。

Org 用時間戳來檢視檔案是否改變。上面的指令隻釋出修改過的檔案。你可以給它們加上字首來強制重新釋出所有的檔案。

擴充閱讀

手冊第 1 章

Sebastian Rose’s publishing tutorial

Ian Barton’s Jekyll/blogging setup

14 處理源代碼

Org模式提供了一系列功能來處理源代碼,包括源代碼塊的本地主模式編輯,代碼塊的運作(evaluation),代碼塊的混合,以及以多種方式導出代碼塊和它們的結果。

代碼塊的結構

代碼塊的結構就像下面這樣:

#+srcname: <name>
#+begin_src <language> <switches> <header arguments>
  <body>
#+end_src
      

其中<name>是代碼塊的名稱,<language>指定代碼塊的語言(例如,emacs-lisp,shell,R,python,等等),<switches>用以控制代碼塊的導出,<header arguments>用來從多個方面控制代碼塊的行為,下面會詳述,最後<body>是我們要寫的代碼。

編輯源代碼

使用C-c ,21 來編輯目前代碼塊。這個指令會新開一個以代碼語言為主模式并包含代碼的緩沖區(buffer)。儲存這個緩沖區,會将新的内容寫回Org緩沖區。再次使用C-c , 退出這個緩沖區。

運作代碼塊

用 C-c C-c 運作目前代碼塊并将它們的結果插入 Org 緩沖區中。預設情況下,運作功能隻對 emacs-lisp 代碼塊開啟,但支援多種語言。所支援語言的完整清單見手冊。下面是一個代碼塊和它的結果。

#+begin_src emacs-lisp
  (+ 1 2 3 4)
#+end_src

#+results:
: 10
      
抽取源代碼

用 C-c C-v 将代碼塊從一個 Org 模式的檔案中抽取到“雜貨庫”(Library of Babel)中,這樣在所有的 Org 模式的緩沖區中都可以運作該代碼。一個常用的代碼塊集合在 contrib/library-of-babel.org 中随 Org 一直釋出。

頭參數

運作和導出代碼時的很多選項都通過頭參數來設定。選項可以指定為全局的,檔案級别的,大綱子樹級别的,或者隻是用于一個代碼塊。下面解釋部分頭參數。

:var :var頭參數用來将參數傳遞給代碼塊。能用來傳遞給參數的值可以是直接量,org模式表格中的值,文字執行個體塊(literal example blocks)中的值,或者一個已命名代碼塊的結果。
:results :result頭參數控制代碼塊結果的收集、類型和處理。output和value(預設)的值指定怎樣在運作代碼塊時收集結果。vector,scalar,file, raw, html, latex 和 code的值指定代碼塊結果的類型并以此确定将結果并入Org緩沖區的方式。silent, replace, prepend和 append指定處理代碼塊結果的方式,明确是否以及如何将結果插入Org緩沖區中。
:session :session頭參數将會使代碼塊在Emacs的一個持續互動的底層程序(persistent interactive inferior process)中執行。這考慮到了代碼運作的持續狀态和運作結果的人工檢查。
:exports 代碼和塊結果的任何組合在導出時都可以保持,這可以通過設定:results頭參數為code results none或者both來指定。
:tangle 頭參數:tangle yes将使代碼塊的内容到儲存到一個以Org模式緩沖區命名的檔案中。也可以通過:tangle filename指明檔案名。
:cache 頭參數:cache yes将使繁雜的代碼塊和結果關聯,確定輸入改變時代碼塊重運作。
:noweb 頭參數:noweb将擴充運作和混合時的”noweb“樣式的引用。
:file 将代碼塊結果輸出到檔案時(比如,圖形,表格,圖表)可以用頭參數:file filename,結果會被儲存至指定的檔案中,在Org緩沖區中插入一個到該檔案的連結。
擴充閱讀

手冊第 11.3 節

The Babel site on Worg

15 雜項

15.1 補全

Org 支援用 M-TAB 進行緩沖區内部的補全。這種補全不需要利用 minibuffer。你隻需要鍵入幾個字母然後用快捷鍵在原位補全。例如,這個指令可以在‘\’後面補全 TeX 符号,在标題的開頭補全 TODO 關鍵字,在‘:’之後補全标簽。

15.2 一個更清晰的大綱視圖

當 Org 标題含有很多星号并且标題下面的文字不縮進時,就會顯得雜亂無章。當寫一個圖書結構的檔案時,大綱标題就是實際章節的标題,基于清單機大綱,上面的問題就不會再有,縮進的結構也會更清晰:

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

如果你用的 Emacs 23.1.50.3 和 Org 6.29 的更高版本,這種視圖可以用 org-indent-mode 模式動态地實作,它會在每行前面加上一些前導空格。你可以通過設定變量 org-startup-indented 為所有的檔案打開 org-indent-mode 模式,或者用

#+STARTUP: indent
      

為單個檔案打開縮進。 如果你想在 Emacs 或者 Org 的早期版本中實作同樣的效果,或者想讓縮進用硬空格符号,以使得純文字檔案看起來一樣。Org 可以縮進标題下面的文本(用TAB);隐藏标題中的星号;隻使用一級、三級等标題來為每級實作兩個字元的縮進,進而實作這個功能。為了使這個特性在檔案中支援,用:

#+STARTUP: hidestars odd
      

15.3 MobileOrg

MobileOrg 最初是由 Richard Moreland 為 iPhone/iPod Touch 系列裝置開發的應用程式。Matt Jones也為Android裝置獨立實作了一個版本。詳見Org手冊。

note 本文的英文原文是 Org 首頁上的一篇簡短手冊( The compact Org-mode Guide )。另外:

  • 本文的腳注是雙向連結的,你可以大膽地檢視腳注而不用擔心如何再定位到原文。
  • 我不知道如何在引用的源代碼中加腳注,如果你知道,希望你能告訴我。
  • 我不知道如果在表格中正确顯示‘|’,如果你知道,希望你能告訴我。
  • 本文可能有錯誤,如果發現錯誤,請在評論中給出。

傳回

Footnotes:

1 見說明。

2 當然你也可以專門用一個檔案來記錄待辦事項,但這不是必需的。

3 對應的buffer中的設定是:#+STARTUP: logdone

4 對應的buffer中的設定是:#+STARTUP: lognotedone

5 跟所有的緩沖區内設定一樣,用C-c C-c 使行中的改變生效。

6 這跟通常意義上的 安排一個會議 ( scheduling a meeting )不同,後者隻要在Org模式中插入一個不帶關鍵字的時間戳就行了。

7 即使被标記為 DONE,在指定日期它依然會列在議程中。如果你不希望這樣可以用變量 org-agenda-skip-scheduled-if-done 來設定。

8 截取位置是指儲存截取資訊的檔案位址。

9 使用捕獲模闆,可以定義更細緻的捕獲位址,見[Capture templates]。

10 請設定你自己的快捷鍵,C-c c 隻是一個建議。

11 這個表格實在翻譯不通,以後再說吧。

12 注意,後兩行中參數的順序(月,日,年)依賴于 calendar-date-style 的設定。

13 原文是 C-p 有誤。

14 原文是 C-n,有誤。

15 在視圖緩沖區的位置直接打開源位置,可能是版本的問題,并不删除其他的視窗。

16 不知道為什麼我的版本不識别這個指令。

17 分隔線

18 (backend,導出目标)

19 可能是版本的問題,這個指令和下面的指令在我的機器上沒有。

20 原文說是 LaTeX 代碼,有誤。

21 前面的逗号是指令的一部分,下同。