浏览代码

contrib: Add Org manual

* contrib/orgmanual.org: New file.
Nicolas Goaziou 9 年之前
父节点
当前提交
47b4a47547
共有 1 个文件被更改,包括 19741 次插入0 次删除
  1. 19741 0
      contrib/orgmanual.org

+ 19741 - 0
contrib/orgmanual.org

@@ -0,0 +1,19741 @@
+#+TITLE:     Org Mode
+#+AUTHOR:    Carsten Dominik
+#+EMAIL:     tsd@tsdye.com
+#+DATE:      2012-11-10 Sat
+#+LANGUAGE:  en
+#+OPTIONS:   H:4 num:t toc:t \n:nil @:t ::t |:t ^:nil -:t f:t *:t <:t
+#+OPTIONS:   TeX:t LaTeX:t skip:nil d:nil todo:nil pri:nil tags:not-in-toc
+#+INFOJS_OPT: view:nil toc:nil ltoc:t mouse:underline buttons:0 path:http://orgmode.org/org-info.js
+#+SELECT_TAGS: export
+#+EXCLUDE_TAGS: noexport
+#+STARTUP: overview
+#+TEXINFO_HEADER: @c
+#+TEXINFO_HEADER: @c Added by tsd [2012-11-11 Sun]
+#+TEXINFO_HEADER: @documentencoding UTF-8
+#+TEXINFO_HEADER: @c
+#+TEXINFO_HEADER: @include org-version.inc
+#+TEXINFO_HEADER: @c
+#+TEXINFO_HEADER: @c Use proper quote and backtick for code sections in PDF output
+#+TEXINFO_HEADER: @c Cf. Texinfo manual 14.2
+#+TEXINFO_HEADER: @set txicodequoteundirected
+#+TEXINFO_HEADER: @set txicodequotebacktick
+#+TEXINFO_HEADER: @c
+#+TEXINFO_HEADER: @c Version and Contact Info
+#+TEXINFO_HEADER: @set MAINTAINERSITE @uref{http://orgmode.org,maintainers webpage}
+#+TEXINFO_HEADER: @set MAINTAINER Carsten Dominik
+#+TEXINFO_HEADER: @set MAINTAINEREMAIL @email{carsten at orgmode dot org}
+#+TEXINFO_HEADER: @set MAINTAINERCONTACT @uref{mailto:carsten at orgmode dot org,contact the maintainer}
+#+SUBTITLE: Release @value{VERSION}
+#+SUBAUTHOR:  with contributions by David O'Toole, Bastien Guerry, Philip Rooke, Dan Davison, Eric Schulte, Thomas Dye and Jambunathan K.
+#+TEXINFO_DIR_CATEGORY: Emacs editing modes
+#+TEXINFO_DIR_TITLE: Org Mode: (org)
+#+TEXINFO_DIR_DESC: Outline-based notes management and organizer
+
+#+TODO: FIXME | FIXED
+
+#+comment: # Macros for simplifying export
+
+#+comment: Indexing macros.  index is generic, the rest are for the specific
+#+comment: default indexes.
+#+MACRO: index @@info:@$1index $2@@
+#+MACRO: cindex {{{index(c,$1)}}}
+#+MACRO: pindex {{{index(p,$1)}}}
+#+MACRO: findex {{{index(f,$1)}}}
+#+MACRO: vindex {{{index(v,$1)}}}
+#+MACRO: kindex {{{index(k,$1)}}}
+
+#+comment: Markup macros.  In texinfo export they will be marked up, otherwise
+#+comment: they will be inserted verbatim.  markup is the generic form that can
+#+comment: be used to insert any @-command with the second variable being the
+#+comment: text to mark up.
+#+MACRO: markup @@info:@$1{@@$2@@info:}@@
+#+MACRO: kbd {{{markup(kbd,$1)}}}
+#+MACRO: key {{{markup(key,$1)}}}
+#+MACRO: samp {{{markup(samp,$1)}}}
+#+MACRO: command {{{markup(command,$1)}}}
+#+MACRO: file {{{markup(file,$1)}}}
+#+MACRO: var {{{markup(var,$1)}}}
+#+MACRO: cite {{{markup(cite,$1)}}}
+#+MACRO: value {{{markup(value,$1)}}}
+
+#+MACRO: printindex @@info:@printindex $1@@
+
+#+MACRO: kbdkey {{{kbd($1{{{key($2)}}})}}}
+#+MACRO: kbdspckey {{{kbd($1 {{{key($2)}}})}}}
+#+MACRO: ksksksk {{{kbd($1 {{{key($2)}}} $3 {{{key($4)}}})}}}
+#+MACRO: ksksksksk {{{kbd($1 {{{key($2)}}} $3 {{{key($4)}}} {{{key($5)}}})}}}
+#+MACRO: kbdkeys {{{kbd($1{{{key($2)}}}{{{key($3)}}})}}}
+
+#+comment: Plain macros.
+#+MACRO: noindent @@info:@noindent@@
+#+MACRO: defun @@info:@defun@@
+#+MACRO: enddefun @@info:@end defun@@
+#+MACRO: defopt @@info:@defopt@@
+#+MACRO: enddefopt @@info:@end defopt@@
+#+MACRO: result @@info:@result{}@@
+#+MACRO: page @@info:@page@@
+
+* Introduction
+  :PROPERTIES:
+  :TITLE: Introduction
+  :DESCRIPTION: Getting started
+  :END:
+{{{cindex(introduction)}}}
+
+** Summary
+   :PROPERTIES:
+   :DESCRIPTION: Brief summary of what Org-mode does
+   :END:
+{{{cindex(summary)}}}
+
+Org is a mode for keeping notes, maintaining TODO lists, and doing
+project planning with a fast and effective plain-text system.
+
+Org develops organizational tasks around NOTES files that contain
+lists or information about projects as plain text. Org is implemented
+on top of Outline mode, which makes it possible to keep the content of
+large files well structured. Visibility cycling and structure editing
+help to work with the tree. Tables are easily created with a built-in
+table editor. Org supports TODO items, deadlines, timestamps, and
+scheduling. It dynamically compiles entries into an agenda that
+utilizes and smoothly integrates much of the Emacs calendar and diary.
+Plain text URL-like links connect to websites, emails, Usenet
+messages, BBDB entries, and any files related to the projects. For
+printing and sharing of notes, an Org file can be exported as a
+structured ASCII file, as HTML, or as an iCalendar file.[fn:1]  It can
+also serve as a publishing tool for a set of linked web pages.
+
+As a project planning environment, Org works by adding metadata to
+outline nodes. Based on this data, specific entries can be extracted
+in queries and create dynamic /agenda views/.
+
+Org mode contains the Org Babel environment which allows you to work
+with embedded source code blocks in a file, to facilitate code
+evaluation, documentation, and literate programming techniques.
+
+Org's automatic, context-sensitive table editor with spreadsheet
+capabilities can be integrated into any major mode by activating the
+minor Orgtbl mode. Using a translation step, it can be used to
+maintain tables in arbitrary file types, for example in LaTeX. The
+structure editing and list creation capabilities can be used outside
+Org with the minor Orgstruct mode.
+
+Org keeps simple things simple. When first fired up, it should feel
+like a straightforward, easy to use outliner. Complexity is not
+imposed, but a large amount of functionality is available when you
+need it. Org is a toolbox and can be used in different ways and for
+different ends, for example:
+
+  - an outline extension with visibility cycling and structure editing
+  - an ASCII system and table editor for taking structured notes
+  - a TODO list editor
+  - a full agenda and planner with deadlines and work scheduling
+    {{{pindex(GTD\\\, Getting Things Done)}}}
+  - an environment in which to implement David Allen's GTD system
+  - a simple hypertext system, with HTML and LaTeX export
+  - a publishing tool to create a set of interlinked web pages
+  - an environment for literate programming
+
+{{{cindex(FAQ)}}} 
+
+There is a [[http://orgmode.org][website for Org]] that provides links to the newest version
+of Org, as well as additional information, frequently asked questions
+(FAQ), links to tutorials, etc.
+
+{{{cindex(print edition)}}} 
+
+Version 7.3 of this manual is available as a [[http://www.network-theory.co.uk/org/manual/][paperback book from
+Network Theory Ltd.]]
+
+{{{page}}}
+
+** Installation
+   :PROPERTIES:
+   :DESCRIPTION: How to install a downloaded version of Org-mode
+   :END:
+
+{{{cindex(installation)}}}
+{{{cindex(XEmacs)}}}
+
+*Important:* If you have the version of Org that comes with Emacs or
+as a XEmacs package, please skip this section and go directly to
+[[Activation]]. If you downloaded Org as an ELPA package, please read the
+instructions on the [[http://orgmode.org/elpa.html][Org ELPA page]]. To see what version of Org (if any)
+is part of your Emacs distribution, type {{{kbd(M-x org-version)}}}.[fn:2]
+
+Installation of Org mode uses a build system, which is described in more
+detail on [[http://orgmode.org/worg/dev/org-build-system.html][Worg]].
+
+If you have downloaded Org from the Web as a distribution {{{file(.zip)}}} or
+{{{file(.tar.gz)}}} archive, take the following steps to install it:
+
+  - Unpack the distribution archive
+  - Change into (~cd~) the Org directory
+  - Run ~make help config~ and then check and edit the file
+    {{{file(local.mk)}}} if the default configuration does not match
+    your system
+
+    - Set the name of the Emacs binary (likely either
+      {{{file(emacs)}}} or {{{file(xemacs)}}}), and the paths to the
+      directories where local Lisp and Info files will be installed
+    - If the Emacs binary is not in your path, give the full path to
+      the executable
+    - Avoid spaces in any path names
+
+  - Run ~make config~ again to check the configuration
+  - Run ~make install~ or ~sudo make install~ to build and install Org
+    mode on your system
+
+If you use a cloned Git repository, then the procedure is slightly
+different. The following description assumes that you are using the
+~master~ branch.[fn:3] You could also use the ~maint~ branch instead,
+where the release versions are published, just replace ~master~ with
+~maint~ in the description below.
+
+  - Change into (~cd~) the Org repository
+  - Run ~git checkout master~ to switch to the ~master~ branch of the
+    Org repository
+  - Run ~make help~ and then check and edit the file {{{file(local.mk)}}}
+
+    - You must set the name of the Emacs binary
+      (likely either {{{file(emacs)}}} or {{{file(xemacs)}}}), and the
+      paths to the directories where local Lisp and Info files will be
+      installed
+    - If the Emacs binary is not in your path, you must give
+      the full path to the executable
+    - Avoid spaces in any path names
+
+  - Run ~make config~ to check the configuration
+  - Optionally run ~make test~ to build Org mode and then run the full
+    test suite
+  - Run ~make update2~ or ~make up2~ to update the Git repository and
+    build and install Org mode. The latter invocation runs the
+    complete test suite before installation and installs only if the
+    build passes all tests
+
+If you don't have access to the system-wide directories and you don't
+want to install somewhere into your home directory, you can run Org
+directly from the distribution directory or Org repository by
+compiling Org mode in place:
+
+  - Change into (~cd~) the Org repository
+  - Run ~git checkout master~ to switch to the ~master~ branch of the
+    Org repository
+  - Run ~make compile~
+
+Last but not least you can also run Org mode directly from an Org repository
+without any compilation.  Simply replace the last step in the recipe above
+with ~make uncompiled~.
+
+Then add the following line to {{{file(.emacs)}}}:
+
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+(add-to-list 'load-path "~/path/to/orgdir/lisp")
+#+end_src
+
+{{{noindent}}}
+If you plan to use code files from the {{{file(contrib)}}} subdirectory without
+compiling them, do a similar step for this directory:
+
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+(add-to-list 'load-path "~/path/to/orgdir/contrib/lisp" t)
+#+end_src
+
+If you want to include those files with the build and install, please
+customize the variable ~ORG_ADD_CONTRIB~ instead in your
+~local.mk~ file. For more details please see this
+[[http://orgmode.org/worg/dev/org-build-system.html#sec-4-1-2][description on Worg]].
+
+Installing Info files is system dependent, because of differences in
+the {{{file(install-info)}}} program. The Info documentation is
+installed together with the rest of Org mode. If you don't install Org
+mode, it is possible to install the Info documentation separately if you
+have install-info on your system.[fn:4]  
+
+The command to do this is:
+
+#+begin_example
+   make install-info
+#+end_example
+
+Do not forget to activate Org as described in the following section.
+{{{page}}}
+
+** Activation
+   :PROPERTIES:
+   :DESCRIPTION: How to activate Org-mode for certain buffers
+   :END:
+{{{cindex(activation)}}}
+{{{cindex(autoload)}}}
+{{{cindex(ELPA)}}}
+{{{cindex(global key bindings)}}}
+{{{cindex(key bindings\\\, global)}}}
+{{{findex(org-agenda)}}}
+{{{findex(org-capture)}}}
+{{{findex(org-store-link)}}}
+{{{findex(org-iswitchb)}}}
+
+Since Emacs 22.2, files with the {{{file(.org)}}} extension use Org mode by
+default.  If you are using an earlier version of Emacs, add this line to your
+{{{file(.emacs)}}} file:
+
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+(add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode))
+#+end_src
+
+Org mode buffers need font-lock to be turned on - this is the default in
+Emacs.[fn:5]
+
+There are compatibility issues between Org mode and some other Elisp
+packages, please take the time to check the list (see [[Conflicts]]).
+
+The four Org commands {{{command(org-store-link)}}},
+{{{command(org-capture)}}}, {{{command(org-agenda)}}}, and
+{{{command(org-iswitchb)}}} should be accessible through global keys
+(i.e., anywhere in Emacs, not just in Org buffers).  Here are
+suggested bindings for these keys, please modify the keys to your own
+liking.
+
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+(global-set-key "\C-cl" 'org-store-link)
+(global-set-key "\C-cc" 'org-capture)
+(global-set-key "\C-ca" 'org-agenda)
+(global-set-key "\C-cb" 'org-iswitchb)
+#+end_src
+
+{{{cindex(Org mode\\\, turning on)}}} 
+With this setup, all files with extension {{{samp(.org)}}} will be put
+into Org mode.  As an alternative, make the first line of a file look
+like this:
+
+#+begin_example
+   MY PROJECTS    -*- mode: org; -*-
+#+end_example
+
+{{{vindex(org-insert-mode-line-in-empty-file)}}} 
+{{{noindent}}}
+which will select Org mode for this buffer no matter what the file's
+name is. See also the variable
+~org-insert-mode-line-in-empty-file~.
+
+Many commands in Org work on the region if the region is /active/. To
+make use of this, you need to have ~transient-mark-mode~
+(~zmacs-regions~ in XEmacs) turned on. In Emacs 23 this is the
+default, in Emacs 22 you need to do this yourself with
+
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+(transient-mark-mode 1)
+#+end_src
+
+{{{noindent}}} If you do not like ~transient-mark-mode~, you can
+create an active region by using the mouse to select a region, or
+pressing {{{kbdkey(C-,SPC)}}} twice before moving the cursor.
+
+** Feedback
+   :PROPERTIES:
+   :DESCRIPTION: Bug reports, ideas, patches, etc.
+   :END:
+{{{cindex(feedback)}}}
+{{{cindex(bug reports)}}}
+{{{cindex(maintainer)}}}
+{{{cindex(author)}}}
+
+If you find problems with Org, or if you have questions, remarks, or
+ideas about it, please mail to the Org mailing list
+[[mailto:emacs-orgmode@gnu.org]]. If you are not a member of
+the mailing list, your mail will be passed to the list after a
+moderator has approved it.[fn:6]
+
+For bug reports, please first try to reproduce the bug with the latest
+version of Org available---if you are running an outdated version, it
+is quite possible that the bug has been fixed already. If the bug
+persists, prepare a report and provide as much information as
+possible, including the version information of Emacs ({{{kbdspckey(M-x
+emacs-version,RET)}}}) and Org ({{{kbdspckey(M-x org-version,RET)}}}),
+as well as the Org related setup in {{{file(.emacs)}}}. The easiest
+way to do this is to use the command {{{kbd(M-x
+org-submit-bug-report)}}}, which will put all this information into an
+Emacs mail buffer so that you only need to add your description. If
+you are not sending the Email from within Emacs, please copy and paste
+the content into your Email program.
+
+Sometimes you might face a problem due to an error in your Emacs or
+Org mode setup.  Before reporting a bug, it is very helpful to start
+Emacs with minimal customizations and reproduce the problem.  Doing so
+often helps you determine if the problem is with your customization or
+with Org mode itself.  You can start a typical minimal session with a
+command like the example below.
+
+#+begin_src sh :exports code
+$ emacs -Q -l /path/to/minimal-org.el
+#+end_src
+
+However if you are using Org mode distributed with Emacs, a minimal
+setup is not necessary. In that case it is sufficient to start Emacs
+as ~emacs -Q~. The ~minimal-org.el~ setup
+file can have contents as shown below.
+
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+;;; Minimal setup to load latest `org-mode'
+
+;; activate debugging
+(setq debug-on-error t
+      debug-on-signal nil
+      debug-on-quit nil)
+
+;; add latest org-mode to load path
+(add-to-list 'load-path (expand-file-name "/path/to/org-mode/lisp"))
+(add-to-list 'load-path (expand-file-name "/path/to/org-mode/contrib/lisp" t))
+#+end_src
+
+If an error occurs, a backtrace can be very useful (see [[How to
+create a useful backtrace]]). Often a small example file helps, along
+with clear information about:
+
+  1. What exactly did you do?
+  2. What did you expect to happen?
+  3. What happened instead?
+
+{{{noindent}}} Thank you for helping to improve this program.
+
+** How to create a useful backtrace
+   :PROPERTIES:
+   :DESCRIPTION: The best way to report an error
+   :END:
+
+{{{cindex(backtrace of an error)}}}
+
+If working with Org produces an error with a message you don't
+understand, you may have hit a bug.  The best way to report this is by
+providing, in addition to what was mentioned above, a /backtrace/.
+This is information from the built-in debugger about where and how the
+error occurred.  Here is how to produce a useful backtrace:
+
+  1. Reload uncompiled versions of all Org mode Lisp files. The
+     backtrace contains much more information if it is produced with
+     uncompiled code. To do this, use 
+     {{{kbdspckey(C-u M-x org-reload,RET)}}} or select 
+     ~Org -> Refresh/Reload -> Reload Org uncompiled~ from the menu.
+
+  2. Go to the ~Options~ menu and select ~Enter Debugger on Error~
+     (XEmacs has this option in the ~Troubleshooting~ sub-menu).
+
+  3. Do whatever you have to do to hit the error. Don't forget to
+     document the steps you take.
+
+  4. When you hit the error, a {{{file(*Backtrace*)}}} buffer will
+     appear on the screen.  Save this buffer to a file (for example
+     using {{{kbd(C-x C-w)}}}) and attach it to your bug report.
+
+** Conventions
+   :PROPERTIES:
+   :DESCRIPTION: Typesetting conventions in the manual
+   :END:
+
+Conventions for typesetting keywords, keybindings, and commands in
+this manual are described.
+
+*** Three types of keywords
+    :PROPERTIES:
+    :DESCRIPTION: TODO, tags, and properties
+    :END:
+
+Org mainly uses three types of keywords: TODO keywords, tags and property
+names.  In this manual we use the following conventions:
+
+  - TODO, WAITING :: TODO keywords are written with all capitals, even if they
+    are user-defined.
+  - boss, ARCHIVE :: User-defined tags are written in lowercase; built-in
+               tags with special meaning are written with all capitals.
+  - Release, PRIORITY :: User-defined properties are capitalized; built-in
+                properties with special meaning are written with all capitals.
+
+Moreover, Org uses /option keywords/ (like ~#+TITLE~ to set the title)
+and /environment keywords/ (like ~#+BEGIN_HTML~ to start a ~HTML~
+environment). They are written in uppercase in the manual to enhance
+its readability, but you can use lowercase in your Org files.[fn:7]
+
+*** Keybindings and commands
+    :PROPERTIES:
+    :DESCRIPTION: Bind useful commands to keys
+    :END:
+
+{{{kindex(C-c a)}}}
+{{{findex(org-agenda)}}}
+{{{kindex(C-c c)}}}
+{{{findex(org-capture)}}}
+
+The manual suggests two global keybindings: {{{kbd(C-c a)}}} for
+~org-agenda~ and {{{kbd(C-c c)}}} for ~org-capture~. These are only
+suggestions, but the rest of the manual assumes that you are using
+these keybindings.
+
+Also, the manual lists both the keys and the corresponding commands
+for accessing a functionality. Org mode often uses the same key for
+different functions, depending on context. The command that is bound
+to such keys has a generic name, like ~org-metaright~.  In the manual
+we will, wherever possible, give the function that is internally
+called by the generic command. For example, in the chapter on document
+structure, {{{kbdkey(M-,right)}}} will be listed to call
+~org-do-demote~, while in the chapter on tables, it will be listed to
+call ~org-table-move-column-right~. 
+
+#+comment: If you prefer, you can compile the manual without the command names by unsetting the flag ~cmdnames~ in {{{file(org.texi)}}}.
+
+* Document structure
+  :PROPERTIES:
+  :DESCRIPTION: A tree works like your brain
+  :OPTIONAL_TITLE: Document Structure
+  :END:
+{{{cindex(document structure)}}}
+{{{cindex(structure of document)}}}
+
+Org is based on Outline mode and provides flexible commands to
+edit the structure of the document.
+
+** Outlines
+   :PROPERTIES:
+   :DESCRIPTION: Org mode is based on Outline mode
+   :END:
+{{{cindex(outlines)}}}
+{{{cindex(Outline mode)}}}
+
+Org is implemented on top of Outline mode. Outlines allow a document
+to be organized in a hierarchical structure, which (at least for me)
+is the best representation of notes and thoughts. An overview of this
+structure is achieved by folding (hiding) large parts of the document
+to show only the general document structure and the parts currently
+being worked on. Org greatly simplifies the use of outlines by
+compressing the entire show/hide functionality into a single command,
+{{{command(org-cycle)}}}, which is bound to the {{{key(TAB)}}} key.
+
+** Headlines
+   :PROPERTIES:
+   :DESCRIPTION: How to typeset Org tree headlines
+   :END:
+{{{cindex(headlines)}}}
+{{{cindex(outline tree)}}}
+{{{vindex(org-special-ctrl-a/e)}}}
+{{{vindex(org-special-ctrl-k)}}}
+{{{vindex(org-ctrl-k-protect-subtree)}}}
+
+Headlines define the structure of an outline tree.  The headlines in Org
+start with one or more stars, on the left margin.[fn:8]  For example:
+
+#+begin_src org
+  ,* Top level headline
+  ,** Second level
+  ,*** Third level
+      some text
+  ,*** Third level
+      more text
+  ,* Another top level headline
+#+end_src
+
+{{{noindent}}} Some people find the many stars too noisy and would
+prefer an outline that has whitespace followed by a single star as
+headline starters. A setup to realize this is described in the
+section, [[Clean view]]. 
+
+{{{vindex(org-cycle-separator-lines)}}}
+An empty line after the end of a subtree is considered part of it and
+will be hidden when the subtree is folded.  However, if you leave at
+least two empty lines, one empty line will remain visible after folding
+the subtree, in order to structure the collapsed view.  See the
+variable ~org-cycle-separator-lines~ to modify this behavior.
+
+** Visibility cycling
+   :PROPERTIES:
+   :DESCRIPTION: Show and hide, much simplified
+   :OPTIONAL_TITLE: Visibility cycling
+   :END:
+{{{cindex(cycling\\\, visibility)}}}
+{{{cindex(visibility cycling)}}}
+{{{cindex(trees\\\, visibility)}}}
+{{{cindex(show hidden text)}}}
+{{{cindex(hide text)}}}
+
+Outlines make it possible to hide parts of the text in the buffer.
+Org uses just two commands, bound to {{{key(TAB)}}} and
+{{{kbdkey(S-,TAB)}}} to change the visibility in the buffer.
+
+{{{cindex(subtree visibility states)}}}
+{{{cindex(subtree cycling)}}}
+{{{cindex(folded\\\, subtree visibility state)}}}
+{{{cindex(children\\\, subtree visibility state)}}}
+{{{cindex(subtree\\\, subtree visibility state)}}}
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{key(TAB)}}}, ~org-cycle~ :: Subtrees can be cycled through three
+     states:
+     {{{kindex(TAB)}}}
+     {{{findex(org-cycle)}}}
+     
+     #+begin_src example
+       ,-> FOLDED -> CHILDREN -> SUBTREE --.
+       '-----------------------------------'
+     #+end_src
+
+     {{{vindex(org-cycle-emulate-tab )}}}
+     {{{vindex(org-cycle-global-at-bob )}}}
+
+     By default, the cursor must be on a headline for this to work,
+     but this behavior can be modified with the
+     ~org-cycle-emulate-tab~ option. When the cursor is at the
+     beginning of the buffer and the first line is not a headline,
+     then {{{key(TAB)}}} actually runs global cycling (see
+     below).[fn:9] Also, when called with a prefix argument
+     ({{{kbdspckey(C-u,TAB)}}}), global cycling is invoked.
+
+- {{{kbdkey(S-,TAB)}}} or {{{kbdspckey(C-u,TAB)}}}, ~org-global-cycle~ :: 
+     Global cycling: Rotate the entire buffer among the states
+
+     {{{cindex(global visibility states)}}}
+     {{{cindex(global cycling)}}}
+     {{{cindex(overview\\\, global visibility state)}}}
+     {{{cindex(contents\\\, global visibility state)}}}
+     {{{cindex(show all\\\, global visibility state)}}}
+     {{{kindex(C-u TAB)}}}
+     {{{kindex(S-TAB)}}}
+     {{{findex(org-global-cycle)}}}
+
+     #+begin_example
+        ,-> OVERVIEW -> CONTENTS -> SHOW ALL --.
+        '--------------------------------------'
+     #+end_example
+
+     When {{{kbdkey(S-,TAB)}}} is called with a numeric prefix
+     argument, ~N~, the CONTENTS view up to headlines of level N will
+     be shown. Note that inside tables, {{{kbdkey(S-,TAB)}}} jumps
+     to the previous field.
+
+- {{{kbdspckey(C-u C-u C-u,TAB)}}}, ~show-all~ :: Show all, including
+     drawers.
+
+     {{{kindex(C-u C-u C-u TAB)}}}
+     {{{findex(show-all)}}}
+     {{{cindex(show all\\\, command)}}}
+- {{{kbd(C-c C-r)}}}, ~org-reveal~ :: Reveal context around point,
+     showing the current entry, the following heading and the
+     hierarchy above.  Useful for working near a location that has
+     been exposed by a sparse tree command (see [[Sparse trees]]) or an
+     agenda command (see [[Agenda commands]]).  With a prefix argument
+     show, on each level, all sibling headings.  With a double prefix
+     argument, also show the entire subtree of the parent.
+
+     {{{cindex(revealing context)}}}
+     {{{kindex(C-c C-r)}}}
+     {{{findex(org-reveal)}}}
+- {{{kbd(C-c C-k)}}}, ~show-branches~ :: Expose all the headings of
+     the subtree, CONTENT view for just one subtree.
+
+     {{{kindex(C-c C-k)}}}
+     {{{findex(show-branches)}}}
+     {{{cindex(show branches\\\, command)}}}
+- {{{kbdspckey(C-c,TAB)}}}, ~show-children~ :: Expose all direct
+     children of the subtree.  With a numeric prefix argument, ~N~,
+     expose all children down to level N.
+
+     {{{kindex(C-c TAB)}}}
+     {{{findex(show-children)}}}
+     {{{cindex(show children\\\, command)}}}
+- {{{kbd(C-c C-x b)}}}, ~org-tree-to-indirect-buffer~ :: Show the
+     current subtree in an indirect buffer.[fn:10] With a numeric
+     prefix argument, ~N~, go up to level N and then take that tree.
+     If N is negative then go up that many levels.  With a
+     {{{kbd(C-u)}}} prefix, do not remove the previously used indirect
+     buffer.
+
+     {{{kindex(C-c C-x b)}}}
+     {{{findex(org-tree-to-indirect-buffer)}}}
+- {{{kbd(C-c C-x v)}}}, ~org-copy-visible~ :: Copy the /visible/ text
+     in the region into the kill ring.
+
+{{{vindex(org-startup-folded)}}}
+{{{cindex(~overview~\\\, STARTUP keyword)}}}
+{{{cindex(~content~\\\, STARTUP keyword)}}}
+{{{cindex(~showall~\\\, STARTUP keyword)}}}
+{{{cindex(~showeverything~\\\, STARTUP keyword)}}}
+
+When Emacs first visits an Org file, the global state is set to
+OVERVIEW, i.e., only the top level headlines are visible.  This can be
+configured through the variable ~org-startup-folded~, or on a
+per-file basis by adding one of the following lines anywhere in the
+buffer:
+
+#+begin_src org 
+  ,#+STARTUP: overview
+  ,#+STARTUP: content
+  ,#+STARTUP: showall
+  ,#+STARTUP: showeverything
+#+end_src
+
+{{{cindex(property\\\, VISIBILITY)}}}
+
+{{{noindent}}} Furthermore, any entries with a {{{samp(VISIBILITY)}}}
+property (see [[Properties and columns]]) will get their visibility
+adapted accordingly.  Allowed values for this property are ~folded~,
+~children~, ~content~, and ~all~.
+
+#+attr_texinfo: :indic "@asis"
+- {{{kbdspckey(C-u C-u,TAB)}}}, ~org-set-startup-visibility~ :: Switch
+     back to the startup visibility of the buffer, i.e., whatever is
+     requested by startup options and {{{samp(VISIBILITY)}}}
+     properties in individual entries.
+
+** Motion
+   :PROPERTIES:
+   :DESCRIPTION: Jumping to other headlines
+   :END:
+{{{cindex(motion\\\, between headlines)}}}
+{{{cindex(jumping\\\, to headlines)}}}
+{{{cindex(headline navigation)}}}
+The following commands jump to other headlines in the buffer.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+  - {{{kbd(C-c C-n)}}}, ~outline-next-visible-heading~ :: Next heading.
+       {{{kindex(C-c C-n)}}}
+       {{{findex(outline-next-visible-heading)}}}
+  - {{{kbd(C-c C-p)}}}, ~outline-previous-visible-heading~ :: Previous heading.
+       {{{kindex(C-c C-p)}}}
+       {{{findex(outline-previous-visible-heading)}}}
+  - {{{kbd(C-c C-f)}}}, ~org-forward-same-level~ :: Next heading same level.
+       {{{kindex(C-c C-f)}}}
+       {{{findex(org-forward-same-level)}}}
+  - {{{kbd(C-c C-b)}}}, ~org-backward-same-level~ :: Previous heading same level.
+       {{{kindex(C-c C-b)}}}
+       {{{findex(org-backward-same-level)}}}
+  - {{{kbd(C-c C-u)}}}, ~outline-up-heading~ :: Backward to higher level heading.
+       {{{kindex(C-c C-u)}}}
+       {{{findex(outline-up-heading)}}}
+  - {{{kbd(C-c C-j)}}}, ~org-goto~ :: Jump to a different place without
+       changing the current outline visibility.  Shows the document
+       structure in a temporary buffer, where you can use the
+       following keys to find your destination:
+
+       {{{kindex(C-c C-j)}}}
+       {{{findex(org-goto)}}}
+       {{{vindex(org-goto-auto-isearch)}}}
+    - {{{key(TAB)}}} ::  Cycle visibility.
+    - {{{key(down)}}} / {{{key(up)}}} ::   Next/previous visible headline.
+    - {{{key(RET)}}} :: Select this location.
+    - {{{kbd(/)}}} :: Do a Sparse-tree search
+    - Note: The following keys work if you turn off ~org-goto-auto-isearch~
+    - n / p ::  Next/previous visible headline.
+    - f / b ::   Next/previous headline same level.
+    - u  ::  One level up.
+    - 0--9 ::  Digit argument.
+    - q :: Quit.
+
+{{{vindex(org-goto-interface)}}}
+{{{noindent}}} See also the variable ~org-goto-interface~.
+
+** Structure editing
+   :PROPERTIES:
+   :DESCRIPTION: Changing sequence and level of headlines
+   :OPTIONAL_TITLE: Structure editing
+   :END:
+{{{cindex(structure editing)}}}
+{{{cindex(headline\\\, promotion and demotion)}}}
+{{{cindex(promotion\\\, of subtrees)}}}
+{{{cindex(demotion\\\, of subtrees)}}}
+{{{cindex(subtree\\\, cut and paste)}}}
+{{{cindex(pasting\\\, of subtrees)}}}
+{{{cindex(cutting\\\, of subtrees)}}}
+{{{cindex(copying\\\, of subtrees)}}}
+{{{cindex(sorting\\\, of subtrees)}}}
+{{{cindex(subtrees\\\, cut and paste)}}}
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+  - {{{kbdkey(M-,RET)}}}, ~org-insert-heading~ :: Insert new heading
+       with same level as current. If the cursor is in a plain list
+       item, a new item is created (see [[Plain lists]]). To force
+       creation of a new headline, use a prefix argument. When this
+       command is used in the middle of a line, the line is split and
+       the rest of the line becomes the new headline.[fn:11] If the
+       command is used at the beginning of a headline, the new
+       headline is created before the current line. If at the
+       beginning of any other line, the content of that line is made
+       the new heading. If the command is used at the end of a folded
+       subtree (i.e., behind the ellipses at the end of a headline),
+       then a headline like the current one will be inserted after the
+       end of the subtree.
+
+       {{{kindex(M-RET)}}}
+       {{{findex(org-insert-heading)}}}
+       {{{vindex(org-M-RET-may-split-line )}}}
+  - {{{kbdkey(C-,RET)}}}, ~org-insert-heading-respect-content~ :: Just
+       like {{{kbdkey(M-,RET)}}}, except when adding a new heading
+       below the current heading, the new heading is placed after the
+       body instead of before it. This command works from anywhere in
+       the entry.
+
+       {{{kindex(C-RET)}}}
+       {{{findex(org-insert-heading-respect-content)}}}
+  - {{{kbdkey(M-S-,RET)}}}, ~org-insert-todo-heading~ :: Insert new
+       TODO entry with same level as current heading.  See also the
+       variable ~org-treat-insert-todo-heading-as-state-change~.
+
+       {{{kindex(M-S-RET)}}}
+       {{{findex(org-insert-todo-heading)}}}
+       {{{vindex(org-treat-insert-todo-heading-as-state-change)}}}
+  - {{{kbdkey(C-S-,RET)}}}, ~org-insert-todo-heading-respect-content~ :: Insert
+       new TODO entry with same level as current heading. Like
+       {{{kbdkey(C-,RET)}}}, the new headline will be inserted after
+       the current subtree.
+
+       {{{kindex(C-S-RET)}}}
+       {{{findex(org-insert-todo-heading-respect-content)}}}
+  - {{{key(TAB)}}}, ~org-cycle~ :: In a new entry with no text
+       yet, the first {{{key(TAB)}}} demotes the entry to become a
+       child of the previous one. The next {{{key(TAB)}}} makes it a
+       parent, and so on, all the way to top level. Yet another
+       {{{key(TAB)}}}, and you are back to the initial level.
+
+       {{{kindex(@key{TAB})}}}
+       {{{findex(org-cycle)}}}
+  - {{{kbdkey(M-,left)}}}, ~org-do-promote~ :: Promote current heading
+       by one level.
+
+       {{{kindex(M-,left)}}}
+       {{{findex(org-do-promote)}}}
+  - {{{kbdkey(M-,right)}}}, ~org-do-demote~ :: Demote current heading
+       by one level.
+
+       {{{kindex(M-,right)}}}
+       {{{findex(org-do-demote)}}}
+  - {{{kbdkey(M-S-,left)}}}, ~org-promote-subtree~ :: Promote the
+       current subtree by one level.
+
+       {{{kindex(M-S-,left)}}}
+       {{{findex(org-promote-subtree)}}}
+  - {{{kbdkey(M-S-,right)}}}, ~org-demote-subtree~ :: Demote the
+       current subtree by one level.
+
+       {{{kindex(M-S-,right)}}}
+       {{{findex(org-demote-subtree)}}}
+  - {{{kbdkey(M-S-,up)}}}, ~org-move-subtree-up~ :: Move subtree up
+       (swap with previous subtree of same level).
+
+       {{{kindex(M-S-,up)}}}
+       {{{findex(org-move-subtree-up)}}}
+  - {{{kbdkey(M-S-,down)}}}, ~org-move-subtree-down~ :: Move subtree
+       down (swap with next subtree of same level).
+
+       {{{kindex(M-S-,down)}}}
+       {{{findex(org-move-subtree-down)}}}
+  - {{{kbd(C-c C-x C-w)}}}, ~org-cut-subtree~ :: Kill subtree, i.e.,
+       remove it from buffer but save in kill ring. With a numeric
+       prefix argument N, kill N sequential subtrees.
+
+       {{{kindex(C-c C-x C-w)}}}
+       {{{findex(org-cut-subtree)}}}
+  - {{{kbd(C-c C-x M-w)}}}, ~org-copy-subtree~ :: Copy subtree to kill
+       ring.  With a numeric prefix argument N, copy the N sequential
+       subtrees.
+
+       {{{kindex(C-c C-x M-w)}}}
+       {{{findex(org-copy-subtree)}}}
+  - {{{kbd(C-c C-x C-y)}}}, ~org-paste-subtree~ :: Yank subtree from
+       kill ring. This does modify the level of the subtree to make
+       sure the tree fits in nicely at the yank position. The yank
+       level can also be specified with a numeric prefix argument, or
+       by yanking after a headline marker like {{{samp(****)}}}.
+
+       {{{kindex(C-c C-x C-y)}}}
+       {{{findex(org-paste-subtree)}}}
+  - {{{kbd(C-y)}}}, ~org-yank~ :: Depending on the variables
+       ~org-yank-adjusted-subtrees~ and ~org-yank-folded-subtrees~,
+       Org's internal ~yank~ command will paste subtrees folded and in
+       a clever way, using the same command as {{{kbd(C-c C-x C-y)}}}.
+       With the default settings, no level adjustment will take place,
+       but the yanked tree will be folded unless doing so would
+       swallow text previously visible.  Any prefix argument to this
+       command will force a normal ~yank~ to be executed, with the
+       prefix passed along.  A good way to force a normal yank is
+       {{{kbd(C-u C-y)}}}.  If you use ~yank-pop~ after a yank, it
+       will yank previous kill items plainly, without adjustment and
+       folding.
+
+       {{{kindex(C-y)}}}
+       {{{findex(org-yank)}}}
+       {{{vindex(org-yank-adjusted-subtrees)}}}
+       {{{vindex(org-yank-folded-subtrees)}}} 
+  - {{{kbd(C-c C-x c)}}}, ~org-clone-subtree-with-time-shift~ :: Clone
+       a subtree by making a number of sibling copies of it. You will
+       be prompted for the number of copies to make, and you can also
+       specify if any timestamps in the entry should be shifted.  This
+       can be useful, for example, to create a number of tasks related
+       to a series of lectures to prepare. For more details, see the
+       docstring of the command ~org-clone-subtree-with-time-shift~.
+
+       {{{kindex(C-c C-x c)}}}
+       {{{findex(org-clone-subtree-with-time-shift)}}}
+  - {{{kbd(C-c C-w)}}}, ~org-refile~ :: Refile entry or region to a
+       different location. See [[Refile and copy]].
+
+       {{{kindex(C-c C-w)}}}
+       {{{findex(org-refile)}}}
+  - {{{kbd(C-c ^)}}}, ~org-sort~ :: Sort same-level entries.  When
+       there is an active region, all entries in the region will be
+       sorted.  Otherwise the children of the current headline are
+       sorted.  The command prompts for the sorting method, which can
+       be alphabetically, numerically, by time (first timestamp with
+       active preferred, creation time, scheduled time, deadline
+       time), by priority, by TODO keyword (in the sequence the
+       keywords have been defined in the setup) or by the value of a
+       property.  Reverse sorting is possible as well.  You can also
+       supply your own function to extract the sorting key.  With a
+       {{{kbd(C-u)}}} prefix, sorting will be case-sensitive.
+
+       {{{kindex(C-c ^)}}}
+       {{{findex(org-sort)}}}
+  - {{{kbd(C-x n s)}}}, ~org-narrow-to-subtree~ :: Narrow buffer to
+       current subtree.
+
+       {{{kindex(C-x n s)}}}
+       {{{findex(org-narrow-to-subtree)}}}
+  - {{{kbd(C-x n b)}}}, ~org-narrow-to-block~ :: Narrow buffer to
+       current block.
+
+       {{{kindex(C-x n b)}}}
+       {{{findex(org-narrow-to-block)}}}
+  - {{{kbd(C-x n w)}}}, ~widen~ :: Widen buffer to remove narrowing.
+
+       {{{kindex(C-x n w)}}}
+       {{{findex(widen)}}}
+  - {{{kbd(C-c *)}}}, ~org-toggle-heading~ :: Turn a normal line or
+       plain list item into a headline (so that it becomes a
+       subheading at its location). Also turn a headline into a normal
+       line by removing the stars. If there is an active region, turn
+       all lines in the region into headlines. If the first line in
+       the region was an item, turn only the item lines into
+       headlines. Finally, if the first line is a headline, remove the
+       stars from all headlines in the region.
+
+       {{{kindex(C-c *)}}}
+       {{{findex(org-toggle-heading)}}}
+
+{{{cindex(region\\\, active)}}} 
+{{{cindex(active region)}}}
+{{{cindex(transient mark mode)}}} 
+
+When there is an active region (Transient Mark mode), promotion and
+demotion work on all headlines in the region.  To select a region of
+headlines, it is best to place both point and mark at the beginning of
+a line, mark at the beginning of the first headline, and point at the
+line just after the last headline to change.  Note that when the
+cursor is inside a table (see [[Tables]]), the Meta-Cursor keys have
+different functionality.
+
+** Sparse trees
+   :PROPERTIES:
+   :DESCRIPTION: Matches embedded in context
+   :OPTIONAL_TITLE: Sparse trees
+   :END:
+{{{cindex(sparse trees)}}}
+{{{cindex(trees\\\, sparse)}}}
+{{{cindex(folding\\\, sparse trees)}}}
+{{{cindex(occur\\\, command)}}}
+{{{vindex(org-show-hierarchy-above)}}}
+{{{vindex(org-show-following-heading)}}}
+{{{vindex(org-show-siblings)}}}
+{{{vindex(org-show-entry-below)}}}
+
+An important feature of Org mode is the ability to construct /sparse
+trees/ for selected information in an outline tree, so that the entire
+document is folded as much as possible, but the selected information
+is made visible along with the headline structure above it.[fn:12]
+Just try it out and you will see immediately how it works.
+
+Org mode contains several commands creating such trees, all these
+commands can be accessed through a dispatcher:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+  - {{{kbd(C-c /)}}}, ~org-sparse-tree~ :: This prompts for an extra
+       key to select a sparse-tree creating command.
+
+       {{{kindex(C-c /)}}}
+       {{{findex(org-sparse-tree)}}}
+  - {{{kbd(C-c / r)}}}, ~org-occur~ :: Prompts for a regexp and shows a
+       sparse tree with all matches. If the match is in a headline,
+       the headline is made visible. If the match is in the body of an
+       entry, headline and body are made visible. In order to provide
+       minimal context, also the full hierarchy of headlines above the
+       match is shown, as well as the headline following the
+       match. Each match is also highlighted; the highlights disappear
+       when the buffer is changed by an editing command, or by
+       pressing {{{kbd(C-c C-c)}}}.[fn:13] When called with a {{{kbd(C-u)}}}
+       prefix argument, previous highlights are kept, so several calls
+       to this command can be stacked.
+
+       {{{kindex(C-c / r)}}}
+       {{{findex(org-occur)}}}
+       {{{vindex(org-remove-highlights-with-change)}}}
+  - {{{kbd(M-g n)}}}, ~next-error~ ::
+       @@info:@itemx@@ {{{kbd(M-g M-n)}}}
+       
+       Jump to the next sparse tree match in this buffer.
+
+       {{{kindex(M-g n)}}}
+       {{{kindex(M-g M-n)}}}
+       {{{findex(next-error)}}}
+  - {{{kbd(M-g p)}}}, ~previous-error~ ::
+       @@info:@itemx@@ {{{kbd(M-g M-p)}}}
+
+       Jump to the previous sparse tree match in this buffer.
+
+       {{{kindex(M-g p)}}}
+       {{{kindex(M-g M-p)}}}
+       {{{findex(previous-error)}}}
+{{{vindex(org-agenda-custom-commands)}}} 
+
+{{{noindent}}} For frequently used sparse trees of specific search
+strings, you can use the variable ~org-agenda-custom-commands~ to
+define fast keyboard access to specific sparse trees. These commands
+will then be accessible through the agenda dispatcher
+(see [[Agenda dispatcher]]). For example:
+
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+  (setq org-agenda-custom-commands
+        '(("f" occur-tree "FIXME")))
+#+end_src
+
+{{{noindent}}} will define the key {{{kbd(C-c a f)}}} as a
+shortcut for creating a sparse tree matching the string
+{{{samp(FIXME)}}}.
+
+The other sparse tree commands select headings based on TODO keywords,
+tags, or properties and will be discussed later in this manual.
+
+{{{kindex(C-c C-e v)}}}
+{{{cindex(printing sparse trees)}}}
+{{{cindex(visible text\\\, printing )}}}
+
+To print a sparse tree, you can use the Emacs command
+~ps-print-buffer-with-faces~ which does not print
+invisible parts of the document.[fn:14] Or you can use the command
+{{{kbd(C-c C-e v)}}} to export only the visible part of the
+document and print the resulting file.
+
+** Plain lists
+   :PROPERTIES:
+   :DESCRIPTION: Additional structure within an entry
+   :OPTIONAL_TITLE: Plain lists
+   :END:
+{{{cindex(plain lists)}}}
+{{{cindex(lists\\\, plain)}}}
+{{{cindex(lists\\\, ordered)}}}
+{{{cindex(ordered lists)}}}
+
+Within an entry of the outline tree, hand-formatted lists can provide
+additional structure. They also provide a way to create lists of
+checkboxes (see [[Checkboxes]]). Org supports editing
+such lists, and every exporter (see [[Exporting]])
+can parse and format them.
+
+Org knows ordered lists, unordered lists, and description lists.
+
+#+attr_texinfo: :table-type "table" :indic "@bullet"
+  - /Unordered/ list items start with ~-~, ~+~, or ~*~ as bullets.[fn:15]
+
+  - /Ordered/ list items start with a numeral followed by either a
+    period or a right parenthesis,[fn:16] such as
+    ~1.~ or ~1~.[fn:170] If you want a list to
+    start with a different value (e.g., 20), start the text of the
+    item with ~[@20]~.[fn:17] Those constructs can be used
+    in any item of the list in order to enforce a particular
+    numbering.
+    {{{vindex(org-plain-list-ordered-item-terminator)}}}
+    {{{vindex(org-alphabetical-lists)}}}
+
+  - /Description/ list items are unordered list items, and contain the
+    separator {{{samp( :: )}}} to distinguish the description
+    /term/ from the description.
+
+
+Items belonging to the same list must have the same indentation on the
+first line. In particular, if an ordered list reaches number
+{{{samp(10.)}}}, then the 2--digit numbers must be written
+left-aligned with the other numbers in the list. An item ends before
+the next line that is less or equally indented than its bullet/number.
+
+{{{vindex(org-empty-line-terminates-plain-lists)}}}
+A list ends whenever every item has ended, which means before any line less
+or equally indented than items at top level.  It also ends before two blank
+lines.[fn:171]  In that case, all items are closed.  Here is an example:
+
+#+begin_src texinfo
+  ,** 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:
+     - @b{Elijah Wood} :: He plays Frodo
+     - @b{Sean Austin} :: He plays Sam, Frodo's friend.  I still remember
+       him very well from his role as Mikey Walsh in @i{The Goonies}.
+#+end_src
+
+Org supports these lists by tuning filling and wrapping commands to
+deal with them correctly.[fn:18] To turn this on, put into
+{{{file(.emacs)}}}: ~(require 'filladapt)~}, and by exporting them
+properly (see [[Exporting]]). Since indentation is
+what governs the structure of these lists, many structural constructs
+like ~#+BEGIN_ ...~ blocks can be indented to signal that they belong
+to a particular item.
+
+{{{vindex(org-list-demote-modify-bullet)}}}
+{{{vindex(org-list-indent-offset)}}}
+If you find that using a different bullet for a sub-list (than that used for
+the current list-level) improves readability, customize the variable
+~org-list-demote-modify-bullet~.  To get a greater difference of
+indentation between items and theirs sub-items, customize
+~org-list-indent-offset~.
+
+{{{vindex(org-list-automatic-rules)}}}
+The following commands act on items when the cursor is in the first line of
+an item (the line with the bullet or number).  Some of them imply the
+application of automatic rules to keep list structure intact.  If some of
+these actions get in your way, configure ~org-list-automatic-rules~
+to disable them individually.
+
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+  - {{{key(TAB)}}}, ~org-cycle~ :: 
+    {{{cindex(cycling\\\, in plain lists)}}}
+    {{{kindex(TAB)}}}
+    {{{findex(org-cycle)}}}
+    {{{vindex(org-cycle-include-plain-lists)}}}       
+
+    Items can be folded just like headline levels. Normally this
+    works only if the cursor is on a plain list item. For more
+    details, see the variable ~org-cycle-include-plain-lists~. If
+    this variable is set to ~integrate~, plain list items will be
+    treated like low-level headlines. The level of an item is then
+    given by the indentation of the bullet/number. Items are always
+    subordinate to real headlines, however; the hierarchies remain
+    completely separated. In a new item with no text yet, the first
+    {{{key(TAB)}}} demotes the item to become a child of the
+    previous one. Subsequent {{{key(TAB)}}}s move the item to
+    meaningful levels in the list and eventually get it back to its
+    initial position.
+
+  - {{{kbdkey(M-,RET)}}}, ~org-insert-heading~ :: 
+    {{{kindex(M-RET)}}}
+    {{{findex(org-insert-heading)}}}
+    {{{vindex(org-M-RET-may-split-line)}}}
+    {{{vindex(org-list-automatic-rules)}}}
+
+    Insert new item at current level. With a prefix argument, force
+    a new heading (see [[Structure editing]]). If this command is used
+    in the middle of an item, that item is /split/ in two, and the
+    second part becomes the new item.[fn:19] If this command is
+    executed /before item's body/, the new item is created /before/
+    the current one.
+
+  - {{{kbdkey(M-S-,RET)}}} :: 
+    {{{kindex(M-S-RET)}}}
+
+    Insert a new item with a checkbox (see [[Checkboxes]]).
+  
+  - {{{kbdkey(S-,up)}}} :: 
+    @@info:@itemx@@ {{{kbdkey(S-,down)}}}
+
+       Jump to the previous/next item in the current list, but
+       only if ~org-support-shift-select~ is off.[fn:20]  If not, you can
+       still use paragraph jumping commands like {{{kbdkey(C-,up)}}}
+       and {{{kbdkey(C-,down)}}} to quite similar effect.
+       
+       {{{kindex(S-up)}}}
+       {{{kindex(S-down)}}}
+       {{{cindex(shift-selection-mode)}}}
+       {{{vindex(org-support-shift-select)}}}
+       {{{vindex(org-list-use-circular-motion)}}}
+  - {{{kbdkey(M-,up)}}} ::
+       @@info:@itemx@@ {{{kbdkey(M-,down)}}}
+
+       Move the item including subitems up/down (swap with
+       previous/next item of same indentation).[fn:21]  If the list is
+       ordered, renumbering is automatic.
+
+       {{{kindex(M-up)}}}
+       {{{kindex(M-down)}}}
+  - {{{kbdkey(M-,left)}}} :: 
+       @@info:@itemx@@ {{{kbdkey(M-,right)}}}
+
+       Decrease/increase the indentation of an item, leaving children
+       alone.
+
+       {{{kindex(M-left)}}}
+       {{{kindex(M-right)}}}
+  - {{{kbdkey(M-S-,left)}}} :: 
+       @@info:@itemx@@ {{{kbdkey(M-S-,right)}}}
+
+       Decrease/increase the indentation of the item, including
+       subitems.  Initially, the item tree is selected based on
+       current indentation.  When these commands are executed several
+       times in direct succession, the initially selected region is
+       used, even if the new indentation would imply a different
+       hierarchy.  To use the new hierarchy, break the command chain
+       with a cursor motion or so.
+
+       {{{kindex(M-S-left)}}}
+       {{{kindex(M-S-right)}}}
+
+       As a special case, using this command on the very first item of
+       a list will move the whole list.  This behavior can be disabled
+       by configuring ~org-list-automatic-rules~.  The global
+       indentation of a list has no influence on the text /after/ the
+       list.
+  - {{{kbd(C-c C-c)}}} :: If there is a checkbox (see [[Checkboxes]]) in
+       the item line, toggle the state of the checkbox.  In any case,
+       verify bullets and indentation consistency in the whole list.
+
+       {{{kindex(C-c C-c)}}}
+  - {{{kbd(C-c -)}}} :: Cycle the entire list level through the
+       different itemize/enumerate bullets ({{{samp(-)}}},
+       {{{samp(+)}}}, {{{samp(*)}}}, {{{samp(1.)}}}, {{{samp(1))}}})
+       or a subset of them, depending on
+       ~org-plain-list-ordered-item-terminator~, the type of list, and
+       its indentation.  With a numeric prefix argument N, select the
+       Nth bullet from this list.  If there is an active region when
+       calling this, selected text will be changed into an item.  With
+       a prefix argument, all lines will be converted to list items.
+       If the first line already was a list item, any item marker will
+       be removed from the list.  Finally, even without an active
+       region, a normal line will be converted into a list item.
+
+       {{{kindex(C-c -)}}}
+       {{{vindex(org-plain-list-ordered-item-terminator)}}}
+  - {{{kbd(C-c *)}}} :: Turn a plain list item into a headline (so
+       that it becomes a subheading at its location). See
+       [[Structure editing]], for a detailed explanation.
+
+       {{{kindex(C-c *)}}}
+  - {{{kbd(C-c C-*)}}} :: Turn the whole plain list into a subtree of
+       the current heading.  Checkboxes (see [[Checkboxes]]) will become
+       TODO (resp. DONE) keywords when unchecked (resp. checked).
+
+       {{{kindex(C-c C-*)}}}
+  - {{{kbd(S-left/right)}}} :: This command also cycles bullet styles
+       when the cursor in on the bullet or anywhere in an item line,
+       details depending on ~org-support-shift-select~.
+
+       {{{vindex(org-support-shift-select)}}}
+       {{{kindex(S-left)}}}
+       {{{kindex(S-right)}}}
+  - {{{kbd(C-c ^)}}} :: Sort the plain list.  You will be prompted for
+       the sorting method: numerically, alphabetically, by time, or by
+       custom function.
+
+       {{{kindex(C-c ^)}}}
+
+** Drawers
+   :PROPERTIES:
+   :DESCRIPTION: Tucking stuff away
+   :END:
+{{{cindex(drawers)}}}
+{{{cindex(#+DRAWERS)}}}
+{{{cindex(visibility cycling\\\, drawers)}}}
+
+{{{vindex(org-drawers)}}}
+{{{cindex(org-insert-drawer)}}}
+{{{kindex(C-c C-x d)}}}
+Sometimes you want to keep information associated with an entry, but you
+normally don't want to see it.  For this, Org mode has /drawers/.
+Drawers need to be configured with the variable
+~org-drawers~.[fn:172] Drawers
+look like this:
+
+#+begin_src org
+  ,** This is a headline
+     Still outside the drawer
+     :DRAWERNAME:
+     This is inside the drawer.
+     :END:
+     After the drawer.
+#+end_src
+
+
+You can interactively insert drawers at point by calling
+~org-insert-drawer~, which is bound to {{{kbd(C-c C-x d)}}}.
+With an active region, this command will put the region inside the
+drawer. With a prefix argument, this command calls
+~org-insert-property-drawer~ and add a property drawer right
+below the current headline. Completion over drawer keywords is also
+possible using {{{key(M-TAB)}}}.
+
+Visibility cycling (see [[Visibility cycling]]) on the headline
+will hide and show the entry, but keep the drawer collapsed to a
+single line. In order to look inside the drawer, you need to move the
+cursor to the drawer line and press {{{key(TAB)}}} there. Org mode
+uses the ~PROPERTIES~ drawer for storing properties
+(see [[Properties and columns]]), and you can also arrange for
+state change notes (see [[Tracking TODO state changes]) and
+clock times (see [[Clocking work time]) to be stored in a drawer
+~LOGBOOK~. If you want to store a quick note in the LOGBOOK
+drawer, in a similar way to state changes, use
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+ - {{{kbd(C-c C-z)}}} :: Add a time-stamped note to the LOGBOOK
+      drawer.
+
+      {{{kindex(C-c C-z)}}}
+
+** Blocks
+   :PROPERTIES:
+   :DESCRIPTION: Folding blocks
+   :END:
+{{{vindex(org-hide-block-startup)}}} 
+{{{cindex(blocks\\\, folding)}}}
+
+Org mode uses ~begin~ ... ~end~ blocks for various purposes from including
+source code examples (see [[Literal examples]]) to capturing time logging
+information (see [[Clocking work time]]).  These blocks can be folded
+and unfolded by pressing TAB in the begin line.  You can also get all
+blocks folded at startup by configuring the variable
+~org-hide-block-startup~ or on a per-file basis by using
+
+{{{cindex(@code{hideblocks}\\\, STARTUP keyword)}}}
+{{{cindex(@code{nohideblocks}\\\, STARTUP keyword)}}}
+#+begin_src org
+  ,#+STARTUP: hideblocks
+  ,#+STARTUP: nohideblocks
+#+end_src
+
+** Creating footnotes
+   :PROPERTIES:
+   :DESCRIPTION: Define footnotes in Org syntax
+   :END:
+{{{cindex(footnotes)}}}
+
+Org mode supports the creation of footnotes. In contrast to the
+{{{file(footnote.el)}}} package, Org mode's footnotes are designed for
+work on a larger document, not only for one-off documents like emails.
+The basic syntax is similar to the one used by
+{{{file(footnote.el)}}}, i.e., a footnote is defined in a paragraph
+that is started by a footnote marker in square brackets in column 0,
+no indentation allowed. If you need a paragraph break inside a
+footnote, use the LaTeX idiom ~\par~. The footnote reference is simply
+the marker in square brackets, inside text. For example:
+
+#+begin_example
+   The Org homepage[fn:1] now looks a lot better than it used to.
+   ...
+   [fn:1] The link is: http://orgmode.org
+#+end_example
+
+Org mode extends the number-based syntax to /named/ footnotes and
+optional inline definition. Using plain numbers as markers (as
+{{{file(footnote.el)}}} does) is supported for backward compatibility,
+but not encouraged because of possible conflicts with LaTeX
+snippets (see [[Embedded LaTeX]]). Here are
+the valid references:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+  - ~[1]~ :: A plain numeric footnote marker. Compatible with
+           {{{file(footnote.el)}}}, but not recommended because
+           something like ~[1]~ could easily be part of a
+           code snippet.
+
+  - ~[fn:name]~ :: A named footnote reference, where ~name~ is
+                 a unique label word, or, for simplicity of automatic
+                 creation, a number.
+  - ~[fn:: This is the inline definition of this footnote]~ :: A
+       LaTeX-like anonymous footnote where the definition
+       is given directly at the reference point.
+  - ~[fn:name: a definition]~ :: An inline definition of a footnote,
+       which also specifies a name for the note. Since Org allows
+       multiple references to the same note, you can then use
+       ~[fn:name]~ to create additional references.
+
+
+{{{vindex(org-footnote-auto-label)}}}
+Footnote labels can be created automatically, or you can create names
+yourself. This is handled by the variable
+~org-footnote-auto-label~ and its corresponding
+~#+STARTUP~ keywords. See the docstring of that variable for
+details.
+
+{{{noindent}}} The following command handles footnotes:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+  - {{{kbd(C-c C-x f)}}} :: The footnote action command.
+                 {{{kindex(C-c C-x f)}}}
+
+                 When the cursor is on a footnote reference, jump to the
+                 definition.  When it is at a definition, jump to the
+                 (first) reference.
+
+                 {{{vindex(org-footnote-define-inline)}}}
+                 {{{vindex(org-footnote-section)}}}
+                 {{{vindex(org-footnote-auto-adjust)}}}
+
+                 Otherwise, create a new footnote.  Depending on the
+                 variable ~org-footnote-define-inline~, the
+                 definition will be placed right into the text as part
+                 of the reference, or separately into the location
+                 determined by the variable ~org-footnote-section~.[fn:173]
+
+                 When this command is called with a prefix argument, a
+                 menu of additional options is offered:
+
+    - {{{kbd(s)}}} ::  Sort the footnote definitions by reference sequence.
+            During editing, Org makes no effort to sort footnote
+            definitions into a particular sequence.  If you want them
+            sorted, use this command, which will also move entries
+            according to ~org-footnote-section~.  Automatic sorting
+            after each insertion/deletion can be configured using the
+            variable ~org-footnote-auto-adjust~.
+    - {{{kbd(r)}}} ::  Renumber the simple ~fn:N~ footnotes.  Automatic
+            renumbering after each insertion/deletion can be
+            configured using the variable ~org-footnote-auto-adjust~.
+    - {{{kbd(S)}}} ::  Short for first ~r~, then ~s~ action.
+    - {{{kbd(n)}}} ::  Normalize the footnotes by collecting all definitions
+            (including inline definitions) into a special section, and
+            then numbering them in sequence.  The references will then
+            also be numbers.  This is meant to be the final step
+            before finishing a document (e.g., sending off an email).
+            The exporters do this automatically, and so could
+            something like ~message-send-hook~.
+    - {{{kbd(d)}}} ::  Delete the footnote at point, and all definitions of and
+            references to it.
+
+    Depending on the variable ~org-footnote-auto-adjust~, renumbering
+       and sorting footnotes can be automatic after each insertion or
+       deletion.[fn:174]
+
+  - {{{kbd(C-c C-c)}}} :: If the cursor is on a footnote reference, jump to the
+               definition.  If it is a the definition, jump back to
+               the reference.  When called at a footnote location with
+               a prefix argument, offer the same menu as {{{kbd(C-c C-x f)}}}.
+
+    {{{kindex(C-c C-c)}}}
+
+  - {{{kbd(C-c C-o)}}} or {{{kbd(mouse-1/2)}}} :: Footnote labels are also
+       links to the corresponding definition/reference, and you can
+       use the usual commands to follow these links.
+
+    {{{kindex(C-c C-o)}}}
+    {{{kindex(mouse-1)}}}
+    {{{kindex(mouse-2)}}}
+
+** Orgstruct mode 
+   :PROPERTIES:
+   :DESCRIPTION: Structure editing outside Org
+   :OPTIONAL_TITLE: Orgstruct mode
+   :END:
+{{{cindex(Orgstruct mode)}}}
+{{{cindex(minor mode for structure editing)}}}
+
+If you like the intuitive way the Org mode structure editing and list
+formatting works, you might want to use these commands in other modes
+like Text mode or Mail mode as well.  The minor mode ~orgstruct-mode~
+makes this possible.  Toggle the mode with {{{kbd(M-x orgstruct-mode)}}}, or turn it on by default, for example in Message
+mode, with one of:
+
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+  (add-hook 'message-mode-hook 'turn-on-orgstruct)
+  (add-hook 'message-mode-hook 'turn-on-orgstruct++)
+#+end_src
+
+When this mode is active and the cursor is on a line that looks to Org
+like a headline or the first line of a list item, most structure
+editing commands will work, even if the same keys normally have
+different functionality in the major mode you are using.  If the
+cursor is not in one of those special lines, Orgstruct mode lurks
+silently in the shadows.  When you use ~orgstruct++-mode~, Org will
+also export indentation and autofill settings into that mode, and
+detect item context after the first line of an item.
+
+* Tables
+  :PROPERTIES:
+  :DESCRIPTION: Pure magic for quick formatting
+  :END:
+{{{cindex(tables)}}}
+{{{cindex(editing tables)}}}
+
+Org comes with a fast and intuitive table editor.  Spreadsheet-like
+calculations are supported using the Emacs {{{file(calc)}}} package
+([[info:calc]]).
+
+** Built-in table editor 
+   :PROPERTIES:
+   :DESCRIPTION: Simple tables
+   :END:
+{{{cindex(table editor\\\, built-in)}}}
+
+Org makes it easy to format tables in plain ASCII. Any line with
+{{{samp(|)}}} as the first non-whitespace character is considered part
+of a table. {{{samp(|)}}} is also the column separator.[fn:22] A table
+might look like this:
+
+#+begin_src org
+  | Name  | Phone | Age |
+  |-------+-------+-----|
+  | Peter |  1234 |  17 |
+  | Anna  |  4321 |  25 |
+#+end_src
+
+
+A table is re-aligned automatically each time you press {{{key(TAB)}}}
+or {{{key(RET)}}} or {{{kbd(C-c C-c)}}} inside the table.
+{{{key(TAB)}}} also moves to the next field ({{{key(RET)}}} to the
+next row) and creates new table rows at the end of the table or before
+horizontal lines. The indentation of the table is set by the first
+line. Any line starting with {{{samp(|-)}}} is considered as a
+horizontal separator line and will be expanded on the next re-align to
+span the whole table width. So, to create the above table, you would
+only type
+
+#+begin_src org
+  |Name|Phone|Age|
+  |-
+#+end_src
+
+
+{{{noindent}}} and then press {{{key(TAB)}}} to align the table and
+start filling in fields. Even faster would be to type
+~|Name|Phone|Age~ followed by {{{kbdspckey(C-c,RET)}}}.
+
+{{{vindex(org-enable-table-editor)}}}
+{{{vindex(org-table-auto-blank-field)}}} 
+
+When typing text into a field, Org treats {{{key(DEL)}}},
+{{{key(Backspace)}}}, and all character keys in a special way, so that
+inserting and deleting avoids shifting other fields.  Also, when
+typing /immediately/ after the cursor was moved into a new field with
+{{{key(TAB)}}}, {{{kbdkey(S-,TAB)}}} or {{{key(RET)}}}, the field is
+automatically made blank.  If this behavior is too unpredictable for
+you, configure the variables ~org-enable-table-editor~ and
+~org-table-auto-blank-field~.
+*** Creation and conversion
+    :PROPERTIES:
+    :DESCRIPTION: Creating tabular data in Org
+    :END:
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c |)}}}, ~org-table-create-or-convert-from-region~ :: Convert
+     the active region to table. If every line contains at least one
+     {{{key(TAB)}}} character, the function assumes that the material
+     is tab separated. If every line contains a comma, comma-separated
+     values (CSV) are assumed. If not, lines are split at whitespace
+     into fields. You can use a prefix argument to force a specific
+     separator: {{{kbd(C-u)}}} forces CSV, {{{kbd(C-u C-u)}}} forces
+     {{{key(TAB)}}}, and a numeric argument ~N~ indicates that at
+     least N consecutive spaces, or alternatively a {{{key(TAB)}}}
+     will be the separator. If there is no active region, this command
+     creates an empty Org table. But it is easier just to start
+     typing, like {{{kbdspckey(|Name|Phone|Age,RET)}}} {{{kbdkey(|-
+     ,TAB)}}}.
+
+     {{{kindex(C-c |)}}}
+     {{{findex(org-table-create-or-convert-from-region)}}}
+
+*** Re-aligning and field motion
+    :PROPERTIES:
+    :DESCRIPTION: Navigating and tidying
+    :END:
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-c)}}}, ~org-table-align~ :: Re-align the table without
+     moving the cursor.
+
+     {{{kindex(C-c C-c)}}}
+     {{{findex(org-table-align)}}}
+- {{{kbd(<TAB>)}}}, ~org-table-next-field~ :: Re-align the table, move
+     to the next field.  Creates a new row if necessary.
+
+     {{{kindex(<TAB>)}}}
+     {{{findex(org-table-next-field)}}}
+- {{{kbdkey(S-,TAB)}}}, ~org-table-previous-field~ :: Re-align, move to
+     previous field.
+
+     {{{kindex(S-TAB)}}}
+     {{{findex(org-table-previous-field)}}}
+- {{{key(RET)}}}, ~org-table-next-row~ :: Re-align the table and move
+     down to next row.  Creates a new row if necessary.  At the
+     beginning or end of a line, {{{key(RET)}}} still does NEWLINE, so
+     it can be used to split a table.
+
+     {{{kindex(RET)}}}
+     {{{findex(org-table-next-row)}}}
+- {{{kbd(M-a)}}}, ~org-table-beginning-of-field~ :: Move to beginning
+     of the current table field, or on to the previous field.
+
+     {{{kindex(M-a)}}}
+     {{{findex(org-table-beginning-of-field)}}}
+- {{{kbd(M-e)}}}, ~org-table-end-of-field~ :: Move to end of the
+     current table field, or on to the next field.
+
+     {{{kindex(M-e)}}}
+     {{{findex(org-table-end-of-field)}}}
+
+*** Column and row editing
+    :PROPERTIES:
+    :DESCRIPTION: Insert, kill, or move
+    :END:
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbdkey(M-,left)}}}, ~org-table-move-column-left~ ::
+  {{{kindex(M-left)}}}
+  {{{findex(org-table-move-column-left)}}}
+     
+  Move the current column left.
+
+- {{{kbdkey(M-,right)}}}, ~org-table-move-column-right~ ::
+  {{{kindex(M-right)}}}
+  {{{findex(org-table-move-column-right)}}}
+
+  Move the current column right.
+
+- {{{kbdkey(M-S-,left)}}}, ~org-table-delete-column~ :: 
+  {{{kindex(M-S-left)}}}
+  {{{findex(org-table-delete-column)}}}
+
+  Kill the current column.
+
+- {{{kbdkey(M-S-,right)}}}, ~org-table-insert-column~ :: 
+  {{{kindex(M-S-right)}}}
+  {{{findex(org-table-insert-column)}}}
+
+  Insert a new column to the left of the cursor position.
+
+- {{{kbdkey(M-,up)}}}, ~org-table-move-row-up~ ::
+  {{{kindex(M-up)}}}
+  {{{findex(org-table-move-row-up)}}}
+
+  Move the current row up.
+
+- {{{kbdkey(M-,down)}}}, ~org-table-move-row-down~
+  {{{kindex(M-down)}}}
+  {{{findex(org-table-move-row-down)}}}
+     
+  Move the current row down.
+
+- {{{kbdkey(M-S-,up)}}}, ~org-table-kill-row~ :: Kill the current row
+     or horizontal line.
+
+     {{{kindex(M-S-up)}}}
+     {{{findex(org-table-kill-row)}}}
+
+- {{{kbdkey(M-S-,down)}}}, ~org-table-insert-row~ :: Insert a new row
+     above the current row.  With a prefix argument, the line is
+     created below the current one.
+
+     {{{kindex(M-S-down)}}}
+     {{{findex(org-table-insert-row)}}}
+
+- {{{kbd(C-c -)}}}, ~org-table-insert-hline~ :: Insert a horizontal
+     line below current row.  With a prefix argument, the line is
+     created above the current line.
+
+     {{{kindex(C-c -)}}}
+     {{{findex(org-table-insert-hline)}}}
+
+- {{{kbdspckey(C-c,RET)}}}, ~org-table-hline-and-move~ :: Insert a
+     horizontal line below current row, and move the cursor into the
+     row below that line.
+
+     {{{kindex(C-c RET)}}}
+     {{{findex(org-table-hline-and-move)}}}
+
+- {{{kbd(C-c ^)}}}, ~org-table-sort-lines~ :: Sort the table lines in
+     the region.  The position of point indicates the column to be
+     used for sorting, and the range of lines is the range between the
+     nearest horizontal separator lines, or the entire table.  If
+     point is before the first column, you will be prompted for the
+     sorting column.  If there is an active region, the mark specifies
+     the first line and the sorting column, while point should be in
+     the last line to be included into the sorting.  The command
+     prompts for the sorting type (alphabetically, numerically, or by
+     time).  When called with a prefix argument, alphabetic sorting
+     will be case-sensitive.
+
+     {{{kindex(C-c ^)}}}
+     {{{findex(org-table-sort-lines)}}}
+*** Regions
+    :PROPERTIES:
+    :DESCRIPTION: Manipulate parts of a table
+    :END:
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-x M-w)}}}, ~org-table-copy-region~ :: Copy a rectangular
+     region from a table to a special clipboard.  Point and mark
+     determine edge fields of the rectangle.  If there is no active
+     region, copy just the current field.  The process ignores
+     horizontal separator lines.
+
+     {{{kindex(C-c C-x M-w)}}}
+     {{{findex(org-table-copy-region)}}}
+- {{{kbd(C-c C-x C-w)}}}, ~org-table-cut-region~ :: Copy a rectangular
+     region from a table to a special clipboard, and blank all fields
+     in the rectangle.  So this is the ``cut'' operation.
+
+     {{{kindex(C-c C-x C-w)}}}
+     {{{findex(org-table-cut-region)}}}
+- {{{kbd(C-c C-x C-y)}}}, ~org-table-paste-rectangle~ :: Paste a
+     rectangular region into a table.  The upper left corner ends up
+     in the current field.  All involved fields will be overwritten.
+     If the rectangle does not fit into the present table, the table
+     is enlarged as needed.  The process ignores horizontal separator
+     lines.
+
+     {{{kindex(C-c C-x C-y)}}}
+     {{{findex(org-table-paste-rectangle)}}}
+- {{{kbdkey(M-,RET)}}}, ~org-table-wrap-region~ :: Split the current
+     field at the cursor position and move the rest to the line below.
+     If there is an active region, and both point and mark are in the
+     same column, the text in the column is wrapped to minimum width
+     for the given number of lines.  A numeric prefix argument may be
+     used to change the number of desired lines.  If there is no
+     region, but you specify a prefix argument, the current field is
+     made blank, and the content is appended to the field above.
+
+     {{{kindex(M-RET)}}}
+     {{{findex(org-table-wrap-region)}}}
+*** Calculations
+    :PROPERTIES:
+    :DESCRIPTION: Sum and copy
+    :END:
+{{{cindex(formula\\\, in tables)}}}
+{{{cindex(calculations\\\, in tables)}}}
+{{{cindex(region\\\, active)}}}
+{{{cindex(active region)}}}
+{{{cindex(transient mark mode)}}}
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c +)}}}, ~org-table-sum~ :: Sum the numbers in the current
+     column, or in the rectangle defined by the active region.  The
+     result is shown in the echo area and can be inserted with
+     {{{kbd(C-y)}}}.
+
+  {{{kindex(C-c +)}}}
+  {{{findex(org-table-sum)}}}
+- {{{kbdkey(S-,RET)}}}, ~org-table-copy-down~ :: When current field is
+     empty, copy from first non-empty field above.  When not empty,
+     copy current field down to next row and move cursor along with
+     it.  Depending on the variable ~org-table-copy-increment~,
+     integer field values will be incremented during copy.  Integers
+     that are too large will not be incremented.  Also, a ~0~ prefix
+     argument temporarily disables the increment.  This key is also
+     used by shift-selection and related modes (see [[Conflicts]]).
+
+     {{{kindex(S-RET)}}}
+     {{{findex(org-table-copy-down)}}}
+     {{{vindex(org-table-copy-increment)}}}
+
+*** Misc
+    :PROPERTIES:
+    :DESCRIPTION: Some other useful operations
+    :END:
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c `)}}}, ~org-table-edit-field~ :: Edit the current field in
+     a separate window.  This is useful for fields that are not fully
+     visible (see [[Column width and alignment]]).  When called with a
+     {{{kbd(C-u)}}} prefix, just make the full field visible, so that
+     it can be edited in place.  When called with two {{{kbd(C-u)}}}
+     prefixes, make the editor window follow the cursor through the
+     table and always show the current field.  The follow mode exits
+     automatically when the cursor leaves the table, or when you
+     repeat this command with {{{kbd(C-u C-u C-c `)}}}.
+
+     {{{kindex(C-c `)}}}
+     {{{findex(org-table-edit-field)}}}
+- {{{kbd(M-x org-table-import)}}} :: Import a file as a table.  The
+     table should be TAB or whitespace separated.  Use, for example,
+     to import a spreadsheet table or data from a database, because
+     these programs generally can write TAB-separated text files.
+     This command works by inserting the file into the buffer and then
+     converting the region to a table.  Any prefix argument is passed
+     on to the converter, which uses it to determine the separator.
+
+- {{{kbd(C-c |)}}}, ~org-table-create-or-convert-from-region~ :: Tables
+     can also be imported by pasting tabular text into the Org buffer,
+     selecting the pasted text with {{{kbd(C-x C-x)}}} and then using
+     the {{{kbd(C-c |)}}} command (see [[Creation and conversion]]).
+
+     {{{kindex(C-c |)}}}
+     {{{findex(org-table-create-or-convert-from-region)}}}
+- {{{kbd(M-x org-table-export)}}} :: Export the table, by default as a
+     TAB-separated file.  Use for data exchange with, for example,
+     spreadsheet or database programs.  The format used to export the
+     file can be configured in the variable
+     ~org-table-export-default-format~.  You may also use properties
+     ~TABLE_EXPORT_FILE~ and ~TABLE_EXPORT_FORMAT~ to specify the file
+     name and the format for table export in a subtree.  Org supports
+     quite general formats for exported tables.  The exporter format
+     is the same as the format used by Orgtbl radio tables, see
+     [[Translator functions], for a detailed description.
+
+     {{{findex(org-table-export)}}}
+     {{{vindex(org-table-export-default-format)}}}
+
+If you don't like the automatic table editor because it gets in your
+way on lines which you would like to start with {{{samp(|)}}}, you can
+turn it off with
+
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+(setq org-enable-table-editor nil)
+#+end_src
+
+
+{{{noindent}}} Then the only table command that still works is
+{{{kbd(C-c C-c)}}} to do a manual re-align.
+
+** Column width and alignment
+   :PROPERTIES:
+   :DESCRIPTION: Overrule the automatic settings
+   :END:
+{{{cindex(narrow columns in tables)}}}
+{{{cindex(alignment in tables)}}}
+
+The width of columns is automatically determined by the table editor.
+And also the alignment of a column is determined automatically from
+the fraction of number-like versus non-number fields in the column.
+
+Sometimes a single field or a few fields need to carry more text,
+leading to inconveniently wide columns.  Or maybe you want to make a
+table with several columns having a fixed width, regardless of
+content.  To set the width of a column, one field anywhere in the
+column may contain just the string ~<N>~ where ~N~
+is an integer specifying the width of the column in characters.[fn:23]
+The next re-align will then set the width of this column to this
+value.
+
+#+begin_example
+   |---+------------------------------|               |---+--------|
+   |   |                              |               |   | <6>    |
+   | 1 | one                          |               | 1 | one    |
+   | 2 | two                          |     ----\     | 2 | two    |
+   | 3 | This is a long chunk of text |     ----/     | 3 | This=> |
+   | 4 | four                         |               | 4 | four   |
+   |---+------------------------------|               |---+--------|
+#+end_example
+
+{{{noindent}}} Fields that are wider become clipped and end in the
+string {{{samp(=>)}}}.  Note that the full text is still in the buffer
+but is hidden.  To see the full text, hold the mouse over the
+field---a tool-tip window will show the full content.  To edit such a
+field, use the command {{{kbd(C-c `)}}} (that is {{{kbd(C-c)}}}
+followed by the backquote).  This will open a new window with the full
+field.  Edit it and finish with {{{kbd(C-c C-c)}}}.
+
+{{{vindex(org-startup-align-all-tables)}}} 
+
+When visiting a file containing a table with narrowed columns, the
+necessary character hiding has not yet happened, and the table needs
+to be aligned before it looks nice.  Setting the option
+~org-startup-align-all-tables~ will realign all tables in a file upon
+visiting, but also slow down startup.  You can also set this option on
+a per-file basis with:
+
+#+begin_src org
+  ,#+STARTUP: align
+  ,#+STARTUP: noalign
+#+end_src
+
+If you would like to overrule the automatic alignment of number-rich
+columns to the right and of string-rich columns to the left, you can
+use ~<r>~, ~<c>~ or ~<l>~ in a similar fashion.[fn:24] You may also
+combine alignment and field width like this: ~<l10>~.
+
+A line that only contains these formatting cookies will be removed
+automatically when exporting the document.
+
+** Column groups
+   :PROPERTIES:
+   :DESCRIPTION: Grouping to trigger vertical lines
+   :END:
+{{{cindex(grouping columns in tables)}}}
+
+When Org exports tables, it does so by default without vertical lines
+because that is visually more satisfying in general. Occasionally
+however, vertical lines can be useful to structure a table into groups
+of columns, much like horizontal lines can do for groups of rows. In
+order to specify column groups, you can use a special row where the
+first field contains only {{{samp(/)}}}. The further fields can either
+contain ~<~ to indicate that this column should start a group,
+~>~ to indicate the end of a column, or ~<>~ (no space
+between ~<~ and ~>~) to make a column a group of its own. Boundaries
+between column groups will upon export be marked with vertical lines.
+Here is an example:
+
+#+begin_src org
+  | N | N^2 | N^3 | N^4 | sqrt(n) | sqrt[4](N) |
+  |---+-----+-----+-----+---------+------------|
+  | / |   < |     |   > |       < |          > |
+  | 1 |   1 |   1 |   1 |       1 |          1 |
+  | 2 |   4 |   8 |  16 |  1.4142 |     1.1892 |
+  | 3 |   9 |  27 |  81 |  1.7321 |     1.3161 |
+  |---+-----+-----+-----+---------+------------|
+  ,#+TBLFM: $2=$1^2::$3=$1^3::$4=$1^4::$5=sqrt($1)::$6=sqrt(sqrt(($1)))
+#+end_src
+
+It is also sufficient to just insert the column group starters after
+every vertical line you would like to have:
+
+#+begin_src org
+  |  N | N^2 | N^3 | N^4 | sqrt(n) | sqrt[4](N) |
+  |----+-----+-----+-----+---------+------------|
+  | /  | <   |     |     | <       |            |
+#+end_src
+
+** The Orgtbl mode minor mode
+   :PROPERTIES:
+   :DESCRIPTION: The table editor as minor mode
+   :OPTIONAL_TITLE: Ogtbl mode
+   :END:
+{{{cindex(Orgtbl mode)}}}
+{{{cindex(minor mode for tables)}}}
+
+If you like the intuitive way the Org table editor works, you might
+also want to use it in other modes like Text mode or Mail mode.  The
+minor mode Orgtbl mode makes this possible.  You can always toggle the
+mode with {{{kbd(M-x orgtbl-mode)}}}.  To turn it on by default, for
+example in Message mode, use
+
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+(add-hook 'message-mode-hook 'turn-on-orgtbl)
+#+end_src
+
+Furthermore, with some special setup, it is possible to maintain
+tables in arbitrary syntax with Orgtbl mode.  For example, it is
+possible to construct LaTeX tables with the underlying ease and
+power of Orgtbl mode, including spreadsheet capabilities.  For
+details, see [[Tables in arbitrary syntax]].
+
+** The spreadsheet
+   :PROPERTIES:
+   :DESCRIPTION: The table editor has spreadsheet capabilities
+   :END:
+{{{cindex(calculations\\\, in tables)}}}
+{{{cindex(spreadsheet capabilities)}}}
+{{{cindex(@file{calc} package)}}}
+
+The table editor makes use of the Emacs {{{file(calc)}}} package to
+implement spreadsheet-like capabilities.  It can also evaluate Emacs
+Lisp forms to derive fields from other fields.  While fully featured,
+Org's implementation is not identical to other spreadsheets.  For
+example, Org knows the concept of a /column formula/ that will be
+applied to all non-header fields in a column without having to copy
+the formula to each relevant field.  There is also a formula debugger,
+and a formula editor with features for highlighting fields in the
+table corresponding to the references at the point in the formula,
+moving these references by arrow keys
+
+*** References
+    :PROPERTIES:
+    :DESCRIPTION: How to refer to another field or range
+    :END:
+{{{cindex(references)}}}
+
+To compute fields in the table from other fields, formulas must
+reference other fields or ranges.  In Org, fields can be referenced by
+name, by absolute coordinates, and by relative coordinates.  To find
+out what the coordinates of a field are, press {{{kbd(C-c ?)}}} in
+that field, or press {{{kbd(C-c })}}} to toggle the display of a
+grid.
+
+**** Field references
+     :PROPERTIES:
+     :DESCRIPTION: Refer to a particular field
+     :END:
+{{{cindex(field references)}}}
+{{{cindex(references\\\, to fields)}}}
+
+Formulas can reference the value of another field in two ways.  Like
+in any other spreadsheet, you may reference fields with a
+letter/number combination like ~B3~, meaning the 2nd field in the 3rd
+row.  {{{vindex(org-table-use-standard-references)}}} However, Org
+prefers to use another, more general representation that looks
+like this:[fn:25]
+
+#+begin_example
+   @ROW$COLUMN
+#+end_example
+
+Column specifications can be absolute like ~$1~, ~$2~, ..., ~$N~, or
+relative to the current column (i.e., the column of the field which is
+being computed) like ~$+1~ or ~$-2~. ~$<~ and ~$>~ are immutable
+references to the first and last column, respectively, and you can use
+~$>>>~ to indicate the third column from the right.
+
+The row specification only counts data lines and ignores horizontal
+separator lines (hlines). Like with columns, you can use absolute row
+numbers ~@1~, ~@2~, ..., ~@N~, and row numbers relative to the current
+row like ~@+3~ or ~@-1~. ~@<~ and ~@>~ are immutable references the
+first and last row in the table, respectively.[fn:26] You may also
+specify the row relative to one of the hlines: ~@I~ refers to the
+first hline, ~@II~ to the second, etc. ~@-I~ refers to the first such
+line above the current line, ~@+I~ to the first such line below the
+current line. You can also write ~@III+2~ which is the second data
+line after the third hline in the table.
+
+~@0~ and ~$0~ refer to the current row and column, respectively, i.e.,
+to the row/column for the field being computed. Also, if you omit
+either the column or the row part of the reference, the current
+row/column is implied.
+
+Org's references with /unsigned/ numbers are fixed references in the
+sense that if you use the same reference in the formula for two
+different fields, the same field will be referenced each time.  Org's
+references with /signed/ numbers are floating references because the
+same reference operator can reference different fields depending on
+the field being calculated by the formula.
+
+Here are a few examples:
+
+#+attr_texinfo: :table-type "table" :indic "@code"
+  - @2$3 :: 2nd row, 3rd column (same as ~C2~)
+  - $5 :: column 5 in the current row (same as ~E&~)
+  - @2 :: current column, row 2
+  - @-1$-3 :: the field one row up, three columns to the left
+  - @-I$2 :: field just under hline above current row, column 2
+  - @>$5 :: field in the last row, in column 5
+
+**** Range references
+     :PROPERTIES:
+     :DESCRIPTION: Refer to a range of fields
+     :END:
+{{{cindex(range references)}}}
+{{{cindex(references\\\, to ranges)}}}
+
+You may reference a rectangular range of fields by specifying two
+field references connected by two dots ~..~.  If both fields are in
+the current row, you may simply use ~$2..$7~, but if at least one
+field is in a different row, you need to use the general ~@row$column~
+format at least for the first field (i.e., the reference must start
+with ~@~ in order to be interpreted correctly).  Examples:
+
+#+attr_texinfo: :table-type "table" :indic "@code"
+  - $1..$3      :: first three fields in the current row
+  - $P..$Q      :: range, using column names (see under Advanced)
+  - $<<<..$>>   :: start in third column, continue to the one but last
+  - @2$1..@4$3  ::  six fields between these two fields (same as
+                   ~A2..C4~)
+  - @-1$-2..@-1 :: three numbers from the column to the left, 2 up to
+                   current row
+  - @I..II      ::  between first and second hline, short for ~@I..@II~
+
+
+{{{noindent}}} Range references return a vector of values that can be
+fed into Calc vector functions.  Empty fields in ranges are normally
+suppressed, so that the vector contains only the non-empty fields (but
+see the ~E~ mode switch below).  If there are no non-empty fields,
+~[0]~ is returned to avoid syntax errors in formulas.
+
+**** Field coordinates in formulas
+     :PROPERTIES:
+     :DESCRIPTION: Refer to fields in Lisp or Calc
+     :END:
+{{{cindex(field coordinates)}}}
+{{{cindex(coordinates\\\, of field)}}}
+{{{cindex(row\\\, of field coordinates)}}}
+{{{cindex(column\\\, of field coordinates)}}}
+
+For Calc formulas and Lisp formulas ~@#~ and ~$#~ can be used to get
+the row or column number of the field where the formula result goes.
+The traditional Lisp formula equivalents are ~org-table-current-dline~
+and ~org-table-current-column~.  Examples:
+
+#+attr_texinfo: :table-type "table" :indic "@code"
+  - if(@# % 2, $#, string("")) :: column number on odd lines only
+  - $3 = remote(FOO, @#$2)    :: copy column 2 from table FOO into
+       column 3 of the current table
+
+{{{noindent}}} For the second example, table FOO must have at least as
+many rows as the current table. Note that this is inefficient for
+large number of rows.[fn:27]
+
+**** Named references
+     :PROPERTIES:
+     :DESCRIPTION: Name columns or constants
+     :END:
+{{{cindex(named references)}}}
+{{{cindex(references\\\, named)}}}
+{{{cindex(name\\\, of column or field)}}}
+{{{cindex(constants\\\, in calculations)}}}
+{{{cindex(#+CONSTANTS)}}}
+{{{vindex(org-table-formula-constants)}}}
+
+{{{samp($name)}}} is interpreted as the name of a column, parameter or
+constant.  Constants are defined globally through the variable
+~org-table-formula-constants~, and locally (for the file) through a
+line like this example:
+
+#+begin_src org
+  ,#+CONSTANTS: c=299792458. pi=3.14 eps=2.4e-6
+#+end_src
+
+{{{noindent}}} 
+{{{vindex(constants-unit-system)}}}
+{{{pindex(constants.el)}}} 
+
+Also, properties (see [[Properties and columns]]) can be used as constants
+in table formulas: for a property ~:Xyz:~ use the name ~$PROP_Xyz~,
+and the property will be searched in the current outline entry and in
+the hierarchy above it. If you have the {{{file(constants.el)}}}
+package, it will also be used to resolve constants, including natural
+constants like ~$h~ for Planck's constant, and units like ~$km~ for
+kilometers. Column names and parameters can be specified in special
+table lines. These are described in the section, [[Advanced features]].
+All names must start with a letter, and further consist of letters and
+numbers.[fn:175]
+
+**** Remote references
+     :PROPERTIES:
+     :DESCRIPTION: Refer to information in other tables
+     :END:
+{{{cindex(remote references)}}}
+{{{cindex(references\\\, remote)}}}
+{{{cindex(references\\\, to a different table)}}}
+{{{cindex(name\\\, of column or field)}}}
+{{{cindex(constants\\\, in calculations)}}}
+{{{cindex(#+TBLNAME)}}}
+
+You may also reference constants, fields and ranges from a different
+table, either in the current file or even in a different file.  The
+syntax is
+
+#+begin_example
+   remote(NAME-OR-ID,REF)
+#+end_example
+
+{{{noindent}}} where NAME can be the name of a table in the current
+file as set by a ~#+TBLNAME: NAME~ line before the table. It can also
+be the ID of an entry, even in a different file, and the reference
+then refers to the first table in that entry. REF is an absolute field
+or range reference as described above for example ~@3$3~ or
+~$somename~, valid in the referenced table.
+
+*** Formula syntax for Calc
+    :PROPERTIES:
+    :DESCRIPTION: Using Calc to compute stuff
+    :END:
+{{{cindex(formula syntax\\\, Calc)}}}
+{{{cindex(syntax\\\, of formulas)}}}
+
+A formula can be any algebraic expression understood by the Emacs
+{{{file(Calc)}}} package.[fn:28]  Before evaluation by
+~calc-eval~ (see [[info:calc#Calling Calc from Your Programs][Calling Calc from Your Lisp Programs]]), variable
+substitution takes place according to the rules described above.
+{{{cindex(vectors\\\, in table calculations)}}} The range vectors can
+be directly fed into the Calc vector functions like ~vmean~ and
+~vsum~.
+
+{{{cindex(format specifier)}}}
+{{{cindex(mode\\\, for @file{calc})}}}
+{{{vindex(org-calc-default-modes)}}}
+
+A formula can contain an optional mode string after a semicolon.  This
+string consists of flags to influence Calc and other modes during
+execution.  By default, Org uses the standard Calc modes (precision
+12, angular units degrees, fraction and symbolic modes off).  The
+display format, however, has been changed to ~(float 8)~ to keep
+tables compact.  The default settings can be configured using the
+variable ~org-calc-default-modes~.
+
+#+attr_texinfo: :table-type "table" :indic "@code"
+  - p20 :: set the internal Calc calculation precision to 20 digits
+  - n3 s3 e2 f4 :: normal, scientific, engineering, or fixed format of
+                   the result of Calc passed back to Org. Calc
+                   formatting is unlimited in precision as long as the
+                   Calc calculation precision is greater.
+  - D R :: angle modes: degrees, radians
+  - F S :: fraction and symbolic modes
+  - N :: interpret all fields as numbers, use 0 for non-numbers
+  - E :: keep empty fields in ranges
+  - L :: literal
+
+{{{noindent}}} Unless you use large integer numbers or
+high-precision-calculation and -display for floating point numbers you
+may alternatively provide a ~printf~ format specifier to reformat the
+Calc result after it has been passed back to Org instead of letting
+Calc already do the formatting.[fn:29] A few examples:
+
+#+attr_texinfo: :table-type "table" :indic "@code"
+  - $1+$2            :: Sum of first and second field
+  - $1+$2;%.2f       :: Same, format result to two decimals
+  - exp($2)+exp($1)  :: Math functions can be used
+  - $0;%.1f          :: Reformat current cell to 1 decimal
+  - ($3-32)*5/9      :: Degrees F -> C conversion
+  - $c/$1/$cm        :: Hz -> cm conversion, using
+       {{{file(constants.el)}}}
+  - tan($1);Dp3s1    :: Compute in degrees, precision 3, display SCI 1
+  - sin($1);Dp3%.1e  :: Same, but use ~printf~ specifier for display
+  - vmean($2..$7)    :: Compute column range mean, using vector
+       function
+  - vmean($2..$7);EN :: Same, but treat empty fields as 0
+  - taylor($3,x=7,2) :: Taylor series of $3, at x=7, second degree
+
+Calc also contains a complete set of logical operations.  For example
+
+#+attr_texinfo: :table-type "table" :indic "@code"
+  - if($1<20,teen,string("")) ::  "teen" if age $1 less than 20, else empty
+
+
+Note that you can also use two org-specific flags ~T~ and ~t~ for
+durations computations [[Duration and time values]].
+
+You can add your own Calc functions defined in Emacs Lisp with
+~defmath~ and use them in formula syntax for Calc.
+
+*** Emacs Lisp forms as formulas
+    :PROPERTIES:
+    :DESCRIPTION: Writing formulas in Emacs Lisp
+    :OPTIONAL_TITLE: Formula syntax for Lisp
+    :END:
+{{{cindex(Lisp forms\\\, as table formulas)}}}
+
+It is also possible to write a formula in Emacs Lisp.  This can be
+useful for string manipulation and control structures, if Calc's
+functionality is not enough.
+
+If a formula starts with a single-quote followed by an opening
+parenthesis, then it is evaluated as a Lisp form. The evaluation
+should return either a string or a number. Just as with
+{{{file(calc)}}} formulas, you can specify modes and a printf format
+after a semicolon.
+
+With Emacs Lisp forms, you need to be conscious about the way field
+references are interpolated into the form. By default, a reference
+will be interpolated as a Lisp string (in double-quotes) containing
+the field. If you provide the {{{samp(N)}}} mode switch, all
+referenced elements will be numbers (non-number fields will be zero)
+and interpolated as Lisp numbers, without quotes. If you provide the
+{{{samp(L)}}} flag, all fields will be interpolated literally, without
+quotes. I.e., if you want a reference to be interpreted as a string by
+the Lisp form, enclose the reference operator itself in double-quotes,
+like ~"$3"~. Ranges are inserted as space-separated fields, so you can
+embed them in list or vector syntax.
+
+Here are a few examples---note how the {{{samp(N)}}} mode is used when
+we do computations in Lisp.
+
+Swap the first two characters of the content of column 1:
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+  '(concat (substring $1 1 2) (substring $1 0 1) (substring $1 2))
+#+end_src
+
+Add columns 1 and 2, equivalent to Calc's ~$1+$2~:
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+  '(+ $1 $2);N
+#+end_src
+
+Compute the sum of columns 1-4, like Calc's ~vsum($1..$4)~}:
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+  '(apply '+ '($1..$4));N
+#+end_src
+
+*** Duration and time values
+    :PROPERTIES:
+    :DESCRIPTION: How to compute duration and time values
+    :END:
+{{{cindex(Duration\\\, computing)}}}
+{{{cindex(Time\\\, computing)}}}
+{{{vindex(org-table-duration-custom-format)}}}
+
+If you want to compute time values use the ~T~ flag, either in Calc
+formulas or Elisp formulas:
+
+#+begin_example
+   |  Task 1 |   Task 2 |    Total |
+   |---------+----------+----------|
+   |    2:12 |     1:47 | 03:59:00 |
+   | 3:02:20 | -2:07:00 |     0.92 |
+   #+TBLFM: @2$3=$1+$2;T::@3$3=$1+$2;t
+#+end_example
+
+Input duration values must be of the form ~[HH:MM[:SS]~, where seconds
+are optional. With the ~T~ flag, computed durations will be displayed
+as ~HH:MM:SS~ (see the first formula above). With the ~t~ flag,
+computed durations will be displayed according to the value of the
+variable ~org-table-duration-custom-format~, which defaults to
+~'hours~ and will display the result as a fraction of hours (see the
+second formula in the example above).
+
+Negative duration values can be manipulated as well, and integers will
+be considered as seconds in addition and subtraction.
+
+*** Field and range formulas
+    :PROPERTIES:
+    :DESCRIPTION: Formulas for specific (ranges of) fields
+    :END:
+{{{cindex(field formula)}}}
+{{{cindex(range formula)}}}
+{{{cindex(formula\\\, for individual table field)}}}
+{{{cindex(formula\\\, for range of fields)}}}
+
+To assign a formula to a particular field, type it directly into the
+field, preceded by ~:=~, for example ~vsum(@II..III)~. When you press
+{{{key(TAB)}}} or {{{key(RET)}}} or {{{kbd(C-c C-c)}}} with the cursor
+still in the field, the formula will be stored as the formula for this
+field, evaluated, and the current field will be replaced with the
+result.
+
+{{{cindex(#+TBLFM)}}} 
+
+Formulas are stored in a special line starting with ~#+TBLFM:~
+directly below the table. If you type the equation in the fourth field
+of the third data line in the table, the formula will look like
+~@3$4=$1+$2~. When inserting/deleting/swapping column and rows with
+the appropriate commands, /absolute references/ (but not relative
+ones) in stored formulas are modified in order to still reference the
+same field. To avoid this from happening, in particular in range
+references, anchor ranges at the table borders (using ~@<~, ~@>~,
+~$<~, ~$>~), or at hlines using the ~@I~ notation. Automatic
+adaptation of field references does of course not happen if you edit
+the table structure with normal editing commands---then you must fix
+the equations yourself.
+
+Instead of typing an equation into the field, you may also use the
+following command
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+  - {{{kbd(C-u C-c =)}}}, ~org-table-eval-formula~ :: Install a new
+       formula for the current field.  The command prompts for a
+       formula with default taken from the {{{samp(#+TBLFM:)}}} line,
+       applies it to the current field, and stores it.
+
+       {{{kindex(C-u C-c =)}}}
+       {{{findex(org-table-eval-formula)}}}
+The left-hand side of a formula can also be a special expression in
+order to assign the formula to a number of different fields. There is
+no keyboard shortcut to enter such range formulas. To add them, use
+the formula editor (see [[Editing and debugging formulas]]) or edit the
+~#+TBLFM:~ line directly.
+
+#+attr_texinfo: :table-type "table" :indic "@code"
+  - $2= :: Column formula, valid for the entire column.  This is so
+           common that Org treats these formulas in a special way, see
+           [[Column formulas]].
+  - @3= :: Row formula, applies to all fields in the specified row.
+            ~@@>=~ means the last row.
+  - @1$2..@4$3= :: Range formula, applies to all fields in the given
+                     rectangular range.  This can also be used to
+                     assign a formula to some but not all fields in a
+                     row.
+  - $name= :: Named field, see [[Advanced features]].
+
+*** Column formulas
+    :PROPERTIES:
+    :DESCRIPTION: Formulas valid for an entire column
+    :END:
+{{{cindex(column formula)}}}
+{{{cindex(formula\\\, for table column)}}}
+
+When you assign a formula to a simple column reference like ~$3=~, the
+same formula will be used in all fields of that column, with the
+following very convenient exceptions:
+
+  -  If the table contains horizontal separator hlines with rows above
+     and below, everything before the first such hline is considered
+     part of the table /header/ and will not be modified by column
+     formulas. Therefore a header is mandatory when you use column
+     formulas and want to add hlines to group rows, like for example
+     to separate a total row at the bottom from the summand rows
+     above.
+
+  -  Fields that already get a value from a field/range formula will
+     be left alone by column formulas. These conditions make column
+     formulas very easy to use.
+
+To assign a formula to a column, type it directly into any field in
+the column, preceded by an equal sign, like {{{samp(=$1+$2)}}}. When
+you press {{{key(TAB)}}} or {{{key(RET)}}} or {{{kbd(C-c C-c)}}} with
+the cursor still in the field, the formula will be stored as the
+formula for the current column, evaluated and the current field
+replaced with the result. If the field contains only {{{samp(=)}}},
+the previously stored formula for this column is used. For each
+column, Org will only remember the most recently used formula. In the
+{{{samp(#+TBLFM:)}}} line, column formulas will look like
+{{{samp($4=$1+$2)}}}. The left-hand side of a column formula can not
+be the name of column, it must be the numeric column reference or
+~$>~.
+
+Instead of typing an equation into the field, you may also use the
+following command:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+  - {{{kbd(C-c =)}}}, ~org-table-eval-formula~ :: Install a new formula
+       for the current column and replace current field with the
+       result of the formula.  The command prompts for a formula, with
+       default taken from the {{{samp(#+TBLFM)}}} line, applies it to
+       the current field and stores it.  With a numeric prefix
+       argument(e.g., {{{kbd(C-5 C-c =)}}}) the command will apply it
+       to that many consecutive fields in the current column.
+
+       {{{kindex(C-c =)}}}
+       {{{findex(org-table-eval-formula)}}}
+*** Lookup functions
+    :PROPERTIES:
+    :DESCRIPTION: Lookup functions for searching tables
+    :END:
+{{{cindex(lookup functions in tables)}}}
+{{{cindex(table lookup functions)}}}
+
+Org has three predefined Emacs Lisp functions for lookups in tables.
+
+#+attr_texinfo: :table-type "table" :indic "@code"
+  - (org-lookup-first VAL S-LIST R-LIST &optional PREDICATE) :: Searches
+       for the first element ~S~ in list ~S-LIST~ for which
+
+       {{{findex(org-lookup-first)}}}
+
+       #+header: :exports code
+       #+header: :eval no
+       #+begin_src emacs-lisp
+         (PREDICATE VAL S)
+       #+end_src
+       is ~t~; returns the value from the corresponding position in
+       list ~R-LIST~.  The default ~PREDICATE~ is ~equal~.  Note that
+       the parameters ~VAL~ and ~S~ are passed to ~PREDICATE~ in the
+       same order as the correspoding parameters are in the call to
+       ~org-lookup-first~, where ~VAL~ precedes ~S-LIST~.  If ~R-LIST~
+       is ~nil~, the matching element ~S~ of ~S-LIST~ is returned.
+  - (org-lookup-last VAL S-LIST R-LIST &optional PREDICATE) :: Similar
+       to ~org-lookup-first~ above, but searches for the /last/
+       element for which ~PREDICATE~ is ~t~.
+
+       {{{findex(org-lookup-last)}}}
+  - (org-lookup-all VAL S-LIST R-LIST &optional PREDICATE) :: Similar
+       to ~org-lookup-first~, but searches for /all/ elements for
+       which ~PREDICATE~ is ~t~, and returns /all/ corresponding
+       values.  This function can not be used by itself in a formula,
+       because it returns a list of values.  However, powerful lookups
+       can be built when this function is combined with other Emacs
+       Lisp functions.
+
+       {{{findex(org-lookup-all)}}}
+
+If the ranges used in these functions contain empty fields, the ~E~
+mode for the formula should usually be specified: otherwise empty
+fields will not be included in ~S-LIST~ and/or ~R-LIST~ which can, for
+example, result in an incorrect mapping from an element of ~S-LIST~ to
+the corresponding element of ~R-LIST~.
+
+These three functions can be used to implement associative arrays,
+count matching cells, rank results, group data, etc.  For practical
+examples see [[http://orgmode.org/worg/org-tutorials/org-lookups.html][this tutorial on Worg]].
+
+*** Editing and debugging formulas
+    :PROPERTIES:
+    :DESCRIPTION: Fixing formulas
+    :END:
+{{{cindex(formula editing)}}}
+{{{cindex(editing\\\, of table formulas)}}}
+
+{{{vindex(org-table-use-standard-references)}}} You can edit
+individual formulas in the minibuffer or directly in the field.  Org
+can also prepare a special buffer with all active formulas of a table.
+When offering a formula for editing, Org converts references to the
+standard format (like ~B3~ or ~D&~) if possible.  If you prefer to
+only work with the internal format (like ~@3$2~ or ~$4~), configure
+the variable ~org-table-use-standard-references~.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+  - {{{kbd(C-c =)}}} or {{{kbd(C-u C-c =)}}}, ~org-table-eval-formula~ ::
+
+       Edit the formula associated with the current column/field in the
+       minibuffer.  See [[Column formulas]], and [[Field and range formulas]].
+
+       {{{kindex(C-c =)}}}
+       {{{kindex(C-u C-c =)}}}
+       {{{findex(org-table-eval-formula)}}}
+  - {{{kbd(C-u C-u C-c =)}}}, ~org-table-eval-formula~ :: Re-insert the
+       active formula (either a field formula, or a column formula)
+       into the current field, so that you can edit it directly in the
+       field.  The advantage over editing in the minibuffer is that
+       you can use the command {{{kbd(C-c ?)}}}.
+
+       {{{kindex(C-u C-u C-c =)}}}
+       {{{findex(org-table-eval-formula)}}}
+
+  - {{{kbd(C-c ?)}}}, ~org-table-field-info~ :: While editing a formula
+       in a table field, highlight the field(s) referenced by the
+       reference at the cursor position in the formula.
+
+       {{{kindex(C-c ?)}}}
+       {{{findex(org-table-field-info)}}}
+
+  - {{{kbd(C-c })}}}, ~org-table-toggle-coordinate-overlays~ :: Toggle
+       the display of row and column numbers for a table, using
+       overlays ({{{command(org-table-toggle-coordinate-overlays)}}}).
+       These are updated each time the table is aligned; you can force
+       it with {{{kbd(C-c C-c)}}}.
+
+       {{{kindex(C-c @})}}}
+       {{{findex(org-table-toggle-coordinate-overlays)}}}
+
+  - {{{kbd(C-c {)}}}, ~org-table-toggle-formula-debugger~ :: Toggle
+       the formula debugger on and off.  See below.
+
+       {{{kindex(C-c @{)}}}
+       {{{findex(org-table-toggle-formula-debugger)}}}
+
+  - {{{kbd(C-c ')}}}, ~org-table-edit-formulas~ :: Edit all formulas
+       for the current table in a special buffer, where the formulas
+       will be displayed one per line.  If the current field has an
+       active formula, the cursor in the formula editor will mark it.
+       While inside the special buffer, Org will automatically
+       highlight any field or range reference at the cursor position.
+       You may edit, remove and add formulas, and use the following
+       commands:
+
+       {{{kindex(C-c ')}}}
+       {{{findex(org-table-edit-formulas)}}}
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+  - {{{kbd(C-c C-c)}}} or {{{kbd(C-x C-s)}}}, ~org-table-fedit-finish~ :: 
+
+       Exit the formula editor and store the modified formulas.  With
+       {{{kbd(C-u)}}} prefix, also apply the new formulas to the
+       entire table.
+
+       {{{kindex(C-x C-s)}}}
+       {{{kindex(C-c C-c)}}}
+       {{{findex(org-table-fedit-finish)}}}
+  - {{{kbd(C-c C-q)}}}, ~org-table-fedit-abort~ :: Exit the formula
+       editor without installing changes.
+
+       {{{kindex(C-c C-q)}}}
+       {{{findex(org-table-fedit-abort)}}}
+  - {{{kbd(C-c C-r)}}}, ~org-table-fedit-toggle-ref-type~ :: Toggle all
+       references in the formula editor between standard (like ~B3~)
+       and internal (like ~@3$2~).
+
+       {{{kindex(C-c C-r)}}}
+       {{{findex(org-table-fedit-toggle-ref-type)}}}
+  - {{{key(TAB)}}}, ~org-table-fedit-lisp-indent~ :: Pretty-print or
+       indent Lisp formula at point.  When in a line containing a Lisp
+       formula, format the formula according to Emacs Lisp rules.
+       Another {{{key(TAB)}}} collapses the formula back again.  In
+       the open formula, {{{key(TAB)}}} re-indents just like in Emacs
+       Lisp mode.
+
+       {{{kindex(TAB)}}}
+       {{{findex(org-table-fedit-lisp-indent)}}}
+  - {{{kbdkey(M-,TAB)}}}, ~lisp-complete-symbol~ :: Complete Lisp
+       symbols, just like in Emacs Lisp mode.
+
+       {{{kindex(M-TAB)}}}
+       {{{findex(lisp-complete-symbol)}}}
+  - {{{kbdkey(S-,up)}}}/{{{key(down)}}}/{{{key(left)}}}/{{{key(right)}}} :: Shift
+       the reference at point.  For example, if the reference is ~B3~
+       and you press {{{kbdkey(S-,right)}}}, it will become ~C3~.
+       This also works for relative references and for hline
+       references.
+
+       {{{kindex(S-up)}}}
+       {{{kindex(S-down)}}}
+       {{{kindex(S-left)}}}
+       {{{kindex(S-right)}}}
+       {{{findex(org-table-fedit-ref-up)}}}
+       {{{findex(org-table-fedit-ref-down)}}}
+       {{{findex(org-table-fedit-ref-left)}}}
+       {{{findex(org-table-fedit-ref-right)}}}
+  - {{{kbdkey(M-S-,up)}}}, ~org-table-fedit-line-up~ ::
+
+       Move the test line for column formulas up in the Org buffer.
+
+       {{{kindex(M-S-up)}}}
+       {{{findex(org-table-fedit-line-up)}}}
+
+  - {{{kbdkey(M-S-,down)}}}, ~org-table-fedit-line-down~ ::
+
+       Move the test line for column formulas down in the Org buffer.
+
+       {{{kindex(M-S-down)}}}
+       {{{findex(org-table-fedit-line-down)}}}
+
+  - {{{kbdkey(M-,up)}}}, ~org-table-fedit-scroll-up~ ::
+
+       Scroll up the window displaying the table.
+
+       {{{kindex(M-up)}}}
+       {{{findex(org-table-fedit-scroll-up)}}}
+
+  - {{{kbdkey(M-,down)}}}, ~org-table-fedit-scroll-down~ ::
+
+       Scroll down the window displaying the table.
+
+       {{{kindex(M-down)}}}
+       {{{findex(org-table-fedit-scroll-down)}}}
+
+  - {{{kbd(C-c })}}} :: Turn the coordinate grid in the table on and
+       off.
+
+       {{{kindex(C-c @})}}}
+       {{{findex(org-table-toggle-coordinate-overlays)}}}
+
+Making a table field blank does not remove the formula associated with
+the field, because that is stored in a different line (the
+{{{samp(#+TBLFM)}}} line)---during the next recalculation the field
+will be filled again.  To remove a formula from a field, you have to
+give an empty reply when prompted for the formula, or to edit the
+{{{samp(#+TBLFM)}}} line.
+
+{{{kindex(C-c C-c)}}}
+You may edit the {{{samp(#+TBLFM)}}} directly and re-apply the changed
+equations with {{{kbd(C-c C-c)}}} in that line or with the normal
+recalculation commands in the table.
+
+*** Debugging formulas
+    :PROPERTIES:
+    :DESCRIPTION: Help fixing formulas
+    :END:
+
+{{{cindex(formula debugging)}}}
+{{{cindex(debugging\\\, of table formulas)}}}
+
+When the evaluation of a formula leads to an error, the field content
+becomes the string {{{samp(#ERROR)}}}. If you would like see what is
+going on during variable substitution and calculation in order to find
+a bug, turn on formula debugging in the ~Tbl~ menu and repeat the
+calculation, for example by pressing {{{kbdspckey(C-u C-u C-c =,RET)}}}
+in a field. Detailed information will be displayed.
+
+*** Updating the table
+    :PROPERTIES:
+    :DESCRIPTION: Recomputing all dependent fields
+    :END:
+{{{cindex(recomputing table fields)}}}
+{{{cindex(updating\\\, table)}}}
+
+Recalculation of a table is normally not automatic, but needs to be
+triggered by a command.  See [[Advanced features]], for a way to make
+recalculation at least semi-automatic.
+
+In order to recalculate a line of a table or the entire table, use the
+following commands:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+  - {{{kbd(C-c *)}}}, ~org-table-recalculate~ :: Recalculate the
+       current row by first applying the stored column formulas from
+       left to right, and all field/range formulas in the current row.
+
+       {{{kindex(C-c *)}}}
+       {{{findex(org-table-recalculate)}}}
+  - {{{kbd(C-u C-c *)}}} or {{{kbd(C-u C-c C-c)}}} :: Recompute the
+       entire table, line by line.  Any lines before the first hline
+       are left alone, assuming that these are part of the table
+       header.
+
+       {{{kindex(C-u C-c *)}}}
+       {{{kindex(C-u C-c C-c)}}}
+  - {{{kbd(C-u C-u C-c *)}}} or {{{kbd(C-u C-u C-c C-c)}}}, ~org-table-iterate~ ::
+       
+       Iterate the table by recomputing it until no further changes
+       occur.  This may be necessary if some computed fields use the
+       value of other fields that are computed /later/ in the
+       calculation sequence.
+
+       {{{kindex(C-u C-u C-c *)}}}
+       {{{kindex(C-u C-u C-c C-c)}}}
+       {{{findex(org-table-iterate)}}}
+  - {{{kbd(M-x org-table-recalculate-buffer-tables)}}} :: Recompute
+       all tables in the current buffer.
+
+       {{{findex(org-table-recalculate-buffer-tables)}}}
+  - {{{kbd(M-x org-table-iterate-buffer-tables)}}} :: Iterate all
+       tables in the current buffer, in order to converge
+       table-to-table dependencies.
+
+       {{{findex(org-table-iterate-buffer-tables)}}}
+*** Advanced features
+    :PROPERTIES:
+    :DESCRIPTION: Field and column names, parameters, and automatic recalc
+    :END:
+If you want the recalculation of fields to happen automatically, or if
+you want to be able to assign /names/ to fields and columns,
+you need to reserve the first column of the table for special marking
+characters.[fn:30]
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+  - {{{kbd(C-#)}}}, ~org-table-rotate-recalc-marks~ :: Rotate the
+       calculation mark in first column through the states {{{samp( )}}}, {{{samp(#)}}}, {{{samp(*)}}}, {{{samp(!)}}},
+       {{{samp($)}}}.  When there is an active region, change all
+       marks in the region.
+
+       {{{kindex(C-#)}}}
+       {{{findex(org-table-rotate-recalc-marks)}}}
+Here is an example of a table that collects exam results of students
+and makes use of these features:
+
+#+begin_src org
+  |---+---------+--------+--------+--------+-------+------|
+  |   | Student | Prob 1 | Prob 2 | Prob 3 | Total | Note |
+  |---+---------+--------+--------+--------+-------+------|
+  | ! |         |     P1 |     P2 |     P3 |   Tot |      |
+  | # | Maximum |     10 |     15 |     25 |    50 | 10.0 |
+  | ^ |         |     m1 |     m2 |     m3 |    mt |      |
+  |---+---------+--------+--------+--------+-------+------|
+  | # | Peter   |     10 |      8 |     23 |    41 |  8.2 |
+  | # | Sam     |      2 |      4 |      3 |     9 |  1.8 |
+  |---+---------+--------+--------+--------+-------+------|
+  |   | Average |        |        |        |  25.0 |      |
+  | ^ |         |        |        |        |    at |      |
+  | $ | max=50  |        |        |        |       |      |
+  |---+---------+--------+--------+--------+-------+------|
+  ,#+TBLFM: $6=vsum($P1..$P3)::$7=10*$Tot/$max;%.1f::$at=vmean(@-II..@-I);%.1f
+#+end_src
+
+{{{noindent}}} Important: please note that for these special tables,
+recalculating the table with {{{kbd(C-u C-c *)}}} will only affect
+rows that are marked ~#~ or ~*~, and fields that
+have a formula assigned to the field itself. The column formulas are
+not applied in rows with empty first field.
+
+{{{cindex(marking characters\\\, tables)}}}
+The marking characters have the following meaning:
+#+attr_texinfo: :table-type "table" :indic "@samp"
+  - ! :: The fields in this line define names for the columns, so that
+         you may refer to a column as {{{samp($Tot)}}} instead of
+         {{{samp($6)}}}.
+  - ^ :: This row defines names for the fields @emph{above} the row.
+         With such a definition, any formula in the table may use
+         {{{samp($m1)}}} to refer to the value {{{samp(10)}}}.  Also,
+         if you assign a formula to a names field, it will be stored
+         as ~$name= ...~.
+  - _ :: Similar to {{{samp(^)}}}, but defines names for the fields in
+         the row /below/.
+  - $ :: Fields in this row can define /parameters/ for formulas.  For
+         example, if a field in a {{{samp($)}}} row contains
+         {{{samp(max=50)}}}, then formulas in this table can refer to
+         the value 50 using {{{samp($max)}}}.  Parameters work exactly
+         like constants, only that they can be defined on a per-table
+         basis.
+  - # :: Fields in this row are automatically recalculated when
+         pressing {{{key(TAB)}}} or {{{key(RET)}}} or
+         {{{kbdkey(S-,TAB)}}} in this row.  Also, this row is selected
+         for a global recalculation with {{{kbd(C-u C-c *)}}}.
+         Unmarked lines will be left alone by this command.
+  - * :: Selects this line for global recalculation with {{{kbd(C-u C-c *)}}}, but not for automatic recalculation.  Use this
+         when automatic recalculation slows down editing too much.
+  - :: Unmarked lines are exempt from recalculation with {{{kbd(C-u C-c *)}}}.  All lines that should be recalculated should be
+       marked with ~#~ or ~*~.
+  - / :: Do not export this line.  Useful for lines that contain the
+         narrowing ~<N>~ markers or column group markers.
+
+
+Finally, just to whet your appetite for what can be done with the
+fantastic {{{file(calc.el)}}} package, here is a table that computes
+the Taylor series of degree ~n~ at location ~x~ for a couple of
+functions.
+
+#+begin_src org
+  |---+-------------+---+-----+--------------------------------------|
+  |   | Func        | n | x   | Result                               |
+  |---+-------------+---+-----+--------------------------------------|
+  | # | exp(x)      | 1 | x   | 1 + x                                |
+  | # | exp(x)      | 2 | x   | 1 + x + x^2 / 2                      |
+  | # | exp(x)      | 3 | x   | 1 + x + x^2 / 2 + x^3 / 6            |
+  | # | x^2+sqrt(x) | 2 | x=0 | x*(0.5 / 0) + x^2 (2 - 0.25 / 0) / 2 |
+  | # | x^2+sqrt(x) | 2 | x=1 | 2 + 2.5 x - 2.5 + 0.875 (x - 1)^2    |
+  | * | tan(x)      | 3 | x   | 0.0175 x + 1.77e-6 x^3               |
+  |---+-------------+---+-----+--------------------------------------|
+  ,#+TBLFM: $5=taylor($2,$4,$3);n3
+#+end_src
+
+** Org-Plot
+   :PROPERTIES:
+   :DESCRIPTION: Plotting from Org tables
+   :END:
+{{{cindex(graph\\\, in tables)}}}
+{{{cindex(plot tables using Gnuplot)}}}
+{{{cindex(#+PLOT)}}}
+
+Org-Plot can produce 2D and 3D graphs of information stored in org
+tables using [[http://www.gnuplot.info/][Gnuplot]] and [[http://cars9.uchicago.edu/~ravel/software/gnuplot-mode.html][gnuplot-mode]]. To see this in action, ensure
+that you have both Gnuplot and Gnuplot-mode installed on your system,
+then call ~org-plot/gnuplot~ on the following table.
+
+#+begin_src org
+  ,#+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 |
+  | Morels    |    257.56 |   17.67 |
+#+end_src
+
+Notice that Org Plot is smart enough to apply the table's headers as
+labels. Further control over the labels, type, content, and appearance
+of plots can be exercised through the ~#+PLOT:~ lines preceding a
+table. See below for a complete list of Org-plot options. For more
+information and examples see the [[http://orgmode.org/worg/org-tutorials/org-plot.html][Org-plot tutorial]].
+
+Org-Plot recognizes the following options:
+
+#+attr_texinfo: :table-type "table" :indic "@code"
+  - set :: Specify any {{{command(gnuplot)}}} option to be set when
+           graphing.
+  - title :: Specify the title of the plot.
+  - ind :: Specify which column of the table to use as the ~x~ axis.
+  - deps :: Specify the columns to graph as a Lisp style list,
+            surrounded by parentheses and separated by spaces for
+            example ~dep:(3 4)~ to graph the third and fourth columns
+            (defaults to graphing all other columns aside from the
+            ~ind~ column).
+  - type :: Specify whether the plot will be ~2d~, ~3d~, or ~grid~.
+  - with :: Specify a ~with~ option to be inserted for every col being
+            plotted (e.g., ~lines~, ~points~, ~boxes~, ~impulses~,
+            etc.).  Defaults to ~lines~.
+  - file :: If you want to plot to a file, specify
+            ~"{path/to/desired/output-file}"~.
+  - labels :: List of labels to be used for the ~deps~ (defaults to
+              the column headers if they exist).
+  - line :: Specify an entire line to be inserted in the Gnuplot
+            script.
+  - map :: When plotting ~3d~ or ~grid~ types, set this to ~t~ to
+           graph a flat mapping rather than a ~3d~ slope.
+  - timefmt ::  Specify format of Org mode timestamps as they will be
+                parsed by Gnuplot.  Defaults to
+                {{{samp(%Y-%m-%d-%H:%M:%S)}}}.
+  - script :: If you want total control, you can specify a script file
+              (place the file name between double-quotes) which will
+              be used to plot.  Before plotting, every instance of
+              ~$datafile~ in the specified script will be replaced
+              with the path to the generated data file.  Note: even if
+              you set this option, you may still want to specify the
+              plot type, as that can impact the content of the data
+              file.
+
+* Hyperlinks
+  :PROPERTIES:
+  :DESCRIPTION: Notes in context
+  :ORDERED:  t
+  :END:
+{{{cindex(hyperlinks)}}}
+
+Like HTML, Org provides links inside a file, external links to
+other files, Usenet articles, emails, and much more.
+
+** Link format
+   :PROPERTIES:
+   :DESCRIPTION: How links in Org are formatted
+   :END:
+{{{cindex(link format)}}}
+{{{cindex(format\\\, of links)}}}
+
+Org will recognize plain URL-like links and activate them as clickable
+links.  The general link format, however, looks like this:
+
+#+begin_src org
+  [[link][description]] or  [[link]]
+#+end_src
+
+
+{{{noindent}}} Once a link in the buffer is complete (all brackets
+present), Org will change the display so that {{{samp(description)}}}
+is displayed instead of ~[[link][description]]~ and {{{samp(link)}}}
+is displayed instead of ~[[link]]~.  Links will be highlighted
+in the face ~org-link~, which by default is an underlined face.  You
+can directly edit the visible part of a link.  Note that this can be
+either the {{{samp(link)}}} part (if there is no description) or the
+{{{samp(description)}}} part.  To edit also the invisible
+{{{samp(link)}}} part, use {{{kbd(C-c C-l)}}} with the cursor on the
+link.
+
+If you place the cursor at the beginning or just behind the end of the
+displayed text and press {{{key(BACKSPACE)}}}, you will remove the
+(invisible) bracket at that location.  This makes the link incomplete
+and the internals are again displayed as plain text.  Inserting the
+missing bracket hides the link internals again.  To show the internal
+structure of all links, use the menu entry ~Org->Hyperlinks->Literal
+links~.
+
+** Internal links
+   :PROPERTIES:
+   :DESCRIPTION: Links to other places in the current file
+   :END:
+{{{cindex(internal links)}}}
+{{{cindex(links\\\, internal)}}}
+{{{cindex(targets\\\, for links)}}}
+{{{cindex(property\\\, CUSTOM_ID)}}}
+
+If the link does not look like a URL, it is considered to be internal
+in the current file.  The most important case is a link like
+~[[#my-custom-id]]~ which will link to the entry with the
+~CUSTOM_ID~ property {{{samp(my-custom-id)}}}.  Such custom IDs are
+very good for HTML export (see [[HTML export]]) where they produce pretty
+section links.  You are responsible yourself to make sure these custom
+IDs are unique in a file.
+
+Links such as the two in the following example:
+
+#+begin_example
+   [[My Target]] or [[My Target][Find my target]]
+#+end_example
+
+{{{noindent}}} lead to a text search in the current file.
+
+The link can be followed with {{{kbd(C-c C-o)}}} when the cursor is on
+the link, or with a mouse click (see [[Handling links]]).  Links to custom
+IDs will point to the corresponding headline.  The preferred match for
+a text link is a /dedicated target/: the same string in double angular
+brackets.  Targets may be located anywhere; sometimes it is convenient
+to put them into a comment line.  For example
+
+#+begin_src org
+  # <<My Target>>
+#+end_src
+
+{{{noindent}}} In HTML export (see [[HTML export]]), such targets will
+become named anchors for direct access through {{{samp(http)}}}
+links.[fn:31]
+
+If no dedicated target exists, Org will search for a headline that is
+exactly the link text but may also include a TODO keyword and
+tags.[fn:32] In non-Org files, the search will look for the words in
+the link text. In the above example the search would be for ~my target~.
+
+Following a link pushes a mark onto Org's own mark ring.  You can
+return to the previous position with {{{kbd(C-c &)}}}.  Using this
+command several times in direct succession goes back to positions
+recorded earlier.
+
+** Radio targets
+    :PROPERTIES:
+    :DESCRIPTION: Automatically create internal links
+    :END:
+{{{cindex(radio targets)}}}
+{{{cindex(targets\\\, radio)}}}
+{{{cindex(links\\\, radio targets)}}}
+
+Org can automatically turn any occurrences of certain target names in
+normal text into a link. So without explicitly creating a link, the
+text connects to the target radioing its position. Radio targets are
+enclosed by triple angular brackets. For example, a target
+~<<<My Target>>>~ causes each occurrence of ~my target~ in
+normal text to become activated as a link. The Org file is scanned
+automatically for radio targets only when the file is first loaded
+into Emacs. To update the target list during editing, press 
+{{{kbd(C-c C-c)}}} with the cursor on or at a target.
+
+** External links
+   :PROPERTIES:
+   :DESCRIPTION: URL-like links to the world
+   :END:
+{{{cindex(links\\\, external)}}}
+{{{cindex(external links)}}}
+{{{cindex(links\\\, external)}}}
+{{{cindex(Gnus links)}}}
+{{{cindex(BBDB links)}}}
+{{{cindex(IRC links)}}}
+{{{cindex(URL links)}}}
+{{{cindex(file links)}}}
+{{{cindex(VM links)}}}
+{{{cindex(RMAIL links)}}}
+{{{cindex(WANDERLUST links)}}}
+{{{cindex(MH-E links)}}}
+{{{cindex(USENET links)}}}
+{{{cindex(SHELL links)}}}
+{{{cindex(Info links)}}}
+{{{cindex(Elisp links)}}}
+
+Org supports links to files, websites, Usenet and email messages, BBDB
+database entries and links to both IRC conversations and their logs.
+External links are URL-like locators.  They start with a short
+identifying string followed by a colon.  There can be no space after
+the colon.  The following list shows examples for each link type.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+ - ~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 file[fn:33]
+ - ~file:projects.org::*task title~            :: heading search in Org file
+ - ~file+sys:/path/to/file~                    :: open via OS, like double-click
+ - ~file+emacs:/path/to/file~                  :: force opening by Emacs
+ - ~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
+ - ~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
+ - ~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 link
+ - ~shell:ls *.org~                            :: A shell command
+ - ~elisp:org-agenda~                          :: Interactive Elisp command
+ - ~elisp:(find-file-other-frame "Elisp.org")~ :: Elisp form to evaluate
+
+
+For customizing Org to add new link types [[Adding hyperlink types]].
+
+A link should be enclosed in double brackets and may contain a
+descriptive text to be displayed instead of the URL (see [[Link format]]),
+for example:
+
+#+begin_src org
+  [[http://www.gnu.org/software/emacs/][GNU Emacs]]
+#+end_src
+
+{{{noindent}}} If the description is a file name or URL that points to
+an image, HTML export (see [[HTML export]]) will inline the image as a
+clickable button.  If there is no description at all and the link
+points to an image, that image will be inlined into the exported HTML
+file.
+
+{{{cindex(square brackets\\\, around links)}}}
+{{{cindex(plain text external links)}}}
+
+Org also finds external links in the normal text and activates them as
+links.  If spaces must be part of the link (for example in
+{{{samp(bbdb:Richard Stallman)}}}), or if you need to remove
+ambiguities about the end of the link, enclose them in square
+brackets.
+
+** Handling links
+   :PROPERTIES:
+   :DESCRIPTION: URL-like links to the world
+   :END:
+{{{cindex(links\\\, handling)}}}
+
+Org provides methods to create a link in the correct syntax, to
+insert it into an Org file, and to follow the link.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+  - {{{kbd(C-c l)}}}, ~org-store-link~ :: Store a link to the current
+       location.  This is a /global/ command (you must create the key
+       binding yourself) which can be used in any buffer to create a
+       link.  The link will be stored for later insertion into an Org
+       buffer (see below).  What kind of link will be created depends
+       on the current buffer:
+
+       {{{cindex(storing links)}}}
+       {{{kindex(C-c l)}}}
+       {{{findex(org-store-link)}}}
+    - Org mode buffers :: For Org files, if there is a
+         ~<<target>>~ at the cursor, the link points to the
+         target.  Otherwise it points to the current headline, which
+         will also be the description.[fn:34]
+
+         {{{vindex(org-link-to-org-use-id)}}}
+         {{{cindex(property\\\, CUSTOM_ID)}}}
+         {{{cindex(property\\\, ID)}}}
+
+         If the headline has a ~CUSTOM_ID~ property, a link to this
+         custom ID will be stored.  In addition or alternatively
+         (depending on the value of ~org-link-to-org-use-id~), a
+         globally unique ~ID~ property will be created and/or used to
+         construct a link.[fn:176]  So using this command in Org buffers will
+         potentially create two links: a human-readable link from the
+         custom ID, and one that is globally unique and works even if
+         the entry is moved from file to file.  Later, when inserting
+         the link, you need to decide which one to use.
+
+    - Email/News clients: VM, Rmail, Wanderlust, MH-E, Gnus :: Pretty
+         much all Emacs mail clients are supported.  The link will
+         point to the current article, or, in some GNUS buffers, to
+         the group.  The description is constructed from the author
+         and the subject.
+
+    - Web browsers: W3 and W3M :: Here the link will be the current
+         URL, with the page title as description.
+
+    - Contacts: BBDB :: Links created in a BBDB buffer will point to
+                        the current entry.
+    - Chat: IRC :: For IRC links, if you set the variable
+                   ~org-irc-link-to-logs~ to ~t~, a ~file:~
+                   style link to the relevant point in the logs for
+                   the current conversation is created. Otherwise an
+                   ~irc:/~ style link to the
+                   user/channel/server under the point will be stored.
+
+                   {{{vindex(org-irc-link-to-logs)}}}
+                   
+    - Other files :: For any other files, the link will point to the
+                     file, with a search string (see [[Search options]])
+                     pointing to the contents of the current line. If
+                     there is an active region, the selected words
+                     will form the basis of the search string. If the
+                     automatically created link is not working
+                     correctly or accurately enough, you can write
+                     custom functions to select the search string and
+                     to do the search for particular file types---see
+                     [[Custom searches]]. The key binding {{{kbd(C-c l)}}}
+                     is only a suggestion---see [[Installation]].
+
+    - Agenda view :: When the cursor is in an agenda view, the created
+                     link points to the entry referenced by the
+                     current line.
+
+  - {{{kbd(C-c C-l)}}}, ~org-insert-link~ :: Insert a link.[fn:35] This
+       prompts for a link to be inserted into the buffer. You can just
+       type a link, using text for an internal link, or one of the
+       link type prefixes mentioned in the examples above. The link
+       will be inserted into the buffer, along with a
+       descriptive text.[fn:36] If some text was selected when this command
+       is called, the selected text becomes the default description.
+
+       {{{cindex(link completion)}}} 
+       {{{cindex(completion\\\, of links)}}}
+       {{{cindex(inserting links)}}}
+       {{{vindex(org-keep-stored-link-after-insertion)}}}
+       {{{kindex(C-c C-l)}}}
+       {{{findex(org-insert-link)}}}
+    - Inserting stored links :: All links stored during the current
+         session are part of the history for this prompt, so you can
+         access them with {{{key(up)}}} and {{{key(down)}}} (or
+         {{{kbd(M-p/n)}}}).
+
+    - Completion support :: Completion with {{{key(TAB)}}} will help
+         you to insert valid link prefixes like ~http:~ or
+         ~ftp:~, including the prefixes defined through link
+         abbreviations (see [[Link abbreviations]]). If you press
+         {{{key(RET)}}} after inserting only the
+         {{{var(prefix)}}}, Org will offer specific completion
+         support for some link types.[fn:37] For example, if you type
+         {{{kbdspckey(file,RET)}}}, file name completion (alternative
+         access: {{{kbd(C-u C-c C-l)}}}, see below) will be offered,
+         and after {{{kbdspckey(bbdb,RET)}}} you can complete contact
+         names.
+
+  - {{{kbd(C-u C-c C-l)}}} :: When {{{kbd(C-c C-l)}}} is called with a
+       {{{kbd(C-u)}}} prefix argument, a link to a file will be
+       inserted and you may use file name completion to select the
+       name of the file. The path to the file is inserted relative to
+       the directory of the current Org file, if the linked file is in
+       the current directory or in a sub-directory of it, or if the
+       path is written relative to the current directory using
+       {{{samp(../)}}}. Otherwise an absolute path is used, if
+       possible with {{{samp(~/)}}} for your home directory. You can
+       force an absolute path with two {{{kbd(C-u)}}} prefixes.
+
+       {{{cindex(file name completion)}}} 
+       {{{cindex(completion\\\, of file names)}}} 
+       {{{kindex(C-u C-c C-l)}}}
+
+  - {{{kbd(C-c C-l)}}} (with cursor on existing link) :: When the
+       cursor is on an existing link, {{{kbd(C-c C-l)}}} allows you to
+       edit the link and description parts of the link.
+
+       {{{cindex(following links)}}} 
+
+    - {{{kbd(C-c C-o)}}}, ~org-open-at-point~ :: Open link at
+         point. This will launch a web browser for URLs (using
+         {{{command(browse-url-at-point)}}}), run
+         VM/MH-E/Wanderlust/Rmail/Gnus/BBDB for the corresponding
+         links, and execute the command in a shell link.  When the
+         cursor is on an internal link, this command runs the
+         corresponding search. When the cursor is on a TAG list in a
+         headline, it creates the corresponding TAGS view. If the
+         cursor is on a timestamp, it compiles the agenda for that
+         date. Furthermore, it will visit text and remote files in
+         ~file:~ links with Emacs and select a suitable
+         application for local non-text files. Classification of files
+         is based on file extension only. See option ~org-file-apps~.
+         If you want to override the default application and visit the
+         file with Emacs, use a {{{kbd(C-u)}}} prefix. If you want to
+         avoid opening in Emacs, use a {{{kbd(C-u C-u)}}} prefix. If
+         the cursor is on a headline, but not on a link, offer all
+         links in the headline and entry text. If you want to setup
+         the frame configuration for following links, customize
+         ~org-link-frame-setup~.
+
+         {{{vindex(org-file-apps)}}}
+         {{{vindex(org-link-frame-setup)}}} 
+         {{{kindex(C-c C-o)}}}
+         {{{findex(org-open-at-point)}}}
+    - {{{key(RET)}}} :: When ~org-return-follows-link~ is set,
+                        {{{key(RET)}}} will also follow the link at
+                        point.
+
+                        {{{vindex(org-return-follows-link)}}}
+                        {{{kindex(RET)}}}
+    - {{{key(mouse-2)}}} or {{{key(mouse-1)}}} :: On links,
+         {{{kbd(mouse-2)}}} will open the link just as {{{kbd(C-c C-o)}}} would. Under Emacs 22 and later, {{{kbd(mouse-1)}}}
+         will also follow a link.
+
+         {{{kindex(mouse-2)}}}
+         {{{kindex(mouse-1)}}}
+    - {{{key(mouse-3)}}} :: Like {{{kbd(mouse-2)}}}, but force file
+         links to be opened with Emacs, and internal links to be
+         displayed in another window.[fn:38]
+
+         {{{vindex(org-display-internal-link-with-indirect-buffer)}}}
+         {{{kindex(mouse-3)}}}
+    - {{{kbd(C-c C-x C-v)}}}, ~org-toggle-inline-images~ ::
+         {{{cindex(inlining images)}}}
+         {{{cindex(images\\\, inlining)}}}
+         {{{vindex(org-startup-with-inline-images)}}}
+         {{{cindex(~inlineimages~\\\, STARTUP keyword)}}}
+         {{{cindex(~noinlineimages~\\\, STARTUP keyword)}}}
+         {{{kindex(C-c C-x C-v)}}}
+         {{{findex(org-toggle-inline-images)}}}
+
+         Toggle the inline display of linked images.  Normally this
+         will only inline images that have no description part in the
+         link, i.e., images that will also be inlined during export.
+         When called with a prefix argument, also display images that
+         do have a link description.  You can ask for inline images to
+         be displayed at startup by configuring the variable
+         ~org-startup-with-inline-images~.[fn:177]
+
+    - {{{kbd(C-c %)}}}, ~org-mark-ring-push~ ::
+         {{{kindex(C-c %)}}}
+         {{{findex(org-mark-ring-push)}}}
+         {{{cindex(mark ring)}}}
+
+         Push the current position onto the mark ring, to be able to
+         return easily. Commands following an internal link do this
+         automatically.
+
+    - {{{kbd(C-c &)}}}, ~org-mark-ring-goto~ ::
+         {{{kindex(C-c &)}}}
+         {{{findex(org-mark-ring-goto)}}}
+         {{{cindex(links\\\, returning to)}}}
+
+         Jump back to a recorded position. A position is recorded by
+         the commands following internal links, and by {{{kbd(C-c %)}}}. Using this command several times in direct succession
+         moves through a ring of previously recorded positions.
+
+  - {{{kbd(C-c C-x C-n)}}}, ~org-next-link~ ::
+       @@info:@itemx@@ {{{kbd(C-c C-x C-p)}}}, ~org-previous-link~
+       {{{cindex(links\\\, finding next/previous)}}}
+       
+       {{{kindex(C-c C-x C-p)}}}
+       {{{findex(org-previous-link)}}}
+       {{{kindex(C-c C-x C-n)}}}
+       {{{findex(org-next-link)}}}
+
+       Move forward/backward to the next link in the buffer. At the
+       limit of the buffer, the search fails once, and then wraps
+       around. The key bindings for this are really too long; you
+       might want to bind this also to {{{kbd(C-n)}}} and
+       {{{kbd(C-p)}}}
+
+       #+header: :exports code
+       #+header: :eval no
+       #+begin_src emacs-lisp
+         (add-hook 'org-load-hook
+                   (lambda ()
+                     (define-key org-mode-map "\C-n" 'org-next-link)
+                     (define-key org-mode-map "\C-p" 'org-previous-link)))
+       #+end_src
+
+** Using links outside Org
+   :PROPERTIES:
+   :DESCRIPTION: Linking from my C source code?
+   :END:
+
+You can insert and follow links that have Org syntax not only in Org,
+but in any Emacs buffer.  For this, you should create two global
+commands, like this (please select suitable global keys yourself):
+
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+  (global-set-key "\C-c L" 'org-insert-link-global)
+  (global-set-key "\C-c o" 'org-open-at-point-global)
+#+end_src
+
+** Link abbreviations
+   :PROPERTIES:
+   :DESCRIPTION: Shortcuts for writing complex links
+   :END:
+{{{cindex(link abbreviations)}}}
+{{{cindex(abbreviation\\\, links)}}}
+
+Long URLs can be cumbersome to type, and often many similar links are
+needed in a document.  For this you can use link abbreviations.  An
+abbreviated link looks like this
+
+#+begin_src org
+[[linkword:tag][description]]
+#+end_src
+
+{{{vindex(org-link-abbrev-alist)}}}
+
+{{{noindent}}} where the tag is optional.  The /linkword/ must be a
+word, starting with a letter, followed by letters, numbers,
+{{{samp(-)}}}, and {{{samp(_)}}}.  Abbreviations are resolved
+according to the information in the variable ~org-link-abbrev-alist~
+that relates the linkwords to replacement text.  Here is an example:
+
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+  (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")))
+#+end_src
+
+If the replacement text contains the string {{{samp(%s)}}}, it will be
+replaced with the tag.  Using {{{samp(%h)}}} instead of {{{samp(%s)}}}
+will url-encode the tag (see the example above, where we need to
+encode the URL parameter.)  Using {{{samp(%(my-function))}}} will pass
+the tag to a custom function, and replace it by the resulting string.
+
+If the replacement text don't contain any specifier, it will simply be
+appended to the string in order to create the link.
+
+Instead of a string, you may also specify a function that will be
+called with the tag as the only argument to create the link.
+
+With the above setting, you could link to a specific bug with
+~[[bugzilla:129]]~, search the web for {{{samp(OrgMode)}}} with
+~[[google:OrgMode]]~, show the map location of the Free Software
+Foundation ~[[gmap:51 Franklin Street, Boston]]~ or of Carsten office
+~[[omap:Science Park 904, Amsterdam, The Netherlands]]~ and find out what
+the Org author is doing besides Emacs hacking with ~[[ads:Dominik,C]]~.
+
+If you need special abbreviations just for a single Org buffer, you
+can define them in the file with
+
+{{{cindex(#+LINK)}}}
+#+begin_src org
+  ,#+LINK: bugzilla  http://10.1.2.9/bugzilla/show_bug.cgi?id=
+  ,#+LINK: google    http://www.google.com/search?q=%s
+#+end_src
+
+{{{noindent}}} In-buffer completion (see [[Completion]]) can be used after
+{{{samp([)}}} to complete link abbreviations.  You may also define a
+function ~org-PREFIX-complete-link~ that implements special (e.g.,
+completion) support for inserting such a link with {{{kbd(C-c C-l)}}}.
+Such a function should not accept any arguments, and return the full
+link with prefix.
+
+** Search options
+   :PROPERTIES:
+   :DESCRIPTION: Linking to a specific location
+   :END:
+{{{cindex(search option in file links)}}}
+{{{cindex(file links\\\, searching)}}}
+
+File links can contain additional information to make Emacs jump to a
+particular location in the file when following a link.  This can be a
+line number or a search option after a double colon.[fn:39]
+For example, when the command {{{kbd(C-c l)}}} creates a link (see
+[[Handling links]]) to a file, it encodes the words in the current line as
+a search string that can be used to find this line back later when
+following the link with {{{kbd(C-c C-o)}}}.
+
+Here is the syntax of the different ways to attach a search to a file
+link, together with an explanation:
+
+#+begin_src org
+  [[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/]]
+#+end_src
+
+#+attr_texinfo: :indic "@code"
+- 255 :: Jump to line 255.
+- My Target :: Search for a link target ~<<My Target>>~, or do a text search for {{{samp(my target)}}},
+     similar to the search in internal links, see [[Internal links]].
+     In HTML export (see [[HTML export]]), such a file link will
+     become a HTML reference to the corresponding named anchor in the
+     linked file.
+- *My Target :: In an Org file, restrict search to headlines.
+- #my-custom-id :: Link to a heading with a ~CUSTOM_ID~ property
+- /regexp/ :: Do a regular expression search for ~regexp~.  This
+                    uses the Emacs command ~occur~ to list all matches
+                    in a separate window.  If the target file is in
+                    Org mode, ~org-occur~ is used to create a sparse
+                    tree with the matches. @c If the target file is a
+                    directory, @c ~grep~ will be used to search all
+                    files in the directory.
+
+As a degenerate case, a file link with an empty file name can be used
+to search the current file.  For example, ~[[file:::find me]]~ does a
+search for ~find me~ in the current file, just as
+~[[find me]]~ would.
+
+** Custom searches
+   :PROPERTIES:
+   :DESCRIPTION: When the default search is not enough
+   :END:
+{{{cindex(custom search strings)}}}
+{{{cindex(search strings\\\, custom)}}}
+
+The default mechanism for creating search strings and for doing the
+actual search related to a file link may not work correctly in all
+cases.  For example, {{{bibtex}}} database files have many entries
+like {{{samp(year="1993")}}} which would not result in good search
+strings, because the only unique identification for a {{{bibtex}}}
+entry is the citation key.
+
+{{{vindex(org-create-file-search-functions)}}}
+{{{vindex(org-execute-file-search-functions)}}}
+
+If you come across such a problem, you can write custom functions to
+set the right search string for a particular file type, and to do the
+search for the string in the file.  Using ~add-hook~, these functions
+need to be added to the hook variables
+~org-create-file-search-functions~ and
+~org-execute-file-search-functions~.  See the docstring for these
+variables for more information.  Org actually uses this mechanism for
+{{{bibtex}}} database files, and you can use the corresponding code as
+an implementation example.  See the file {{{file(org-bibtex.el)}}}.
+
+* TODO items
+  :PROPERTIES:
+  :DESCRIPTION: Every tree branch can be a TODO item
+  :OPTIONAL_TITLE: TODO Items
+  :END:
+{{{cindex(TODO items)}}}
+
+Org mode does not maintain TODO lists as separate documents.[fn:40]
+Instead, TODO items are an integral part of the notes file, because
+TODO items usually come up while taking notes! With Org mode, simply
+mark any entry in a tree as being a TODO item. In this way,
+information is not duplicated, and the entire context from which the
+TODO item emerged is always present.
+
+Of course, this technique for managing TODO items scatters them
+throughout your notes file.  Org mode compensates for this by providing
+methods to give you an overview of all the things that you have to do.
+
+** TODO basics
+   :PROPERTIES:
+   :DESCRIPTION: Marking and displaying TODO entries
+   :TITLE:    Basic TODO functionality
+   :END:
+
+Any headline becomes a TODO item when it starts with the word
+{{{samp(TODO)}}}, for example:
+
+#+begin_src org
+  ,*** TODO Write letter to Sam Fortune
+#+end_src
+
+{{{noindent}}} The most important commands to work with TODO entries
+are:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-t)}}}, ~org-todo~ ::
+  {{{kindex(C-c C-t)}}}
+  {{{cindex(cycling\\\, of TODO states)}}}
+
+  Rotate the TODO state of the current item among
+
+  #+begin_example
+     ,-> (unmarked) -> TODO -> DONE --.
+     '--------------------------------'
+  #+end_example
+
+ The same rotation can also be done ``remotely'' from the timeline and
+ agenda buffers with the {{{kbd(t)}}} command key (see [[Agenda commands]]).
+
+- {{{kbd(C-u C-c C-t)}}} ::
+  {{{kindex(C-u C-c C-t)}}}
+
+  Select a specific keyword using completion or (if it has been set up)
+  the fast selection interface.  For the latter, you need to assign keys
+  to TODO states, see [[Per-file keywords]], and [[Setting tags]], for
+  more information.
+
+  {{{kindex(S-@key{right})}}}
+  {{{kindex(S-@key{left})}}}
+
+- {{{kbdkey(S-,right)}}} {{{kbdkey(S-,left)}}} ::
+
+  {{{vindex(org-treat-S-cursor-todo-selection-as-state-change)}}}
+
+     Select the following/preceding TODO state, similar to cycling.
+     Useful mostly if more than two TODO states are possible 
+     (see [[TODO extensions]]). See also [[Conflicts]], for a discussion of the
+     interaction with ~shift-selection-mode~. See also the variable
+     ~org-treat-S-cursor-todo-selection-as-state-change~.
+
+- {{{kbd(C-c / t)}}}, ~org-show-todo-tree~ ::
+  {{{kindex(C-c / t)}}}
+
+  {{{cindex(sparse tree\\\, for TODO)}}}
+  {{{vindex(org-todo-keywords)}}}
+
+  View TODO items in a /sparse tree/ (see [[Sparse trees]]). Folds the entire
+  buffer, but shows all TODO items (with not-DONE state) and the
+  headings hierarchy above them. With a prefix argument (or by using
+  {{{kbd(C-c / T)}}}), search for a specific TODO. You will be
+  prompted for the keyword, and you can also give a list of keywords
+  like ~KWD1|KWD2|...~ to list entries that match any one of these
+  keywords. With a numeric prefix argument N, show the tree for the
+  Nth keyword in the variable ~org-todo-keywords~. With two prefix
+  arguments, find all TODO states, both un-done and done.
+
+- {{{kbd(C-c a t)}}}, ~org-todo-list~ ::
+  {{{kindex(C-c a t)}}}
+
+  Show the global TODO list.  Collects the TODO items (with not-DONE states)
+  from all agenda files (see [[Agenda views]]) into a single buffer.  The new
+  buffer will be in ~agenda-mode~, which provides commands to examine and
+  manipulate the TODO entries from the new buffer (see [[Agenda commands]]).
+  See [[Global TODO list]], for more information.
+
+- {{{kbdkey(S-M-,RET)}}}, ~org-insert-todo-heading~ ::
+  {{{kindex(S-M-@key{RET})}}}
+
+   Insert a new TODO entry below the current one.
+
+
+{{{noindent}}}
+{{{vindex(org-todo-state-tags-triggers)}}}
+Changing a TODO state can also trigger tag changes.  See the docstring of the
+option ~org-todo-state-tags-triggers~ for details.
+
+** TODO extensions
+   :PROPERTIES:
+   :DESCRIPTION: Work flow and assignments
+   :TITLE:    Extended use of TODO keywords
+   :END:
+
+{{{cindex(extended TODO keywords)}}}
+
+{{{vindex(org-todo-keywords)}}}
+
+By default, marked TODO entries have one of only two states: TODO and
+DONE. Org mode allows you to classify TODO items in more complex ways
+with /TODO keywords/ (stored in ~org-todo-keywords~). With special
+setup, the TODO keyword system can work differently in different
+files.
+
+Note that /tags/ are another way to classify headlines in general and
+TODO items in particular (see [[Tags]]).
+
+*** Workflow states
+    :PROPERTIES:
+    :DESCRIPTION: From TODO to DONE in steps
+    :TITLE:    TODO keywords as workflow states
+    :END:
+{{{cindex(TODO workflow)}}}
+{{{cindex(workflow states as TODO keywords)}}}
+
+You can use TODO keywords to indicate different /sequential/ states
+in the process of working on an item, for example:[fn:41]
+
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+(setq org-todo-keywords
+  '((sequence "TODO" "FEEDBACK" "VERIFY" "|" "DONE" "DELEGATED")))
+#+end_src
+
+The vertical bar separates the TODO keywords (states that /need
+action/) from the DONE states (which need /no further action/).  If
+you don't provide the separator bar, the last state is used as the DONE
+state.
+
+{{{cindex(completion\\\, of TODO keywords)}}}
+
+With this setup, the command {{{kbd(C-c C-t)}}} will cycle an entry
+from TODO to FEEDBACK, then to VERIFY, and finally to DONE and
+DELEGATED. You may also use a numeric prefix argument to quickly
+select a specific state. For example {{{kbd(C-3 C-c C-t)}}} will
+change the state immediately to VERIFY. Or you can use
+{{{kbdkey(S-,left)}}} to go backward through the sequence. If you
+define many keywords, you can use in-buffer completion (see [[Completion]]) or
+even a special one-key selection scheme (see [[Fast access to TODO states]])
+to insert these words into the buffer. Changing a TODO state can be
+logged with a timestamp, see [[Tracking TODO state changes]], for
+more information.
+
+*** TODO types
+    :PROPERTIES:
+    :DESCRIPTION: I do this, Fred does the rest
+    :TITLE:    TODO keywords as types
+    :END:
+{{{cindex(TODO types)}}}
+{{{cindex(names as TODO keywords)}}}
+{{{cindex(types as TODO keywords)}}}
+
+The second possibility is to use TODO keywords to indicate different
+/types/ of action items.  For example, you might want to indicate
+that items are for ``work'' or ``home''.  Or, when you work with several
+people on a single project, you might want to assign action items
+directly to persons, by using their names as TODO keywords.  This would
+be set up like this:
+
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+(setq org-todo-keywords '((type "Fred" "Sara" "Lucy" "|" "DONE")))
+#+end_src
+
+In this case, different keywords do not indicate a sequence, but rather
+different types.  So the normal work flow would be to assign a task to a
+person, and later to mark it DONE.  Org mode supports this style by adapting
+the workings of the command {{{kbd(C-c C-t)}}}.[fn:42]  When used several
+times in succession, it will still cycle through all names, in order to first
+select the right type for a task.  But when you return to the item after some
+time and execute {{{kbd(C-c C-t)}}} again, it will switch from any name directly
+to DONE.  Use prefix arguments or completion to quickly select a specific
+name.  You can also review the items of a specific TODO type in a sparse tree
+by using a numeric prefix to {{{kbd(C-c / t)}}}.  For example, to see all things
+Lucy has to do, you would use {{{kbd(C-3 C-c / t)}}}.  To collect Lucy's items
+from all agenda files into a single buffer, you would use the numeric prefix
+argument as well when creating the global TODO list: {{{kbd(C-3 C-c a t)}}}.
+
+*** Multiple sets in one file
+    :PROPERTIES:
+    :DESCRIPTION: Mixing it all, and still finding your way
+    :TITLE:    Multiple keyword sets in one file
+    :END:
+{{{cindex(TODO keyword sets)}}}
+
+Sometimes you may want to use different sets of TODO keywords in
+parallel.  For example, you may want to have the basic
+~TODO~ / ~DONE~, but also a workflow for bug fixing, and a
+separate state indicating that an item has been canceled (so it is not
+DONE, but also does not require action).  Your setup would then look
+like this:
+
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+(setq org-todo-keywords
+      '((sequence "TODO" "|" "DONE")
+        (sequence "REPORT" "BUG" "KNOWNCAUSE" "|" "FIXED")
+        (sequence "|" "CANCELED")))
+#+end_src
+
+The keywords should all be different, this helps Org mode to keep track
+of which subsequence should be used for a given entry.  In this setup,
+{{{kbd(C-c C-t)}}} only operates within a subsequence, so it switches from
+~DONE~ to (nothing) to ~TODO~, and from ~FIXED~ to
+(nothing) to ~REPORT~.  Therefore you need a mechanism to initially
+select the correct sequence.  Besides the obvious ways like typing a
+keyword or using completion, you may also apply the following commands:
+
+{{{kindex(C-S-@key{right})}}}
+{{{kindex(C-S-@key{left})}}}
+{{{kindex(C-u C-u C-c C-t)}}}
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-u C-u C-c C-t)}}} {{{kbdkey(C-S-,right)}}} {{{kbdkey(C-S-,left)}}} ::
+
+  These keys jump from one TODO subset to the next. In the above
+  example, {{{kbd(C-u C-u C-c C-t)}}} or {{{kbdkey(C-S-,right)}}}
+  would jump from ~TODO~ or ~DONE~ to ~REPORT~, and any of the
+  words in the second row to ~CANCELED~. Note that the
+  {{{kbd(C-S-)}}} key binding conflict with ~shift-selection-mode~
+  (see [[Conflicts]]).
+
+- {{{kbdkey(S-,right)}}} {{{kbdkey(S-,left)}}} ::
+  {{{kindex(S-@key{right})}}}
+  {{{kindex(S-@key{left})}}}
+
+  {{{kbdkey(S-,left)}}} and {{{kbdkey(S-,right)}}} walk through /all/
+  keywords from all sets, so for example {{{kbdkey(S-,right)}}} would switch
+  from ~DONE~ to ~REPORT~ in the example above.  See also
+  [[Conflicts]], for a discussion of the interaction with
+  ~shift-selection-mode~.
+
+*** Fast access to TODO states
+    :PROPERTIES:
+    :DESCRIPTION: Single letter selection of state
+    :END:
+If you would like to quickly change an entry to an arbitrary TODO state
+instead of cycling through the states, you can set up keys for single-letter
+access to the states.  This is done by adding the selection character after
+each keyword, in parentheses.[fn:43]  For example:
+
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+(setq org-todo-keywords
+      '((sequence "TODO(t)" "|" "DONE(d)")
+        (sequence "REPORT(r)" "BUG(b)" "KNOWNCAUSE(k)" "|" "FIXED(f)")
+        (sequence "|" "CANCELED(c)")))
+#+end_src
+
+{{{vindex(org-fast-tag-selection-include-todo)}}}
+
+If you then press {{{kbd(C-c C-t)}}} followed by the selection key,
+the entry will be switched to this state. {{{kbd(SPC)}}} can be used
+to remove any TODO keyword from an entry.[fn:44]
+
+*** Per-file keywords
+    :PROPERTIES:
+    :DESCRIPTION: Different files, different requirements
+    :TITLE:    Setting up keywords for individual files
+    :END:
+{{{cindex(keyword options)}}}
+{{{cindex(per-file keywords)}}}
+{{{cindex(#+TODO)}}}
+{{{cindex(#+TYP_TODO)}}}
+{{{cindex(#+SEQ_TODO)}}}
+
+It can be very useful to use different aspects of the TODO mechanism in
+different files.  For file-local settings, you need to add special lines
+to the file which set the keywords and interpretation for that file
+only.  For example, to set one of the two examples discussed above, you
+need one of the following lines, starting in column zero anywhere in the
+file:
+
+#+begin_example
+   ,#+TODO: TODO FEEDBACK VERIFY | DONE CANCELED
+#+end_example
+
+{{{noindent}}} (you may also write ~#+SEQ_TODO~ to be explicit about the
+interpretation, but it means the same as ~#+TODO~), or
+
+#+begin_example
+   ,#+TYP_TODO: Fred Sara Lucy Mike | DONE
+#+end_example
+
+A setup for using several sets in parallel would be:
+
+#+begin_example
+   ,#+TODO: TODO | DONE
+   ,#+TODO: REPORT BUG KNOWNCAUSE | FIXED
+   ,#+TODO: | CANCELED
+#+end_example
+
+{{{cindex(completion\\\, of option keywords)}}}
+{{{kindex(M-@key{TAB})}}}
+{{{noindent}}} To make sure you are using the correct keyword, type
+{{{samp(#+)}}} into the buffer and then use {{{kbdkey(M-,TAB)}}} completion.
+
+{{{cindex(DONE\\\, final TODO keyword)}}}
+Remember that the keywords after the vertical bar (or the last keyword
+if no bar is there) must always mean that the item is DONE (although you
+may use a different word).  After changing one of these lines, use
+{{{kbd(C-c C-c)}}} with the cursor still in the line to make the changes
+known to Org mode.[fn:45]
+
+*** Faces for TODO keywords
+    :PROPERTIES:
+    :DESCRIPTION: Highlighting states
+    :END:
+{{{cindex(faces\\\, for TODO keywords)}}}
+{{{vindex(org-todo @r{(face)})}}}
+{{{vindex(org-done @r{(face)})}}}
+{{{vindex(org-todo-keyword-faces)}}}
+
+Org mode highlights TODO keywords with special faces: ~org-todo~
+for keywords indicating that an item still has to be acted upon, and
+~org-done~ for keywords indicating that an item is finished.  If
+you are using more than 2 different states, you might want to use
+special faces for some of them.  This can be done using the variable
+~org-todo-keyword-faces~.  For example:
+
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+(setq org-todo-keyword-faces
+      '(("TODO" . org-warning) ("STARTED" . "yellow")
+        ("CANCELED" . (:foreground "blue" :weight bold))))
+#+end_src
+
+While using a list with face properties as shown for CANCELED /should/
+work, this does not always seem to be the case.  If necessary, define a
+special face and use that.  A string is interpreted as a color.  The variable
+~org-faces-easy-properties~ determines if that color is interpreted as a
+foreground or a background color.
+
+*** TODO dependencies
+    :PROPERTIES:
+    :DESCRIPTION: When one task needs to wait for others
+    :END:
+{{{cindex(TODO dependencies)}}}
+{{{cindex(dependencies\\\, of TODO states)}}}
+{{{vindex(org-enforce-todo-dependencies)}}}
+{{{cindex(property\\\, ORDERED)}}}
+
+The structure of Org files (hierarchy and lists) makes it easy to define TODO
+dependencies.  Usually, a parent TODO task should not be marked DONE until
+all subtasks (defined as children tasks) are marked as DONE.  And sometimes
+there is a logical sequence to a number of (sub)tasks, so that one task
+cannot be acted upon before all siblings above it are done.  If you customize
+the variable ~org-enforce-todo-dependencies~, Org will block entries
+from changing state to DONE while they have children that are not DONE.
+Furthermore, if an entry has a property ~ORDERED~, each of its children
+will be blocked until all earlier siblings are marked DONE.  Here is an
+example:
+
+#+begin_src org
+  ,* 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)
+#+end_src
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-x o)}}}, ~org-toggle-ordered-property~ ::
+  {{{kindex(C-c C-x o)}}}
+  {{{vindex(org-track-ordered-property-with-tag)}}}
+  {{{cindex(property\\\, ORDERED)}}}
+
+  Toggle the ~ORDERED~ property of the current entry.  A property is used
+  for this behavior because this should be local to the current entry, not
+  inherited like a tag.  However, if you would like to /track/ the value of
+  this property with a tag for better visibility, customize the variable
+  ~org-track-ordered-property-with-tag~.
+- {{{kbd(C-u C-u C-u C-c C-t)}}} ::
+  {{{kindex(C-u C-u C-u C-c C-t)}}}
+
+  Change TODO state, circumventing any state blocking.
+
+
+{{{vindex(org-agenda-dim-blocked-tasks)}}}
+
+If you set the variable ~org-agenda-dim-blocked-tasks~, TODO entries
+that cannot be closed because of such dependencies will be shown in a dimmed
+font or even made invisible in agenda views (see [[Agenda views]]).
+
+{{{cindex(checkboxes and TODO dependencies)}}}
+{{{vindex(org-enforce-todo-dependencies)}}}
+
+You can also block changes of TODO states by looking at checkboxes
+(see [[Checkboxes]]).  If you set the variable
+~org-enforce-todo-checkbox-dependencies~, an entry that has unchecked
+checkboxes will be blocked from switching to DONE.
+
+If you need more complex dependency structures, for example dependencies
+between entries in different trees or files, check out the contributed
+module {{{file(org-depend.el)}}}.
+
+{{{page}}}
+
+** Progress logging
+   :PROPERTIES:
+   :DESCRIPTION: Dates and notes for progress
+   :END:
+{{{cindex(progress logging)}}}
+{{{cindex(logging\\\, of progress)}}}
+
+Org mode can automatically record a timestamp and possibly a note when
+you mark a TODO item as DONE, or even each time you change the state of
+a TODO item.  This system is highly configurable, settings can be on a
+per-keyword basis and can be localized to a file or even a subtree.  For
+information on how to clock working time for a task, see [[Clocking work time]].
+
+*** Closing items
+    :PROPERTIES:
+    :DESCRIPTION: When was this entry marked DONE?
+    :END:
+
+The most basic logging is to keep track of /when/ a certain TODO
+item was finished.  This is achieved with:[fn:46]
+
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+(setq org-log-done 'time)
+#+end_src
+
+{{{noindent}}} Then each time you turn an entry from a TODO (not-done)
+state into any of the DONE states, a line {{{samp(CLOSED: [timestamp])}}} will be inserted just after the headline. If you turn
+the entry back into a TODO item through further state cycling, that
+line will be removed again. If you want to record a note along with
+the timestamp, use:[fn:47]
+
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+(setq org-log-done 'note)
+#+end_src
+
+{{{noindent}}} You will then be prompted for a note, and that note
+will be stored below the entry with a {{{samp(Closing Note)}}}
+heading.
+
+In the timeline (see [[Timeline for a single file]]) and in the agenda
+(see [[Weekly/daily agenda]]), you can then use the {{{kbd(l)}}} key to
+display the TODO items with a {{{samp(CLOSED)}}} timestamp on each
+day, giving you an overview of what has been done.
+
+*** Tracking TODO state changes
+    :PROPERTIES:
+    :DESCRIPTION: When did the status change?
+    :END:
+{{{cindex(drawer\\\, for state change recording)}}}
+{{{vindex(org-log-states-order-reversed)}}}
+{{{vindex(org-log-into-drawer)}}}
+{{{cindex(property\\\, LOG_INTO_DRAWER)}}}
+
+When TODO keywords are used as workflow states (see [[Workflow
+states]]), you might want to keep track of when a state change occurred
+and maybe take a note about this change. You can either record just a
+timestamp, or a time-stamped note for a change. These records will be
+inserted after the headline as an itemized list, newest first.[fn:48]
+When taking a lot of notes, you might want to get the notes out of the
+way into a drawer (see [[Drawers]]). Customize the variable
+~org-log-into-drawer~ to get this behavior---the recommended drawer
+for this is called ~LOGBOOK~.[fn:178] You can also overrule the setting
+of this variable for a subtree by setting a ~LOG_INTO_DRAWER~
+property.
+
+Since it is normally too much to record a note for every state, Org
+mode expects configuration on a per-keyword basis for this. This is
+achieved by adding special markers {{{samp(!)}}} (for a timestamp) or
+{{{samp(@)}}} (for a note with timestamp) in parentheses after each
+keyword. For example, with the setting:
+
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+(setq org-todo-keywords
+  '((sequence "TODO(t)" "WAIT(w@@/!)" "|" "DONE(d!)" "CANCELED(c@@)")))
+#+end_src
+
+{{{noindent}}}
+{{{vindex(org-log-done)}}}
+
+you not only define global TODO keywords and fast access keys, but
+also request that a time is recorded when the entry is set to
+DONE, and that a note is recorded when switching to WAIT or
+CANCELED.[fn:49] The setting for WAIT is even more special: the {{{samp(!)}}}
+after the slash means that in addition to the note taken when entering
+the state, a timestamp should be recorded when /leaving/ the WAIT
+state, if and only if the /target/ state does not configure logging
+for entering it. So it has no effect when switching from WAIT to DONE,
+because DONE is configured to record a timestamp only. But when
+switching from WAIT back to TODO, the {{{samp(/!)}}} in the WAIT
+setting now triggers a timestamp even though TODO has no logging
+configured.
+
+To record a timestamp without a note for TODO keywords configured with
+{{{samp(@)}}}, just type {{{kbd(C-c C-c)}}} to enter a blank note
+when prompted.
+
+You can use the exact same syntax for setting logging preferences local
+to a buffer:
+
+#+begin_example
+   ,#+TODO: TODO(t) WAIT(w@/!) | DONE(d!) CANCELED(c@)
+#+end_example
+
+{{{cindex(property\\\, LOGGING)}}}
+
+In order to define logging settings that are local to a subtree or a
+single item, define a LOGGING property in this entry.  Any non-empty
+LOGGING property resets all logging settings to nil.  You may then turn
+on logging for this specific tree using STARTUP keywords like
+~lognotedone~ or ~logrepeat~, as well as adding state specific
+settings like ~TODO(!)~.  For example:
+
+#+begin_example
+   ,* TODO Log each state with only a time
+     :PROPERTIES:
+     :LOGGING: TODO(!) WAIT(!) DONE(!) CANCELED(!)
+     :END:
+   ,* TODO Only log when switching to WAIT, and when repeating
+     :PROPERTIES:
+     :LOGGING: WAIT(@) logrepeat
+     :END:
+   ,* TODO No logging at all
+     :PROPERTIES:
+     :LOGGING: nil
+     :END:
+#+end_example
+
+*** Tracking your habits
+    :LOGBOOK:
+    - State "DONE"       from "DONE"       [2013-01-07 Mon 14:10]
+    - State "DONE"       from ""           [2013-01-07 Mon 14:10]
+    :END:
+    :PROPERTIES:
+    :DESCRIPTION: How consistent have you been?
+    :END:
+{{{cindex(habits)}}}
+
+Org has the ability to track the consistency of a special category of TODOs,
+called "habits."  A habit has the following properties:
+
+  1. You have enabled the ~habits~ module by customizing the variable
+     ~org-modules~.
+
+  2. The habit is a TODO item, with a TODO keyword representing an
+     open state.
+
+  3. The property ~STYLE~ is set to the value ~habit~.
+
+  4. The TODO has a scheduled date, usually with a ~.+~ style repeat
+     interval. A ~++~ style may be appropriate for habits with time
+     constraints, e.g., must be done on weekends, or a ~+~ style for
+     an unusual habit that can have a backlog, e.g., weekly reports.
+
+  5. The TODO may also have minimum and maximum ranges specified by
+     using the syntax {{{samp(.+2d/3d)}}}, which says that you want to
+     do the task at least every three days, but at most every two
+     days.
+
+  6. You must also have state logging for the ~DONE~ state enabled
+     (see [[Tracking TODO state changes]]), in order for historical
+     data to be represented in the consistency graph. If it is not
+     enabled it is not an error, but the consistency graphs will be
+     largely meaningless.
+
+
+To give you an idea of what the above rules look like in action, here's an
+actual habit with some history:
+
+#+begin_example
+   ,** TODO Shave
+      SCHEDULED: <2009-10-17 Sat .+2d/4d>
+      - State "DONE"       from "TODO"       [2009-10-15 Thu]
+      - State "DONE"       from "TODO"       [2009-10-12 Mon]
+      - State "DONE"       from "TODO"       [2009-10-10 Sat]
+      - State "DONE"       from "TODO"       [2009-10-04 Sun]
+      - State "DONE"       from "TODO"       [2009-10-02 Fri]
+      - State "DONE"       from "TODO"       [2009-09-29 Tue]
+      - State "DONE"       from "TODO"       [2009-09-25 Fri]
+      - State "DONE"       from "TODO"       [2009-09-19 Sat]
+      - State "DONE"       from "TODO"       [2009-09-16 Wed]
+      - State "DONE"       from "TODO"       [2009-09-12 Sat]
+      :PROPERTIES:
+      :STYLE:    habit
+      :LAST_REPEAT: [2009-10-19 Mon 00:36]
+      :END:
+#+end_example
+
+What this habit says is: I want to shave at most every 2 days (given
+by the ~SCHEDULED~ date and repeat interval) and at least every 4
+days. If today is the 15th, then the habit first appears in the agenda
+on Oct 17, after the minimum of 2 days has elapsed, and will appear
+overdue on Oct 19, after four days have elapsed.
+
+What's really useful about habits is that they are displayed along
+with a consistency graph, to show how consistent you've been at
+getting that task done in the past. This graph shows every day that
+the task was done over the past three weeks, with colors for each day.
+The colors used are:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+  - ~Blue~ :: If the task wasn't to be done yet on that day.
+  - ~Green~ :: If the task could have been done on that day.
+  - ~Yellow~ :: If the task was going to be overdue the next day.
+  - ~Red~ :: If the task was overdue on that day.
+
+
+In addition to coloring each day, the day is also marked with an
+asterisk if the task was actually done that day, and an exclamation
+mark to show where the current day falls in the graph.
+
+There are several configuration variables that can be used to change
+the way habits are displayed in the agenda.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+  - ~org-habit-graph-column~ :: The buffer column at which the
+       consistency graph should be drawn. This will overwrite any text
+       in that column, so it is a good idea to keep your habits'
+       titles brief and to the point.
+
+  - ~org-habit-preceding-days~ :: The amount of history, in days before
+       today, to appear in consistency graphs.
+
+  - ~org-habit-following-days~ :: The number of days after today that
+       will appear in consistency graphs.
+
+  - ~org-habit-show-habits-only-for-today~ :: If non-nil, only show
+       habits in today's agenda view. This is set to true by default.
+
+
+Lastly, pressing {{{kbd(K)}}} in the agenda buffer will cause habits
+to temporarily be disabled and they won't appear at all. Press
+{{{kbd(K)}}} again to bring them back. They are also subject to tag
+filtering, if you have habits which should only be done in certain
+contexts, for example.
+
+** FIXME Priorities
+   :PROPERTIES:
+   :DESCRIPTION: Some things are more important than others
+   :END:
+{{{cindex(priorities)}}}
+
+If you use Org mode extensively, you may end up with enough TODO items that
+it starts to make sense to prioritize them.  Prioritizing can be done by
+placing a /priority cookie/ into the headline of a TODO item, like this:
+
+#+begin_example
+   ,*** TODO [#A] Write letter to Sam Fortune
+#+end_example
+
+{{{vindex(org-priority-faces)}}}
+
+{{{noindent}}} By default, Org mode supports three priorities: {{{samp(A)}}},
+{{{samp(B)}}}, and {{{samp(C)}}}. {{{samp(A)}}} is the highest
+priority. An entry without a cookie is treated just like priority
+{{{samp(B)}}}. Priorities make a difference only for sorting in the
+agenda (see [[Weekly/daily agenda]]); outside the agenda, they have no
+inherent meaning to Org mode. The cookies can be highlighted with
+special faces by customizing the variable ~org-priority-faces~.
+
+Priorities can be attached to any outline node; they do not need to be TODO
+items.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+  - {{{kbd(C-c XXX)}}} ::
+    {{{kindex(C-c ,)}}}
+    #+comment:    {{{kindex(@kbd{C-c ,})}}}
+    #+comment: Preceding line won't export to pdf
+    {{{findex(org-priority)}}}
+    #+comment: Should be C-c ,
+    Set the priority of the current headline (~org-priority~). The
+    command prompts for a priority character {{{samp(A)}}}, {{{samp(B)}}}
+    or {{{samp(C)}}}. When you press {{{key(SPC)}}}} instead, the priority
+    cookie is removed from the headline. The priorities can also be
+    changed ``remotely'' from the timeline and agenda buffer with the
+    {{{kbd(,)}}} command (see [[Agenda commands]]).
+  
+  - {{{kbdkey(S-,up)}}}, {{{kbdkey(S-,down)}}}, {{{command(org-priority-up)}}}, {{{command(org-priority-down)}}} ::
+    {{{vindex(org-priority-start-cycle-with-default)}}}
+    
+    Increase/decrease priority of current headline.[fn:50] Note
+    that these keys are also used to modify timestamps
+    (see [[Creating timestamps]]). See also [[Conflicts]], for a
+    discussion of the interaction with ~shift-selection-mode~.
+
+
+{{{vindex(org-highest-priority)}}}
+{{{vindex(org-lowest-priority)}}}
+{{{vindex(org-default-priority)}}}
+
+You can change the range of allowed priorities by setting the
+variables ~org-highest-priority~, ~org-lowest-priority~, and
+~org-default-priority~. For an individual buffer, you may set these
+values (highest, lowest, default) like this (please make sure that the
+highest priority is earlier in the alphabet than the lowest priority):
+
+{{{cindex(#+PRIORITIES)}}}
+
+#+begin_example
+   ,#+PRIORITIES: A C B
+#+end_example
+
+** Breaking down tasks
+   :PROPERTIES:
+   :DESCRIPTION: Splitting a task into manageable pieces
+   :END:
+{{{cindex(tasks\\\, breaking down)}}}
+{{{cindex(statistics\\\, for TODO items)}}}
+{{{vindex(org-agenda-todo-list-sublevels)}}}
+
+It is often advisable to break down large tasks into smaller,
+manageable subtasks. You can do this by creating an outline tree below
+a TODO item, with detailed subtasks on the tree.[fn:51] To keep the
+overview over the fraction of subtasks that are already completed,
+insert either {{{samp([/])}}} or {{{samp([%])}}} anywhere in the
+headline. These cookies will be updated each time the TODO status of a
+child changes, or when pressing {{{kbd(C-c C-c)}}} on the cookie. For
+example:
+
+#+begin_example
+   ,* Organize Party [33%]
+   ,** TODO Call people [1/2]
+   ,*** TODO Peter
+   ,*** DONE Sarah
+   ,** TODO Buy food
+   ,** DONE Talk to neighbor
+#+end_example
+
+{{{cindex(property\\\, COOKIE_DATA)}}}
+
+If a heading has both checkboxes and TODO children below it, the
+meaning of the statistics cookie become ambiguous. Set the property
+~COOKIE_DATA~ to either {{{samp(checkbox)}}} or {{{samp(todo)}}} to
+resolve this issue.
+
+{{{vindex(org-hierarchical-todo-statistics)}}}
+
+If you would like to have the statistics cookie count any TODO entries
+in the subtree (not just direct children), configure the variable
+~org-hierarchical-todo-statistics~. To do this for a single subtree,
+include the word {{{samp(recursive)}}} into the value of the
+~COOKIE_DATA~ property.
+
+#+begin_example
+   ,* Parent capturing statistics [2/20]
+     :PROPERTIES:
+     :COOKIE_DATA: todo recursive
+     :END:
+#+end_example
+
+If you would like a TODO entry to automatically change to DONE
+when all children are done, you can use the following setup:
+
+#+header: :exports code
+#+header: :eval no
+#+begin_src emacs-lisp
+(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)
+#+end_src
+
+Another possibility is the use of checkboxes to identify (a hierarchy
+of) a large number of subtasks (see [[Checkboxes]]).
+
+** Checkboxes
+   :PROPERTIES:
+   :DESCRIPTION: Tick-off lists
+   :END:
+
+{{{cindex(checkboxes)}}}
+{{{vindex(org-list-automatic-rules)}}}
+
+Every item in a plain list (see [[Plain lists]]) can be made into a
+checkbox by starting it with the string {{{samp([ ])}}}.[fn:52] This
+feature is similar to TODO items (see [[TODO items]]), but is more
+lightweight. Checkboxes are not included into the global TODO list, so
+they are often great to split a task into a number of simple steps. Or
+you can use them in a shopping list. To toggle a checkbox, use
+{{{kbd(C-c C-c)}}}, or use the mouse (thanks to Piotr Zielinski's
+{{{file(org-mouse.el)}}}).
+
+Here is an example of a checkbox list.
+
+#+begin_example
+   ,* 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
+#+end_example
+
+Checkboxes work hierarchically, so if a checkbox item has children
+that are checkboxes, toggling one of the children checkboxes will make
+the parent checkbox reflect if none, some, or all of the children are
+checked.
+
+{{{cindex(statistics\\\, for checkboxes)}}}
+{{{cindex(checkbox statistics)}}}
+{{{cindex(property\\\, COOKIE_DATA)}}}
+{{{vindex(org-hierarchical-checkbox-statistics)}}}
+
+The {{{samp([2/4])}}} and {{{samp([1/3])}}} in the first and second
+line are cookies indicating how many checkboxes present in this entry
+have been checked off, and the total number of checkboxes present.
+This can give you an idea on how many checkboxes remain, even without
+opening a folded entry. The cookies can be placed into a headline or
+into (the first line of) a plain list item. Each cookie covers
+checkboxes of direct children structurally below the headline/item on
+which the cookie appears.[fn:53] You have to insert the cookie
+yourself by typing either {{{samp([/])}}} or {{{samp([%])}}}. With
+{{{samp([/])}}} you get an {{{samp(n out of m)}}} result, as in the
+examples above. With {{{samp([%])}}} you get information about the
+percentage of checkboxes checked (in the above example, this would be
+{{{samp([50%])}}} and {{{samp([33%])}}}, respectively). In a headline,
+a cookie can count either checkboxes below the heading or TODO states
+of children, and it will display whatever was changed last. Set the
+property ~COOKIE_DATA~ to either {{{samp(checkbox)}}} or
+{{{samp(todo)}}} to resolve this issue.
+
+{{{cindex(blocking\\\, of checkboxes)}}}
+{{{cindex(checkbox blocking)}}}
+{{{cindex(property\\\, ORDERED)}}}
+
+If the current outline node has an ~ORDERED~ property, checkboxes must
+be checked off in sequence, and an error will be thrown if you try to
+check off a box while there are unchecked boxes above it.
+
+{{{noindent}}} The following commands work with checkboxes:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-c)}}}, ~org-toggle-checkbox~ :: Toggle checkbox status
+     or (with prefix arg) checkbox presence at point. With a single
+     prefix argument, add an empty checkbox or remove the current
+     one.[fn:54] With a double prefix argument, set it to
+     {{{samp([-])}}}, which is considered to be an intermediate state.
+
+- {{{kbd(C-c C-x C-b)}}}, ~org-toggle-checkbox~ :: Toggle checkbox
+     status or (with prefix arg) checkbox presence at point. With
+     double prefix argument, set it to {{{samp([-])}}}, which is
+     considered to be an intermediate state.
+
+  - If there is an active region, toggle the first checkbox in the region
+    and set all remaining boxes to the same status as the first.  With a prefix
+    arg, add or remove the checkbox for all items in the region.
+
+  - If the cursor is in a headline, toggle checkboxes in the region
+    between this headline and the next (so /not/ the entire subtree).
+
+  - If there is no active region, just toggle the checkbox at point.
+
+
+- {{{kbdkey(M-S-,RET)}}}, ~org-insert-todo-heading~ :: Insert a new
+     item with a checkbox. This works only if the cursor is already in
+     a plain list item (see [[Plain lists]]).
+
+- {{{kbd(C-c C-x o)}}}, ~org-toggle-ordered-property~ ::
+  {{{kindex(C-c C-x o)}}}
+  {{{vindex(org-track-ordered-property-with-tag)}}}
+  {{{cindex(property\\\, ORDERED)}}}
+  
+  Toggle the ~ORDERED~ property of the entry, to toggle if checkboxes
+  must be checked off in sequence. A property is used for this
+  behavior because this should be local to the current entry, not
+  inherited like a tag. However, if you would like to /track/ the
+  value of this property with a tag for better visibility,
+  customize the variable ~org-track-ordered-property-with-tag~.
+
+- {{{kbd(C-c #)}}}, ~org-update-statistics-cookies~ ::
+  {{{kindex(C-c #)}}}
+
+  Update the statistics cookie in the current outline entry. When
+  called with a {{{kbd(C-u)}}} prefix, update the entire file.
+  Checkbox statistic cookies are updated automatically if you
+  toggle checkboxes with {{{kbd(C-c C-c)}}} and make new ones with
+  {{{kbdkey(M-S-,RET)}}}. TODO statistics cookies update when
+  changing TODO states. If you delete boxes/entries or add/change
+  them by hand, use this command to get things back into sync.
+
+* Tags
+  :PROPERTIES:
+  :DESCRIPTION: Tagging headlines and matching sets of tags
+  :END:
+{{{cindex(tags)}}}
+{{{cindex(headline tagging)}}}
+{{{cindex(matching\\\, tags)}}}
+{{{cindex(sparse tree\\\, tag based)}}}
+
+An excellent way to implement labels and contexts for
+cross-correlating information is to assign /tags/ to headlines. Org
+mode has extensive support for tags.
+
+{{{vindex(org-tag-faces)}}}
+
+Every headline can contain a list of tags; they occur at the end of
+the headline. Tags are normal words containing letters, numbers,
+{{{samp(_)}}}, and {{{samp(@)}}}. Tags must be preceded and followed
+by a single colon, e.g., {{{samp(:work:)}}}. Several tags can be
+specified, as in {{{samp(:work:urgent:)}}}. Tags will by default be in
+bold face with the same color as the headline. You may specify special
+faces for specific tags using the variable ~org-tag-faces~, in much
+the same way as you can for TODO keywords (see [[Faces for TODO keywords]]).
+
+** Tag inheritance
+   :PROPERTIES:
+   :DESCRIPTION: Tags use the tree structure of an outline
+   :END:
+{{{cindex(tag inheritance)}}}
+{{{cindex(inheritance\\\, of tags)}}}
+{{{cindex(sublevels\\\, inclusion into tags match)}}}
+
+/Tags/ make use of the hierarchical structure of outline trees. If a
+heading has a certain tag, all subheadings will inherit the tag as
+well. For example, in the list
+
+#+begin_example
+   ,* Meeting with the French group      :work:
+   ,** Summary by Frank                  :boss:notes:
+   ,*** TODO Prepare slides for him      :action:
+#+end_example
+
+{{{noindent}}} the final heading will have the tags
+{{{samp(:work:)}}}, {{{samp(:boss:)}}}, {{{samp(:notes:)}}}, and
+{{{samp(:action:)}}} even though the final heading is not explicitly
+marked with those tags. You can also set tags that all entries in a
+file should inherit just as if these tags were defined in a
+hypothetical level zero that surrounds the entire file. Use a line
+like this:[fn:55]
+
+{{{cindex(#+FILETAGS)}}}
+#+begin_example
+   ,#+FILETAGS: :Peter:Boss:Secret:
+#+end_example
+
+{{{vindex(org-use-tag-inheritance)}}}
+{{{vindex(org-tags-exclude-from-inheritance)}}}
+
+{{{noindent}}} To limit tag inheritance to specific tags, or to turn
+it off entirely, use the variables ~org-use-tag-inheritance~ and
+~org-tags-exclude-from-inheritance~.
+
+{{{vindex(org-tags-match-list-sublevels)}}}
+
+When a headline matches during a tags search while tag inheritance is
+turned on, all the sublevels in the same tree will (for a simple match
+form) match as well.[fn:56] The list of matches may then become very
+long. If you only want to see the first tags match in a subtree,
+configure the variable ~org-tags-match-list-sublevels~ (not
+recommended).
+
+** Setting tags
+   :PROPERTIES:
+   :DESCRIPTION: How to assign tags to a headline
+   :END:
+{{{cindex(setting tags)}}}
+{{{cindex(tags\\\, setting)}}}
+
+{{{kindex(M-@key{TAB})}}}
+
+Tags can simply be typed into the buffer at the end of a headline.
+After a colon, {{{kbdkey(M-,TAB)}}} offers completion on tags.  There is
+also a special command for inserting tags:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-q)}}}, ~org-set-tags-command~ ::
+  {{{kindex(C-c C-q)}}}
+
+  {{{cindex(completion\\\, of tags)}}}
+  {{{vindex(org-tags-column)}}}
+
+  Enter new tags for the current headline.  Org mode will either offer
+  completion or a special single-key interface for setting tags, see
+  below.  After pressing {{{key(RET)}}}, the tags will be inserted and aligned
+  to ~org-tags-column~.  When called with a {{{kbd(C-u)}}} prefix, all
+  tags in the current buffer will be aligned to that column, just to make
+  things look nice.  TAGS are automatically realigned after promotion,
+  demotion, and TODO state changes (see [[TODO basics]]).
+
+- {{{kbd(C-c C-c)}}}, ~org-set-tags-command~ ::
+  {{{kindex(C-c C-c)}}}
+
+  When the cursor is in a headline, this does the same as {{{kbd(C-c C-q)}}}.
+
+
+{{{vindex(org-tag-alist)}}}
+
+Org supports tag insertion based on a /list of tags/. By default this
+list is constructed dynamically, containing all tags currently used in
+the buffer. You may also globally specify a hard list of tags with the
+variable ~org-tag-alist~. Finally you can set the default tags for a
+given file with lines like
+
+{{{cindex(#+TAGS)}}}
+#+begin_example
+   ,#+TAGS: @work @home @tennisclub
+   ,#+TAGS: laptop car pc sailboat
+#+end_example
+
+If you have globally defined your preferred set of tags using the
+variable ~org-tag-alist~, but would like to use a dynamic tag list
+in a specific file, add an empty TAGS option line to that file:
+
+#+begin_example
+   ,#+TAGS:
+#+end_example
+
+{{{vindex(org-tag-persistent-alist)}}}
+
+If you have a preferred set of tags that you would like to use in
+every file, in addition to those defined on a per-file basis by TAGS
+option lines, then you may specify a list of tags with the variable
+~org-tag-persistent-alist~. You may turn this off on a per-file basis
+by adding a STARTUP option line to that file:
+
+#+begin_example
+   ,#+STARTUP: noptag
+#+end_example
+
+By default Org mode uses the standard minibuffer completion facilities
+for entering tags. However, it also implements another, quicker, tag
+selection method called /fast tag selection/. This allows you to
+select and deselect tags with just a single key press. For this to
+work well you should assign unique letters to most of your commonly
+used tags. You can do this globally by configuring the variable
+~org-tag-alist~ in your {{{file(.emacs)}}} file. For example, you may
+find the need to tag many items in different files with
+{{{samp(:@home:)}}}. In this case you can set something like:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(setq org-tag-alist '(("@@work" . ?w) ("@@home" . ?h) ("laptop" . ?l)))
+#+end_src
+
+{{{noindent}}} If the tag is only relevant to the file you are working
+on, then you can instead set the TAGS option line as:
+
+#+begin_example
+   ,#+TAGS: @work(w)  @home(h)  @tennisclub(t)  laptop(l)  pc(p)
+#+end_example
+
+{{{noindent}}} The tags interface will show the available tags in a splash
+window.  If you want to start a new line after a specific tag, insert
+~\n~ into the tag list, like this:
+
+#+begin_example
+   ,#+TAGS: @work(w)  @home(h)  @tennisclub(t) \n laptop(l)  pc(p)
+#+end_example
+
+{{{noindent}}} or write them in two lines:
+
+#+begin_example
+   ,#+TAGS: @work(w)  @home(h)  @tennisclub(t)
+   ,#+TAGS: laptop(l)  pc(p)
+#+end_example
+
+{{{noindent}}}
+You can also group together tags that are mutually exclusive by using
+braces, as in:
+
+#+begin_example
+   ,#+TAGS: { @work(w)  @home(h)  @tennisclub(t) }  laptop(l)  pc(p)
+#+end_example
+
+{{{noindent}}} you indicate that at most one of {{{samp(@work)}}},
+{{{samp(@home)}}}, and {{{samp(@tennisclub)}}} should be selected.
+Multiple such groups are allowed.
+
+{{{noindent}}} Don't forget to press {{{kbd(C-c C-c)}}} with the
+cursor in one of these lines to activate any changes.
+
+{{{noindent}}} To set these mutually exclusive groups in the variable
+~org-tags-alist~, you must use the dummy tags ~:startgroup~ and
+~:endgroup~ instead of the braces. Similarly, you can use ~:newline~
+to indicate a line break. The previous example would be set globally
+by the following configuration:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(setq org-tag-alist '((:startgroup . nil)
+                      ("@@work" . ?w) ("@@home" . ?h)
+                      ("@@tennisclub" . ?t)
+                      (:endgroup . nil)
+                      ("laptop" . ?l) ("pc" . ?p)))
+#+end_src
+
+If at least one tag has a selection key then pressing {{{kbd(C-c C-c)}}} will
+automatically present you with a special interface, listing inherited tags,
+the tags of the current headline, and a list of all valid tags with
+corresponding keys.[fn:57]  In this interface, you can use the following
+keys:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(a-z...)}}} ::
+  {{{kindex(a-z...)}}}
+
+  Pressing keys assigned to tags will add or remove them from the list of
+  tags in the current line.  Selecting a tag in a group of mutually
+  exclusive tags will turn off any other tags from that group.
+
+- {{{key(TAB)}}} ::
+  {{{kindex(@key{TAB})}}}
+
+  Enter a tag in the minibuffer, even if the tag is not in the predefined
+  list.  You will be able to complete on all tags present in the buffer.
+  You can also add several tags: just separate them with a comma.
+
+- {{{key(SPC)}}} ::
+  {{{kindex(@key{SPC})}}}
+
+  Clear all tags for this line.
+
+- {{{key(RET)}}} ::
+  {{{kindex(@key{RET})}}}
+
+  Accept the modified set.
+
+- C-g ::
+
+  Abort without installing changes.
+
+- q ::
+
+  If {{{kbd(q)}}} is not assigned to a tag, it aborts like {{{kbd(C-g)}}}.
+
+- ! ::
+
+  Turn off groups of mutually exclusive tags.  Use this to (as an
+  exception) assign several tags from such a group.
+
+- C-c ::
+
+  Toggle auto-exit after the next change (see below).
+  If you are using expert mode, the first {{{kbd(C-c)}}} will display the
+  selection window.
+
+
+{{{noindent}}} This method lets you assign tags to a headline with
+very few keys. With the above setup, you could clear the current tags
+and set {{{samp(@home)}}}, {{{samp(laptop)}}} and {{{samp(pc)}}} tags
+with just the following keys: {{{ksksksk(C-c C-c,SPC,h l p,RET)}}}. Switching from {{{samp(@home)}}} to
+{{{samp(@work)}}} would be done with {{{kbdspckey(C-c C-c w,RET)}}} or
+alternatively with {{{kbd(C-c C-c C-c w)}}}. Adding the non-predefined
+tag {{{samp(Sarah)}}} could be done with 
+{{{ksksksksk(C-c C-c,TAB,S a r a h,RET,RET)}}}.
+
+{{{vindex(org-fast-tag-selection-single-key)}}}
+
+If you find that most of the time you need only a single key press to
+modify your list of tags, set the variable
+~org-fast-tag-selection-single-key~. Then you no longer have to press
+{{{key(RET)}}} to exit fast tag selection---it will immediately exit after
+the first change. If you then occasionally need more keys, press
+{{{kbd(C-c)}}} to turn off auto-exit for the current tag selection
+process (in effect: start selection with {{{kbd(C-c C-c C-c)}}}
+instead of {{{kbd(C-c C-c)}}}). If you set the variable to the value
+~expert~, the special window is not even shown for single-key tag
+selection, it comes up only when you press an extra {{{kbd(C-c)}}}.
+
+** Tag searches
+   :PROPERTIES:
+   :DESCRIPTION: Searching for combinations of tags
+   :END:
+{{{cindex(tag searches)}}}
+{{{cindex(searching for tags)}}}
+
+Once a system of tags has been set up, it can be used to collect related
+information into special lists.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c / m)}}}, ~C-c \~ ~org-match-sparse-tree~ ::
+
+  Create a sparse tree with all headlines matching a tags search. With a
+  {{{kbd(C-u)}}} prefix argument, ignore headlines that are not a TODO
+  line.
+
+- {{{kbd(C-c a m)}}}, ~org-tags-view~ ::
+  {{{kindex(C-c a m)}}}
+
+  Create a global list of tag matches from all agenda files.
+  See [[Matching tags and properties]].
+
+- {{{kbd(C-c a M)}}}, ~org-tags-view~ ::
+  {{{kindex(C-c a M)}}}
+  {{{vindex(org-tags-match-list-sublevels)}}}
+
+  Create a global list of tag matches from all agenda files, but check
+  only TODO items and force checking subitems (see variable
+  ~org-tags-match-list-sublevels~).
+
+
+These commands all prompt for a match string which allows basic
+Boolean logic like {{{samp(+boss+urgent-project1)}}}, to find entries
+with tags {{{samp(boss)}}} and {{{samp(urgent)}}}, but not
+{{{samp(project1)}}}, or {{{samp(Kathy|Sally)}}} to find entries which
+are tagged, like {{{samp(Kathy)}}} or {{{samp(Sally)}}}. The full
+syntax of the search string is rich and allows also matching against
+TODO keywords, entry levels and properties. For a complete description
+with many examples, see [[Matching tags and properties]].
+
+* Properties and columns
+  :PROPERTIES:
+  :DESCRIPTION: Storing information about an entry
+  :OPTIONAL_TITLE: Properties and Columns
+  :END:
+{{{cindex(properties)}}}
+
+A property is a key-value pair associated with an entry. Properties
+can be set so they are associated with a single entry, with every
+entry in a tree, or with every entry in an Org mode file.
+
+There are two main applications for properties in Org mode. First,
+properties are like tags, but with a value. Imagine maintaining a file
+where you document bugs and plan releases for a piece of software.
+Instead of using tags like ~:release_1:~, ~:release_2:~, you can use a
+property, say ~:Release:~, that in different subtrees has different
+values, such as ~1.0~ or ~2.0~. Second, you can use properties to
+implement (very basic) database capabilities in an Org buffer. Imagine
+keeping track of your music CDs, where properties could be things such
+as the album, artist, date of release, number of tracks, and so on.
+
+Properties can be conveniently edited and viewed in column view
+(see [[Column view]]).
+
+** Property syntax
+   :PROPERTIES:
+   :DESCRIPTION: How properties are spelled out
+   :END:
+{{{cindex(property syntax)}}}
+{{{cindex(drawer\\\, for properties)}}}
+
+Properties are key-value pairs. When they are associated with a single
+entry or with a tree they need to be inserted into a special drawer
+(see [[Drawers]]) with the name ~PROPERTIES~. Each property is specified
+on a single line, with the key (surrounded by colons) first, and the
+value after it. Here is an example:
+
+#+begin_example
+   ,* CD collection
+   ,** Classic
+   ,*** Goldberg Variations
+   ,    :PROPERTIES:
+   ,    :Title:     Goldberg Variations
+   ,    :Composer:  J.S. Bach
+   ,    :Artist:    Glen Gould
+   ,    :Publisher: Deutsche Grammophon
+   ,    :NDisks:    1
+   ,    :END:
+#+end_example
+
+Depending on the value of ~org-use-property-inheritance~, a property
+set this way will either be associated with a single entry, or the
+sub-tree defined by the entry, see [[Property inheritance]].
+
+You may define the allowed values for a particular property
+{{{samp(:Xyz:)}}} by setting a property {{{samp(:Xyz_ALL:)}}}. This
+special property is /inherited/, so if you set it in a level 1 entry,
+it will apply to the entire tree. When allowed values are defined,
+setting the corresponding property becomes easier and is less prone to
+typing errors. For the example with the CD collection, we can
+predefine publishers and the number of disks in a box like this:
+
+#+begin_example
+   ,* CD collection
+   ,  :PROPERTIES:
+   ,  :NDisks_ALL:  1 2 3 4
+   ,  :Publisher_ALL: "Deutsche Grammophon" Philips EMI
+   ,  :END:
+#+end_example
+
+If you want to set properties that can be inherited by any entry in a
+file, use a line like:
+
+{{{cindex(property\\\, _ALL)}}}
+{{{cindex(#+PROPERTY)}}}
+#+begin_example
+   ,#+PROPERTY: NDisks_ALL 1 2 3 4
+#+end_example
+
+If you want to add to the value of an existing property, append a ~+~
+to the property name. The following results in the property ~var~
+having the value ``foo=1 bar=2''.
+
+{{{cindex(property\\\, +)}}}
+#+begin_example
+   ,#+PROPERTY: var  foo=1
+   ,#+PROPERTY: var+ bar=2
+#+end_example
+
+It is also possible to add to the values of inherited properties. The
+following results in the ~genres~ property having the value ``Classic
+Baroque'' under the ~Goldberg Variations~ subtree.
+
+{{{cindex(property\\\, +)}}}
+#+begin_example
+   ,* CD collection
+   ,** Classic
+   ,    :PROPERTIES:
+   ,    :GENRES: Classic
+   ,    :END:
+   ,*** Goldberg Variations
+   ,    :PROPERTIES:
+   ,    :Title:     Goldberg Variations
+   ,    :Composer:  J.S. Bach
+   ,    :Artist:    Glen Gould
+   ,    :Publisher: Deutsche Grammophon
+   ,    :NDisks:    1
+   ,    :GENRES+:   Baroque
+   ,    :END:
+#+end_example
+Note that a property can only have one entry per Drawer.
+
+{{{vindex(org-global-properties)}}}
+
+Property values set with the global variable ~org-global-properties~
+can be inherited by all entries in all Org files.
+
+{{{noindent}}}
+The following commands help to work with properties:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbdkey(M-,TAB)}}}, ~pcomplete~ ::
+  {{{kindex(M-@key{TAB})}}}
+
+  After an initial colon in a line, complete property keys. All keys
+  used in the current file will be offered as possible completions.
+
+- {{{kbd(C-c C-x p)}}}, ~org-set-property~ ::
+  {{{kindex(C-c C-x p)}}}
+
+  Set a property. This prompts for a property name and a value. If
+  necessary, the property drawer is created as well.
+
+- C-u M-x org-insert-drawer
+  {{{cindex(org-insert-drawer)}}}
+
+  Insert a property drawer into the current entry. The drawer will be
+  inserted early in the entry, but after the lines with planning
+  information like deadlines.
+
+- {{{kbd(C-c C-c)}}}, ~org-property-action~ ::
+  {{{kindex(C-c C-c)}}}
+
+  With the cursor in a property drawer, this executes property commands.
+
+- {{{kbd(C-c C-c s)}}}, ~org-set-property~ ::
+  {{{kindex(C-c C-c s)}}}
+
+  Set a property in the current entry.  Both the property and the value
+  can be inserted using completion.
+
+- {{{kbdkey(S-,right)}}} {{{kbdkey(S-,left)}}}, ~org-property-next-allowed-value~ ~org-property-previous-allowed-value~ ::
+  {{{kindex(S-@key{right})}}}
+
+  Switch property at point to the next/previous allowed value.
+
+- {{{kbd(C-c C-c d)}}}, ~org-delete-property~ ::
+  {{{kindex(C-c C-c d)}}}
+
+  Remove a property from the current entry.
+
+- {{{kbd(C-c C-c D)}}}, ~org-delete-property-globally~ ::
+  {{{kindex(C-c C-c D)}}}
+
+  Globally remove a property, from all entries in the current file.
+
+- {{{kbd(C-c C-c c)}}}, ~org-compute-property-at-point~ ::
+  {{{kindex(C-c C-c c)}}}
+
+  Compute the property at point, using the operator and scope from the
+  nearest column format definition.
+
+** Special properties
+   :PROPERTIES:
+   :DESCRIPTION: Access to other Org mode features
+   :END:
+{{{cindex(properties\\\, special)}}}
+
+Special properties provide an alternative access method to Org mode
+features, like the TODO state or the priority of an entry, discussed
+in the previous chapters. This interface exists so that you can
+include these states in a column view (see [[Column view]]), or to use
+them in queries. The following property names are special and (except
+for ~:CATEGORY:~) should not be used as keys in the properties drawer:
+
+{{{cindex(property\\\, special\\\, ID)}}}
+{{{cindex(property\\\, special\\\, TODO)}}}
+{{{cindex(property\\\, special\\\, TAGS)}}}
+{{{cindex(property\\\, special\\\, ALLTAGS)}}}
+{{{cindex(property\\\, special\\\, CATEGORY)}}}
+{{{cindex(property\\\, special\\\, PRIORITY)}}}
+{{{cindex(property\\\, special\\\, DEADLINE)}}}
+{{{cindex(property\\\, special\\\, SCHEDULED)}}}
+{{{cindex(property\\\, special\\\, CLOSED)}}}
+{{{cindex(property\\\, special\\\, TIMESTAMP)}}}
+{{{cindex(property\\\, special\\\, TIMESTAMP_IA)}}}
+{{{cindex(property\\\, special\\\, CLOCKSUM)}}}
+{{{cindex(property\\\, special\\\, CLOCKSUM_T)}}}
+{{{cindex(property\\\, special\\\, BLOCKED)}}}
+#+comment:  guessing that ITEM is needed in this area; also, should this list be sorted?
+{{{cindex(property\\\, special\\\, ITEM)}}}
+{{{cindex(property\\\, special\\\, FILE)}}}
+
+#+attr_texinfo: :columns "0.3 0.7"
+| ID           | A globally unique ID used for synchronization during           |
+|              | iCalendar or MobileOrg export.                                 |
+| TODO         | The TODO keyword of the entry.                                 |
+| TAGS         | The tags defined directly in the headline.                     |
+| ALLTAGS      | All tags, including inherited ones.                            |
+| CATEGORY     | The category of an entry.                                      |
+| PRIORITY     | The priority of the entry, a string with a single letter.      |
+| DEADLINE     | The deadline time string, without the angular brackets.        |
+| SCHEDULED    | The scheduling timestamp, without the angular brackets.        |
+| CLOSED       | When was this entry closed?                                    |
+| TIMESTAMP    | The first keyword-less timestamp in the entry.                 |
+| TIMESTAMP_IA | The first inactive timestamp in the entry.                     |
+| CLOCKSUM     | The sum of CLOCK intervals in the subtree.  ~org-clock-sum~    |
+|              | must be run first to compute the values in the current buffer. |
+| CLOCKSUM_T   | The sum of CLOCK intervals in the subtree for today.           |
+|              | ~org-clock-sum-today~ must be run first to compute the         |
+|              | values in the current buffer.                                  |
+| BLOCKED      | "t" if task is currently blocked by children or siblings       |
+| ITEM         | The headline of the entry.                                     |
+| FILE         | The filename the entry is located in.                          |
+
+** Property searches
+   :PROPERTIES:
+   :DESCRIPTION: Matching property values
+   :END:
+{{{cindex(properties\\\, searching)}}}
+{{{cindex(searching\\\, of properties)}}}
+
+To create sparse trees and special lists with selection based on properties,
+the same commands are used as for tag searches (see [[Tag searches]]).
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c / m)}}}, ~C-c \~ ~org-match-sparse-tree~ ::
+  {{{kindex(C-c / m)}}}
+
+  Create a sparse tree with all matching entries. With a {{{kbd(C-u)}}}
+  prefix argument, ignore headlines that are not a TODO line.
+
+- {{{kbd(C-c a m)}}}, ~org-tags-view~ ::
+  {{{kindex(C-c a m)}}}
+
+  Create a global list of tag/property matches from all agenda files.
+  See [[Matching tags and properties]].
+
+- {{{kbd(C-c a M)}}}, ~org-tags-view~ ::
+  {{{kindex(C-c a M)}}}
+  {{{vindex(org-tags-match-list-sublevels)}}}
+
+  Create a global list of tag matches from all agenda files, but check
+  only TODO items and force checking of subitems (see variable
+  ~org-tags-match-list-sublevels~).
+
+
+The syntax for the search string is described in [[Matching tags and
+properties]].
+
+There is also a special command for creating sparse trees based on a
+single property:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c / p)}}} ::
+  {{{kindex(C-c / p)}}}
+
+  Create a sparse tree based on the value of a property. This first
+  prompts for the name of a property, and then for a value. A sparse
+  tree is created with all entries that define this property with the
+  given value. If you enclose the value in curly braces, it is
+  interpreted as a regular expression and matched against the property
+  values.
+
+** Property inheritance
+   :PROPERTIES:
+   :DESCRIPTION: Passing values down a tree
+   :END:
+{{{cindex(properties\\\, inheritance)}}}
+{{{cindex(inheritance\\\, of properties)}}}
+
+{{{vindex(org-use-property-inheritance)}}}
+
+The outline structure of Org mode documents lends itself to an
+inheritance model of properties: if the parent in a tree has a certain
+property, the children can inherit this property. Org mode does not
+turn this on by default, because it can slow down property searches
+significantly and is often not needed. However, if you find
+inheritance useful, you can turn it on by setting the variable
+~org-use-property-inheritance~. It may be set to ~t~ to make all
+properties inherited from the parent, to a list of properties that
+should be inherited, or to a regular expression that matches inherited
+properties. If a property has the value {{{samp(nil)}}}, this is
+interpreted as an explicit undefine of the property, so that
+inheritance search will stop at this value and return ~nil~.
+
+Org mode has a few properties for which inheritance is hard-coded, at
+least for the special applications for which they are used:
+
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~COLUMNS~ ::
+  {{{cindex(property\\\, COLUMNS)}}}
+
+  The ~:COLUMNS:~ property defines the format of column view (see [[Column
+  view]]). It is inherited in the sense that the level where a ~:COLUMNS:~
+  property is defined is used as the starting point for a column view
+  table, independently of the location in the subtree from where columns
+  view is turned on.
+
+- ~CATEGORY~ ::
+  {{{cindex(property\\\, CATEGORY)}}}
+
+  For agenda view, a category set through a ~:CATEGORY:~ property
+  applies to the entire subtree.
+
+- ~ARCHIVE~ ::
+  {{{cindex(property\\\, ARCHIVE)}}}
+
+  For archiving, the ~:ARCHIVE:~ property may define the archive
+  location for the entire subtree (see [[Moving subtrees]]).
+
+- ~LOGGING~ ::
+  {{{cindex(property\\\, LOGGING)}}}
+
+  The LOGGING property may define logging settings for an entry or a
+  subtree (see [[Tracking TODO state changes]]).
+
+** Column view
+   :PROPERTIES:
+   :DESCRIPTION: Tabular viewing and editing
+   :END:
+
+A great way to view and edit properties in an outline tree is /column
+view/. In column view, each outline node is turned into a table row.
+Columns in this table provide access to properties of the entries. Org
+mode implements columns by overlaying a tabular structure over the
+headline of each item. While the headlines have been turned into a
+table row, you can still change the visibility of the outline tree.
+For example, you get a compact table by switching to CONTENTS view
+({{{kbdkey(S-,TAB)}}}} {{{kbdkey(S-,TAB)}}}), or simply {{{kbd(c)}}} while
+column view is active), but you can still open, read, and edit the
+entry below each headline. Or, you can switch to column view after
+executing a sparse tree command and in this way get a table only for
+the selected items. Column view also works in agenda buffers (see
+[[Agenda views]]) where queries have collected selected items, possibly
+from a number of files.
+
+*** Defining columns
+    :PROPERTIES:
+    :DESCRIPTION: The COLUMNS format property
+    :END:
+{{{cindex(column view\\\, for properties)}}}
+{{{cindex(properties\\\, column view)}}}
+
+Setting up a column view first requires defining the columns.  This is
+done by defining a column format line.
+
+**** Scope of column definitions
+     :PROPERTIES:
+     :DESCRIPTION: Where defined, where valid?
+     :END:
+
+To define a column format for an entire file, use a line like:
+
+{{{cindex(#+COLUMNS)}}}
+#+begin_example
+   ,#+COLUMNS: %25ITEM %TAGS %PRIORITY %TODO
+#+end_example
+
+To specify a format that only applies to a specific tree, add a
+~:COLUMNS:~ property to the top node of that tree, for example:
+
+#+begin_example
+   ,** Top node for columns view
+   ,   :PROPERTIES:
+   ,   :COLUMNS: %25ITEM %TAGS %PRIORITY %TODO
+   ,   :END:
+#+end_example
+
+If a ~:COLUMNS:~ property is present in an entry, it defines columns
+for the entry itself, and for the entire subtree below it. Since the
+column definition is part of the hierarchical structure of the
+document, you can define columns on level 1 that are general enough
+for all sublevels, and more specific columns further down, when you
+edit a deeper part of the tree.
+
+**** Column attributes
+     :PROPERTIES:
+     :DESCRIPTION: Appearance and content of a column
+     :END:
+A column definition sets the attributes of a column.  The general
+definition looks like this:
+
+  %[{{{var(width)}}}]{{{var(property)}}}[({{{var(title)}}})][{{{{var(summary-type)}}}}]
+
+{{{noindent}}} Except for the percent sign and the property name, all
+items are optional. The individual parts have the following meaning:
+
+#+attr_texinfo: :columns "0.2 0.8"
+| Variable                | Meaning                                                      |
+|-------------------------+--------------------------------------------------------------|
+| {{{var(width)}}}        | An integer specifying the width of the column in characters. |
+|                         | If omitted, the width will be determined automatically.      |
+| {{{var(property)}}}     | The property that should be edited in this column.           |
+|                         | Special properties representing meta data are allowed here   |
+|                         | as well (see [[Special properties]])                         |
+| {{{var(title)}}}        | The header text for the column.  If omitted, the property    |
+|                         | name is used.                                                |
+| {{{var(summary-type)}}} | The summary type.  If specified, the column values for       |
+|                         | parent nodes are computed from the children.                 |
+
+{{{noindent}}} Supported summary types are:
+
+#+attr_texinfo: :columns "0.2 0.8"
+| Type     | Meaning                                                               |
+|----------+-----------------------------------------------------------------------|
+| ~+~      | Sum numbers in this column.                                           |
+| ~+;%.1f~ | Like ~+~, but format result with {{{samp(%.1f)}}}.                    |
+| ~$~      | Currency, short for {{{samp(+;%.2f)}}}.                               |
+| ~:~      | Sum times, HH:MM, plain numbers are hours.                            |
+| ~X~      | Checkbox status, {{{samp([X])}}} if all children are {{{samp([X])}}}. |
+| ~X/~     | Checkbox status, {{{samp([n/m])}}}.                                   |
+| ~X%~     | Checkbox status, {{{samp([n%])}}}.                                    |
+| ~min~    | Smallest number in column.                                            |
+| ~max~    | Largest number.                                                       |
+| ~mean~   | Arithmetic mean of numbers.                                           |
+| ~:min~   | Smallest time value in column.                                        |
+| ~:max~   | Largest time value.                                                   |
+| ~:mean~  | Arithmetic mean of time values.                                       |
+| ~@min~   | Minimum age (in days/hours/mins/seconds).                             |
+| ~@max~   | Maximum age (in days/hours/mins/seconds).                             |
+| ~@mean~  | Arithmetic mean of ages (in days/hours/mins/seconds).                 |
+| ~est+~   | Add low-high estimates.                                               |
+
+
+{{{noindent}}} Be aware that you can only have one summary type for
+any property you include. Subsequent columns referencing the same
+property will all display the same summary information.
+
+The ~est+~ summary type requires further explanation. It is used for
+combining estimates, expressed as low-high ranges. For example,
+instead of estimating a particular task will take 5 days, you might
+estimate it as 5-6 days if you're fairly confident you know how much
+work is required, or 1-10 days if you don't really know what needs to
+be done. Both ranges average at 5.5 days, but the first represents a
+more predictable delivery.
+
+When combining a set of such estimates, simply adding the lows and
+highs produces an unrealistically wide result. Instead, ~est+~ adds
+the statistical mean and variance of the sub-tasks, generating a final
+estimate from the sum. For example, suppose you had ten tasks, each of
+which was estimated at 0.5 to 2 days of work. Straight addition
+produces an estimate of 5 to 20 days, representing what to expect if
+everything goes either extremely well or extremely poorly. In
+contrast, ~est+~ estimates the full job more realistically, at 10-15
+days.
+
+Here is an example for a complete columns definition, along with allowed
+values.[fn:58]
+
+#+begin_example
+   :COLUMNS:  %25ITEM %9Approved(Approved?){X} %Owner %11Status \
+                      %10Time_Estimate{:} %CLOCKSUM %CLOCKSUM_T
+   :Owner_ALL:    Tammy Mark Karl Lisa Don
+   :Status_ALL:   "In progress" "Not started yet" "Finished" ""
+   :Approved_ALL: "[ ]" "[X]"
+#+end_example
+
+{{{noindent}}} The first column, {{{samp(%25ITEM)}}}, means the first
+25 characters of the item itself, i.e., of the headline. You probably
+always should start the column definition with the {{{samp(ITEM)}}}
+specifier. The other specifiers create columns {{{samp(Owner)}}} with
+a list of names as allowed values, for {{{samp(Status)}}} with four
+different possible values, and for a checkbox field
+{{{samp(Approved)}}}. When no width is given after the {{{samp(%)}}}
+character, the column will be exactly as wide as it needs to be in
+order to fully display all values. The {{{samp(Approved)}}} column
+does have a modified title ({{{samp(Approved?)}}}, with a question
+mark). Summaries will be created for the {{{samp(Time_Estimate)}}}
+column by adding time duration expressions like HH:MM, and for the
+{{{samp(Approved)}}} column, by providing an {{{samp([X])}}} status if
+all children have been checked. The {{{samp(CLOCKSUM)}}} and
+{{{samp(CLOCKSUM_T)}}} columns are special, they lists the sums of
+CLOCK intervals in the subtree, either for all clocks or just for
+today.
+
+*** Using column view
+    :PROPERTIES:
+    :DESCRIPTION: How to create and use column view
+    :END:
+
+The following commands turn column view on or off:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-x C-c)}}}, ~org-columns~ ::
+  {{{kindex(C-c C-x C-c)}}}
+  {{{vindex(org-columns-default-format)}}}
+
+  Turn on column view. If the cursor is before the first headline in the
+  file, column view is turned on for the entire file, using the
+  ~#+COLUMNS~ definition. If the cursor is somewhere inside the outline,
+  this command searches the hierarchy, up from point, for a ~:COLUMNS:~
+  property that defines a format. When one is found, the column view
+  table is established for the tree starting at the entry that contains
+  the ~:COLUMNS:~ property. If no such property is found, the format is
+  taken from the ~#+COLUMNS~ line or from the variable
+  ~org-columns-default-format~, and column view is established for the
+  current entry and its subtree.
+
+- {{{kbd(r)}}}, ~org-columns-redo~ ::
+  {{{kindex(r)}}}
+
+  Recreate the column view, to include recent changes made in the
+  buffer.
+
+- {{{kbd(g)}}}, ~org-columns-redo~ ::
+  {{{kindex(g)}}}
+
+  Same as {{{kbd(r)}}}.
+
+- {{{kbd(q)}}}, ~org-columns-quit~ ::
+  {{{kindex(q)}}}
+
+  Exit column view.
+
+The following commands let you edit information in column view:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{key(left)}}} {{{key(right)}}} {{{key(up)}}} {{{key(down)}}} ::
+
+  Move through the column view from field to field.
+
+-  {{{kbdkey(S-,left)}}} {{{kbdkey(S-,right)}}} ::
+  {{{kindex(S-@key{left})}}}
+  {{{kindex(S-@key{right})}}}
+
+  Switch to the next/previous allowed value of the field. For this, you
+  have to have specified allowed values for a property.
+
+- {{{kbd(1..9,0)}}} ::
+  {{{kindex(1..9,0)}}}
+
+  Directly select the Nth allowed value, {{{kbd(0)}}} selects the 10th
+  value.
+
+- {{{kbd(n)}}} {{{kbd(p)}}}, ~org-columns-next-allowed-value~ ~org-columns-previous-allowed-value~ ::
+  {{{kindex(n)}}}
+
+  Same as {{{kbdkey(S-,left)}}} {{{kbdkey(S-,right)}}}
+
+- {{{kbd(e)}}}, ~org-columns-edit-value~ ::
+  {{{kindex(e)}}}
+
+  Edit the property at point. For the special properties, this will
+  invoke the same interface that you normally use to change that
+  property. For example, when editing a TAGS property, the tag
+  completion or fast selection interface will pop up.
+
+- {{{kbd(C-c C-c)}}}, ~org-columns-set-tags-or-toggle~ ::
+  {{{kindex(C-c C-c)}}}
+
+  When there is a checkbox at point, toggle it.
+
+- {{{kbd(v)}}}, ~org-columns-show-value~ ::
+  {{{kindex(v)}}}
+
+  View the full value of this property. This is useful if the width of
+  the column is smaller than that of the value.
+
+- {{{kbd(a)}}}, ~org-columns-edit-allowed~ ::
+  {{{kindex(a)}}}
+
+  Edit the list of allowed values for this property.  If the list is found
+  in the hierarchy, the modified values is stored there.  If no list is
+  found, the new value is stored in the first entry that is part of the
+  current column view.
+
+
+The following commands modify column view on-the-fly:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(<)}}} {{{kbd(>)}}}, ~org-columns-narrow~ ~org-columns-widen~ ::
+  {{{kindex(<)}}}
+
+  Make the column narrower/wider by one character.
+
+- {{{kbdkey(S-M-,right)}}}, ~org-columns-new~ ::
+  {{{kindex(S-M-@key{right})}}}
+
+  Insert a new column, to the left of the current column.
+
+- {{{kbdkey(S-M-,left)}}}, ~org-columns-delete~ ::
+  {{{kindex(S-M-@key{left})}}}
+  
+  Delete the current column.
+
+*** Capturing column view
+    :PROPERTIES:
+    :DESCRIPTION: A dynamic block for column view
+    :END:
+
+Since column view is just an overlay over a buffer, it cannot be
+exported or printed directly. If you want to capture a column view,
+use a ~columnview~ dynamic block (see [[Dynamic blocks]]). The frame of
+this block looks like this:
+
+{{{cindex(#+BEGIN\\\, columnview)}}}
+#+begin_example
+   ,* The column view
+   ,#+BEGIN: columnview :hlines 1 :id "label"
+
+   ,#+END:
+#+end_example
+
+{{{noindent}}} This dynamic block has the following parameters:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~:id~ ::
+
+  This is the most important parameter. Column view is a feature that is
+  often localized to a certain (sub)tree, and the capture block might be
+  at a different location in the file. To identify the tree whose view
+  to capture, you can use 4 values:
+
+  {{{cindex(property\\\, ID)}}}
+  #+attr_texinfo: :columns "0.35 0.65"
+  | Value               | Meaning                                                       |
+  |---------------------+---------------------------------------------------------------|
+  | local               | Use the tree in which the capture block is located.           |
+  | global              | Make a global view, including all headings in the file.       |
+  | "file:PATH-TO-FILE" | Run column view at the top of this file.                      |
+  | "ID"                | Call column view in the tree that has an ~:ID:~               |
+  |                     | property with the value /label/.  You can use                 |
+  |                     | {{{kbd(M-x org-id-copy)}}} to create a globally unique ID for |
+  |                     | the current entry and copy it to the kill-ring.               |
+
+  - local ::
+    
+    Use the tree in which the capture block is located.
+
+  - global :: 
+
+    Make a global view, including all headings in the file.
+
+  - "file:PATH-TO-FILE" ::
+    
+    Run column view at the top of this file.
+
+  - "ID" :: 
+    
+    Call column view in the tree that has an ~:ID:~ property with the
+    value /label/. You can use {{{kbd(M-x org-id-copy)}}} to
+    create a globally unique ID for the current entry and copy
+    it to the kill-ring.
+
+- ~:hlines~ ::
+
+  When ~t~, insert an hline after every line. When a number ~N~,
+              insert an hline before each headline with level ~<=~
+              {{{var(N)}}}.
+
+- ~:vlines~ ::
+
+  When set to ~t~, force column groups to get vertical lines.
+
+- ~:maxlevel~ ::
+
+  When set to a number, don't capture entries below this level.
+
+- ~:skip-empty-rows~ ::
+
+  When set to ~t~, skip rows where the only non-empty specifier of the
+  column view is ~ITEM~.
+
+
+
+{{{noindent}}} The following commands insert or update the dynamic
+block:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-x i)}}}, ~org-insert-columns-dblock~ ::
+  {{{kindex(C-c C-x i)}}}
+
+  Insert a dynamic block capturing a column view. You will be prompted
+  for the scope or ID of the view.
+
+- {{{kbd(C-c C-c)}}} {{{kbd(C-c C-x C-u)}}}, ~org-dblock-update~ ::
+  {{{kindex(C-c C-c)}}}
+
+  Update dynamic block at point. The cursor needs to be in the ~#+BEGIN~
+  line of the dynamic block.
+
+- {{{kbd(C-u C-c C-x C-u)}}}, ~org-update-all-dblocks~ ::
+  {{{kindex(C-u C-c C-x C-u)}}}
+
+  Update all dynamic blocks (see [[Dynamic blocks]]). This is useful if you
+  have several clock table blocks, column-capturing blocks or other
+  dynamic blocks in a buffer.
+
+
+You can add formulas to the column view table and you may add plotting
+instructions in front of the table---these will survive an update of the
+block.  If there is a ~#+TBLFM:~ after the table, the table will
+actually be recalculated automatically after an update.
+
+An alternative way to capture and process property values into a table
+is provided by Eric Schulte's {{{file(org-collector.el)}}} which is a
+contributed package.[fn:59] It provides a general API to collect
+properties from entries in a certain scope, and arbitrary Lisp
+expressions to process these values before inserting them into a table
+or a dynamic block.
+
+** Property API
+   :PROPERTIES:
+   :DESCRIPTION: Properties for Lisp programmers
+   :END:
+{{{cindex(properties\\\, API)}}}
+{{{cindex(API\\\, for properties)}}}
+
+There is a full API for accessing and changing properties. This API
+can be used by Emacs Lisp programs to work with properties and to
+implement features based on them. For more information see [[Using the
+property API]].
+
+* Dates and times
+  :PROPERTIES:
+  :DESCRIPTION: Making items useful for planning
+  :OPTIONAL_TITLE: Dates and Times
+  :END:
+{{{cindex(dates)}}}
+{{{cindex(times)}}}
+{{{cindex(timestamp)}}}
+{{{cindex(date stamp)}}}
+
+To assist project planning, TODO items can be labeled with a date and/or
+a time.  The specially formatted string carrying the date and time
+information is called a /timestamp/ in Org mode.  This may be a
+little confusing because timestamp is often used as indicating when
+something was created or last changed.  However, in Org mode this term
+is used in a much wider sense.
+
+** Timestamps
+   :PROPERTIES:
+   :DESCRIPTION: Assigning a time to a tree entry
+   :TITLE:    Timestamps, deadlines, and scheduling
+   :END:
+{{{cindex(timestamps)}}}
+{{{cindex(ranges\\\, time)}}}
+{{{cindex(date stamps)}}}
+{{{cindex(deadlines)}}}
+{{{cindex(scheduling)}}}
+
+A timestamp is a specification of a date (possibly with a time or a
+range of times) in a special format, either ~<2003-09-16 Tue>~ or
+~<2003-09-16 Tue 09:39>~ or ~<2003-09-16 Tue 12:00-12:30>~.[fn:60] A
+timestamp can appear anywhere in the headline or body of an Org tree
+entry. Its presence causes entries to be shown on specific dates in
+the agenda (see [[Weekly/daily agenda]]). We distinguish:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- Plain timestamp; Event; Appointment ::
+  {{{cindex(timestamp)}}}
+  {{{cindex(appointment)}}}
+
+  A simple timestamp just assigns a date/time to an item. This is just
+  like writing down an appointment or event in a paper agenda. In the
+  timeline and agenda displays, the headline of an entry associated with
+  a plain timestamp will be shown exactly on that date.
+
+  #+begin_example
+     ,* Meet Peter at the movies
+       <2006-11-01 Wed 19:15>
+     ,* Discussion on climate change
+       <2006-11-02 Thu 20:00-22:00>
+  #+end_example
+
+- Timestamp with repeater interval ::
+  {{{cindex(timestamp\\\, with repeater interval)}}}
+
+  A timestamp may contain a /repeater interval/, indicating that it
+  applies not only on the given date, but again and again after a
+  certain interval of N days (d), weeks (w), months (m), or years (y).
+  The following will show up in the agenda every Wednesday:
+
+  #+begin_example
+     ,* Pick up Sam at school
+       <2007-05-16 Wed 12:30 +1w>
+  #+end_example
+
+- Diary-style sexp entries ::
+
+  For more complex date specifications, Org mode supports using the
+  special sexp diary entries implemented in the Emacs calendar/diary
+  package.[fn:61] For example, with optional time:
+
+  #+begin_example
+     ,* 22:00-23:00 The nerd meeting on every 2nd Thursday of the month
+       <%%(org-float t 4 2)>
+  #+end_example
+
+- Time/Date range ::
+  {{{cindex(timerange)}}}
+  {{{cindex(date range)}}}
+
+  Two timestamps connected by {{{samp(--)}}} denote a range.  The headline
+  will be shown on the first and last day of the range, and on any dates
+  that are displayed and fall in the range.  Here is an example:
+
+  #+begin_example
+     ,** Meeting in Amsterdam
+        <2004-08-23 Mon>--<2004-08-26 Thu>
+  #+end_example
+
+- Inactive timestamp ::
+  {{{cindex(timestamp\\\, inactive)}}}
+  {{{cindex(inactive timestamp)}}}
+
+  Just like a plain timestamp, but with square brackets instead of
+  angular ones.  These timestamps are inactive in the sense that they do
+  /not/ trigger an entry to show up in the agenda.
+
+  #+begin_example
+     ,* Gillian comes late for the fifth time
+       [2006-11-01 Wed]
+  #+end_example
+
+** Creating timestamps
+   :PROPERTIES:
+   :DESCRIPTION: Commands to insert timestamps
+   :END:
+For Org mode to recognize timestamps, they need to be in the specific
+format. All commands listed below produce timestamps in the correct
+format.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c .)}}}, ~org-time-stamp~ ::
+  {{{kindex(C-c .)}}}
+
+  Prompt for a date and insert a corresponding timestamp. When the
+  cursor is at an existing timestamp in the buffer, the command is used
+  to modify this timestamp instead of inserting a new one. When this
+  command is used twice in succession, a time range is inserted.
+
+- {{{kbd(C-c !)}}}, ~org-time-stamp-inactive~ ::
+  {{{kindex(C-c !)}}}
+
+  Like {{{kbd(C-c .)}}}, but insert an inactive timestamp that will not
+  cause an agenda entry.
+
+- {{{kbd(C-u C-c .)}}} {{{kbd(C-u C-c !)}}}
+  {{{kindex(C-u C-c .)}}}
+  {{{kindex(C-u C-c .)}}}
+  {{{kindex(C-u C-c !)}}}
+  {{{vindex(org-time-stamp-rounding-minutes)}}}
+
+  Like {{{kbd(C-c .)}}} and {{{kbd(C-c !)}}}, but use the alternative
+  format which contains date and time. The default time can be rounded
+  to multiples of 5 minutes, see the option
+  ~org-time-stamp-rounding-minutes~.
+
+- {{{kbd(C-c C-c)}}} ::
+  {{{kindex(C-c C-c)}}}
+
+  Normalize timestamp, insert/fix day name if missing or wrong.
+
+- {{{kbd(C-c <)}}}, ~org-date-from-calendar~ ::
+  {{{kindex(C-c <)}}}
+
+  Insert a timestamp corresponding to the cursor date in the Calendar.
+
+- {{{kbd(C-c >)}}}, ~org-goto-calendar~ ::
+  {{{kindex(C-c >)}}}
+
+  Access the Emacs calendar for the current date. If there is a
+  timestamp in the current line, go to the corresponding date instead.
+
+- {{{kbd(C-c C-o)}}}, ~org-open-at-point~ ::
+  {{{kindex(C-c C-o)}}}
+
+  Access the agenda for the date given by the timestamp or -range at
+  point (see [[Weekly/daily agenda]]).
+
+- {{{kbdkey(S-,left)}}} {{{kbdkey(S-,right)}}}, ~org-timestamp-down-day~ ~org-timestamp-up-day~ ::
+  {{{kindex(S-@key{left})}}}
+
+  Change date at cursor by one day.  These key bindings conflict with
+  shift-selection and related modes (see [[Conflicts]]).
+
+- {{{kbdkey(S-,up)}}} {{{kbdkey(S-,down)}}}, ~org-timestamp-up~ ~org-timestamp-down-down~ ::
+  {{{kindex(S-@key{up})}}}
+
+  Change the item under the cursor in a timestamp. The cursor can be on
+  a year, month, day, hour or minute. When the timestamp contains a time
+  range like {{{samp(15:30-16:30)}}}, modifying the first time will also
+  shift the second, shifting the time block with constant length. To
+  change the length, modify the second time. Note that if the cursor is
+  in a headline and not at a timestamp, these same keys modify the
+  priority of an item. (see [[Priorities]]). The key bindings also conflict
+  with shift-selection and related modes (see [[Conflicts]]).
+
+- {{{kbd(C-c C-y)}}}, ~org-evaluate-time-range~ ::
+  {{{kindex(C-c C-y)}}}
+  {{{cindex(evaluate time range)}}}
+
+  Evaluate a time range by computing the difference between start and
+  end. With a prefix argument, insert result after the time range (in a
+  table: into the following column).
+
+*** The date/time prompt
+    :PROPERTIES:
+    :DESCRIPTION: How Org mode helps you enter dates and times
+    :END:
+{{{cindex(date\\\, reading in minibuffer)}}}
+{{{cindex(time\\\, reading in minibuffer)}}}
+
+{{{vindex(org-read-date-prefer-future)}}}
+
+When Org mode prompts for a date/time, the default is shown in default
+date/time format, and the prompt therefore seems to ask for a specific
+format. But it will in fact accept date/time information in a variety
+of formats. Generally, the information should start at the beginning
+of the string. Org mode will find whatever information is in there and
+derive anything you have not specified from the /default date and
+time/. The default is usually the current date and time, but when
+modifying an existing timestamp, or when entering the second stamp of
+a range, it is taken from the stamp in the buffer. When filling in
+information, Org mode assumes that most of the time you will want to
+enter a date in the future: if you omit the month/year and the given
+day/month is /before/ today, it will assume that you mean a future
+date.[fn:62] If the date has been automatically shifted into the
+future, the time prompt will show this with {{{samp((=>F))}}}.
+
+For example, let's assume that today is *June 13, 2006*. Here is how
+various inputs will be interpreted, the items filled in by Org mode
+are in *bold*.
+
+| Input        | Interpretation                                       |
+|--------------+------------------------------------------------------|
+| 3-2-5        | {{{result}}} 2003-02-05                              |
+| 2/5/3        | {{{result}}} 2003-02-05                              |
+| 14           | {{{result}}} *2006*-*06*-14                          |
+| 12           | {{{result}}} *2006*-*07*-12                          |
+| 2/5          | {{{result}}} *2007*-02-05                            |
+| Fri          | {{{result}}} nearest Friday (default date or later)  |
+| sep 15       | {{{result}}} *2006*-09-15                            |
+| feb 15       | {{{result}}} *2007*-02-15                            |
+| sep 12 9     | {{{result}}} 2009-09-12                              |
+| 12:45        | {{{result}}} *2006*-*06*-*13* 12:45                  |
+| 22 sept 0:34 | {{{result}}} *2006*-09-22 0:34                       |
+| w4           | {{{result}}} ISO week for of the current year *2006* |
+| 2012 w4 fri  | {{{result}}} Friday of ISO week 4 in 2012            |
+| 2012-w04-5   | {{{result}}} Same as above                           |
+
+
+Furthermore you can specify a relative date by giving, as the /first/
+thing in the input: a plus/minus sign, a number and a letter ([dwmy])
+to indicate change in days, weeks, months, or years. With a single
+plus or minus, the date is always relative to today. With a double
+plus or minus, it is relative to the default date. If instead of a
+single letter, you use the abbreviation of day name, the date will be
+the Nth such day, e.g.:
+
+| Input | Interpretation                           |
+|-------+------------------------------------------|
+|    +0 | {{{result}}} today                       |
+|     . | {{{result}}} today                       |
+|   +4d | {{{result}}} four days from today        |
+|    +4 | {{{result}}} same as +4d                 |
+|   +2w | {{{result}}} two weeks from today        |
+|   ++5 | {{{result}}} five days from default date |
+| +2tue | {{{result}}} second Tuesday from now     |
+
+
+{{{vindex(parse-time-months)}}}
+{{{vindex(parse-time-weekdays)}}}
+
+The function understands English month and weekday abbreviations. If
+you want to use unabbreviated names and/or other languages, configure
+the variables ~parse-time-months~ and ~parse-time-weekdays~.
+
+{{{vindex(org-read-date-force-compatible-dates)}}}
+
+Not all dates can be represented in a given Emacs implementation. By
+default Org mode forces dates into the compatibility range 1970--2037
+which works on all Emacs implementations. If you want to use dates
+outside of this range, read the docstring of the variable
+~org-read-date-force-compatible-dates~.
+
+You can specify a time range by giving start and end times or by
+giving a start time and a duration (in HH:MM format). Use one or two
+dash(es) as the separator in the former case and use '+' as the
+separator in the latter case, e.g.:
+
+| Range        | Result                     |
+|--------------+----------------------------|
+| 11am-1:15pm  | {{{result}}} 11:00-13:15   |
+| 11am--1:15pm | {{{result}}} same as above |
+| 11am+2:15    | {{{result}}} same as above |
+
+{{{cindex(calendar\\\, for selecting date)}}}
+{{{vindex(org-popup-calendar-for-date-prompt)}}}
+
+Parallel to the minibuffer prompt, a calendar is popped up.[fn:63]
+When you exit the date prompt, either by clicking on a date in the
+calendar, or by pressing {{{key(RET)}}}, the date selected in the
+calendar will be combined with the information entered at the prompt.
+You can control the calendar fully from the minibuffer:
+
+{{{kindex(<)}}}
+{{{kindex(>)}}}
+{{{kindex(M-v)}}}
+{{{kindex(C-v)}}}
+{{{kindex(mouse-1)}}}
+{{{kindex(S-@key{right})}}}
+{{{kindex(S-@key{left})}}}
+{{{kindex(S-@key{down})}}}
+{{{kindex(S-@key{up})}}}
+{{{kindex(M-S-@key{right})}}}
+{{{kindex(M-S-@key{left})}}}
+{{{kindex(@key{RET})}}}
+
+#+attr_texinfo: :columns "0.3 0.7"
+| Key binding               | Meaning                                |
+|---------------------------+----------------------------------------|
+| {{{key(RET)}}}            | Choose date at cursor in calendar.     |
+| {{{key(mouse-1)}}}        | Select date by clicking on it.         |
+| {{{kbdkey(S-,right)}}}    | One day forward.                       |
+| {{{kbdkey(S-,left)}}}     | One day backward.                      |
+| {{{kbdkey(S-,down)}}}     | One week forward.                      |
+| {{{kbdkey(S-,up)}}}       | One week backward.                     |
+| {{{kbdkey(M-S-,right)}}}  | One month forward.                     |
+| {{{kbdkey(M-S-,left)}}}   | One month backward.                    |
+| {{{kbd(>)}}}              | Scroll calendar forward by one month.  |
+| {{{kbd(<)}}}              | Scroll calendar backward by one month. |
+| {{{kbd(M-v)}}}            | Scroll calendar forward by 3 months.   |
+| {{{kbd(C-v)}}}            | Scroll calendar backward by 3 months.  |
+
+
+{{{vindex(org-read-date-display-live)}}}
+
+The actions of the date/time prompt may seem complex, but I assure you they
+will grow on you, and you will start getting annoyed by pretty much any other
+way of entering a date/time out there.  To help you understand what is going
+on, the current interpretation of your input will be displayed live in the
+minibuffer.[fn:64]
+
+*** Custom time format
+    :PROPERTIES:
+    :DESCRIPTION: Making dates look different
+    :END:
+{{{cindex(custom date/time format)}}}
+{{{cindex(time format\\\, custom)}}}
+{{{cindex(date format\\\, custom)}}}
+
+{{{vindex(org-display-custom-times)}}}
+{{{vindex(org-time-stamp-custom-formats)}}}
+
+Org mode uses the standard ISO notation for dates and times as it is
+defined in ISO 8601. If you cannot get used to this and require
+another representation of date and time to keep you happy, you can get
+it by customizing the variables ~org-display-custom-times~ and
+~org-time-stamp-custom-formats~.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-x C-t)}}}, ~org-toggle-time-stamp-overlays~ ::
+  {{{kindex(C-c C-x C-t)}}}
+
+  Toggle the display of custom formats for dates and times.
+
+
+{{{noindent}}}
+Org mode needs the default format for scanning, so the custom date/time
+format does not /replace/ the default format---instead it is put
+/over/ the default format using text properties.  This has the
+following consequences:
+
+
+- You cannot place the cursor onto a timestamp anymore, only before or
+  after.
+
+- The {{{kbdkey(S-,up)}}} {{{kbdkey(S-,down)}}} keys can no longer be
+  used to adjust each component of a timestamp. If the cursor is at
+  the beginning of the stamp, {{{kbdkey(S-,up)}}}
+  {{{kbdkey(S-,down)}}} will change the stamp by one day, just like
+  {{{kbdkey(S-,left)}}} {{{kbdkey(S-,right)}}}. At the end of the
+  stamp, the time will be changed by one minute.
+
+-  If the timestamp contains a range of clock times or a repeater,
+   these will not be overlaid, but remain in the buffer as they were.
+
+-  When you delete a timestamp character-by-character, it will only
+   disappear from the buffer after /all/ (invisible) characters
+   belonging to the ISO timestamp have been removed.
+
+- If the custom timestamp format is longer than the default and you
+  are using dates in tables, table alignment will be messed up.  If
+  the custom format is shorter, things do work as expected.
+
+** Deadlines and scheduling
+   :PROPERTIES:
+   :DESCRIPTION: Planning your work
+   :END:
+
+A timestamp may be preceded by special keywords to facilitate planning:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~DEADLINE~ ::
+  {{{cindex(DEADLINE keyword)}}}
+
+  Meaning: the task (most likely a TODO item, though not necessarily) is
+  supposed to be finished on that date.
+
+  {{{vindex(org-deadline-warning-days)}}}
+
+  On the deadline date, the task will be listed in the agenda. In
+  addition, the agenda for /today/ will carry a warning about the
+  approaching or missed deadline, starting ~org-deadline-warning-days~
+  before the due date, and continuing until the entry is marked DONE. An
+  example:
+
+  #+begin_example
+     ,*** TODO write article about the Earth for the Guide
+         DEADLINE: <2004-02-29 Sun>
+         The editor in charge is [[bbdb:Ford Prefect]]
+  #+end_example
+
+  You can specify a different lead time for warnings for a specific
+  deadlines using the following syntax. Here is an example with a
+  warning period of 5 days ~DEADLINE: <2004-02-29 Sun -5d>~.
+
+- ~SCHEDULED~ ::
+  {{{cindex(SCHEDULED keyword)}}}
+
+  Meaning: you are planning to start working on that task on the given
+  date.
+
+  {{{vindex(org-agenda-skip-scheduled-if-done)}}}
+
+  The headline will be listed under the given date.[fn:65] In addition,
+  a reminder that the scheduled date has passed will be present in the
+  compilation for /today/, until the entry is marked DONE, i.e., the
+  task will automatically be forwarded until completed.
+
+  #+begin_example
+     ,*** TODO Call Trillian for a date on New Years Eve.
+         SCHEDULED: <2004-12-25 Sat>
+  #+end_example
+
+  {{{noindent}}}
+  *Important:* Scheduling an item in Org mode should /not/ be
+  understood in the same way that we understand /scheduling a meeting/.
+  Setting a date for a meeting is just a simple appointment, you should
+  mark this entry with a simple plain timestamp, to get this item shown
+  on the date where it applies.  This is a frequent misunderstanding by
+  Org users.  In Org mode, /scheduling/ means setting a date when you
+  want to start working on an action item.
+
+
+You may use timestamps with repeaters in scheduling and deadline
+entries.  Org mode will issue early and late warnings based on the
+assumption that the timestamp represents the /nearest instance/ of
+the repeater.  However, the use of diary sexp entries like
+
+~<%%(org-float t 42)>~
+
+in scheduling and deadline timestamps is limited.  Org mode does not
+know enough about the internals of each sexp function to issue early and
+late warnings.  However, it will show the item on each day where the
+sexp entry matches.
+
+*** Inserting deadline/schedule
+    :PROPERTIES:
+    :DESCRIPTION: Planning items
+    :TITLE:    Inserting deadlines or schedules
+    :END:
+
+The following commands allow you to quickly insert a deadline or to schedule
+an item:[fn:66]
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-d)}}}, ~org-deadline~ ::
+  {{{kindex(C-c C-d)}}}
+
+  Insert {{{samp(DEADLINE)}}} keyword along with a stamp. The insertion
+  will happen in the line directly following the headline. Any CLOSED
+  timestamp will be removed. When called with a prefix arg, an existing
+  deadline will be removed from the entry. Depending on the variable
+  ~org-log-redeadline~, a note will be taken when changing an existing
+  deadline.[fn:67]
+
+- {{{kbd(C-c C-s)}}}, ~org-schedule~ ::
+  {{{kindex(C-c C-s)}}}
+
+  Insert {{{samp(SCHEDULED)}}} keyword along with a stamp. The insertion
+  will happen in the line directly following the headline. Any
+  {{{samp(CLOSED)}}} timestamp will be removed. When called with a
+  prefix argument, remove the scheduling date from the entry. Depending
+  on the variable ~org-log-reschedule~, a note will be taken when
+  changing an existing scheduling time.[fn:68]
+
+- {{{kbd(C-c C-x C-k)}}}, ~org-mark-entry-for-agenda-action~ ::
+  {{{kindex(C-c C-x C-k)}}}
+  {{{kindex(k a)}}}
+  {{{kindex(k s)}}}
+
+  Mark the current entry for agenda action. After you have marked the
+  entry like this, you can open the agenda or the calendar to find an
+  appropriate date. With the cursor on the selected date, press 
+  {{{kbd(k s)}}} or {{{kbd(k d)}}} to schedule the marked item.
+
+- {{{kbd(C-c / d)}}}, ~org-check-deadlines~ ::
+  {{{kindex(C-c / d)}}}
+  {{{cindex(sparse tree\\\, for deadlines)}}}
+  {{{vindex(org-deadline-warning-days)}}}
+
+  Create a sparse tree with all deadlines that are either past-due, or
+  which will become due within ~org-deadline-warning-days~. With
+  {{{kbd(C-u)}}} prefix, show all deadlines in the file. With a numeric
+  prefix, check that many days. For example, {{{kbd(C-1 C-c / d)}}}
+  shows all deadlines due tomorrow.
+
+- {{{kbd(C-c / b)}}}, ~org-check-before-date~ ::
+  {{{kindex(C-c / b)}}}
+
+  Sparse tree for deadlines and scheduled items before a given date.
+
+- {{{kbd(C-c / a)}}}, ~org-check-after-date~ ::
+  {{{kindex(C-c / a)}}}
+  
+  Sparse tree for deadlines and scheduled items after a given date.
+
+
+Note that ~org-schedule~ and ~org-deadline~ supports setting the date
+by indicating a relative time: e.g. +1d will set the date to the next
+day after today, and --1w will set the date to the previous week
+before any current timestamp.
+
+*** Repeated tasks
+    :PROPERTIES:
+    :DESCRIPTION: Items that show up again and again
+    :END:
+{{{cindex(tasks\\\, repeated)}}}
+{{{cindex(repeated tasks)}}}
+
+Some tasks need to be repeated again and again.  Org mode helps to
+organize such tasks using a so-called repeater in a DEADLINE, SCHEDULED,
+or plain timestamp.  In the following example:
+
+#+begin_example
+   ,** TODO Pay the rent
+      DEADLINE: <2005-10-01 Sat +1m>
+#+end_example
+
+{{{noindent}}} the ~+1m~ is a repeater; the intended interpretation is
+that the task has a deadline on <2005-10-01> and repeats itself every
+(one) month starting from that time. You can use yearly, monthly,
+weekly, daily and hourly repeat cookies by using the ~y/w/m/d/h~
+letters. If you need both a repeater and a special warning period in a
+deadline entry, the repeater should come first and the warning period
+last: ~DEADLINE: <2005-10-01 Sat +1m -3d>~.
+
+{{{vindex(org-todo-repeat-to-state)}}}
+
+Deadlines and scheduled items produce entries in the agenda when they
+are over-due, so it is important to be able to mark such an entry as
+completed once you have done so. When you mark a DEADLINE or a
+SCHEDULE with the TODO keyword DONE, it will no longer produce entries
+in the agenda. The problem with this is, however, that then also the
+/next/ instance of the repeated entry will not be active. Org mode
+deals with this in the following way: When you try to mark such an
+entry DONE (using {{{kbd(C-c C-t)}}}), it will shift the base date of
+the repeating timestamp by the repeater interval, and immediately set
+the entry state back to TODO.[fn:69] In the example above, setting the
+state to DONE would actually switch the date like this:
+
+#+begin_example
+   ,** TODO Pay the rent
+      DEADLINE: <2005-11-01 Tue +1m>
+#+end_example
+
+{{{vindex(org-log-repeat)}}} 
+
+A timestamp will be added under the deadline, to keep a record that
+you actually acted on the previous instance of this deadline.[fn:70]
+
+As a consequence of shifting the base date, this entry will no longer be
+visible in the agenda when checking past dates, but all future instances
+will be visible.
+
+With the {{{samp(+1m)}}} cookie, the date shift will always be exactly one
+month.  So if you have not paid the rent for three months, marking this
+entry DONE will still keep it as an overdue deadline.  Depending on the
+task, this may not be the best way to handle it.  For example, if you
+forgot to call your father for 3 weeks, it does not make sense to call
+him 3 times in a single day to make up for it.  Finally, there are tasks
+like changing batteries which should always repeat a certain time
+/after/ the last time you did it.  For these tasks, Org mode has
+special repeaters  {{{samp(++)}}} and {{{samp(.+)}}}.  For example:
+
+#+begin_example
+   ,** TODO Call Father
+      DEADLINE: <2008-02-10 Sun ++1w>
+      Marking this DONE will shift the date by at least one week,
+      but also by as many weeks as it takes to get this date into
+      the future.  However, it stays on a Sunday, even if you called
+      and marked it done on Saturday.
+   ,** TODO Check the batteries in the smoke detectors
+      DEADLINE: <2005-11-01 Tue .+1m>
+      Marking this DONE will shift the date to one month after
+      today.
+#+end_example
+
+You may have both scheduling and deadline information for a specific
+task---just make sure that the repeater intervals on both are the
+same.
+
+An alternative to using a repeater is to create a number of copies of
+a task subtree, with dates shifted in each copy. The command
+{{{kbd(C-c C-x c)}}} was created for this purpose, it is described in
+[[Structure editing]].
+
+** Clocking work time
+   :PROPERTIES:
+   :DESCRIPTION: Tracking how long you spend on a task
+   :END:
+{{{cindex(clocking time)}}}
+{{{cindex(time clocking)}}}
+
+Org mode allows you to clock the time you spend on specific tasks in a
+project.  When you start working on an item, you can start the clock.  When
+you stop working on that task, or when you mark the task done, the clock is
+stopped and the corresponding time interval is recorded.  It also computes
+the total time spent on each subtree of a project.[fn:71]  And it remembers a
+history or tasks recently clocked, to that you can jump quickly between a
+number of tasks absorbing your time.
+
+To save the clock history across Emacs sessions, use:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+  (setq org-clock-persist 'history)
+  (org-clock-persistence-insinuate)
+#+end_src
+
+When you clock into a new task after resuming Emacs, the incomplete
+clock will be found (see [[Resolving idle time]]) and you will be prompted
+about what to do with it.[fn:72]
+
+*** Clocking commands
+    :PROPERTIES:
+    :DESCRIPTION: Starting and stopping a clock
+    :END:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-x C-i)}}}, ~org-clock-in~ ::
+  {{{kindex(C-c C-x C-i)}}}
+  {{{vindex(org-clock-into-drawer)}}}
+  {{{vindex(org-clock-continuously)}}}
+  {{{cindex(property\\\, LOG_INTO_DRAWER)}}}
+
+  Start the clock on the current item (clock-in). This inserts the CLOCK
+  keyword together with a timestamp. If this is not the first clocking
+  of this item, the multiple CLOCK lines will be wrapped into a
+  ~:LOGBOOK:~ drawer (see also the variable ~org-clock-into-drawer~).
+  You can also overrule the setting of this variable for a subtree by
+  setting a ~CLOCK_INTO_DRAWER~ or ~LOG_INTO_DRAWER~ property. When
+  called with a {{{kbd(C-u)}}} prefix argument, select the task from a
+  list of recently clocked tasks. With two {{{kbd(C-u C-u)}}} prefixes,
+  clock into the task at point and mark it as the default task; the
+  default task will then always be available with letter {{{kbd(d)}}}
+  when selecting a clocking task. With three {{{kbd(C-u C-u C-u)}}}
+  prefixes, force continuous clocking by starting the clock when the
+  last clock stopped.@*
+
+  {{{cindex(property: CLOCK_MODELINE_TOTAL)}}}
+  {{{cindex(property: LAST_REPEAT)}}}
+  {{{vindex(org-clock-modeline-total)}}}
+
+  While the clock is running, the current clocking time is shown in the
+  mode line, along with the title of the task. The clock time shown will
+  be all time ever clocked for this task and its children. If the task
+  has an effort estimate (see [[Effort estimates]]), the mode line displays
+  the current clocking time against it.[fn:73] If the task is a
+  repeating one (see [[Repeated tasks]]), only the time since the last reset
+  of the task will be shown.[fn:74] More control over what time is shown
+  can be exercised with the ~CLOCK_MODELINE_TOTAL~ property. It may have
+  the values ~current~ to show only the current clocking instance,
+  ~today~ to show all time clocked on this tasks today (see also the
+  variable ~org-extend-today-until~), ~all~ to include all time, or
+  ~auto~ which is the default.[fn:75]  Clicking with {{{kbd(mouse-1)}}}
+  onto the mode line entry will pop up a menu with clocking options.
+
+- {{{kbd(C-c C-x C-o)}}}, ~org-clock-out~ ::
+  {{{kindex(C-c C-x C-o)}}}
+  {{{vindex(org-log-note-clock-out)}}}
+
+  Stop the clock (clock-out).  This inserts another timestamp at the same
+  location where the clock was last started.  It also directly computes
+  the resulting time in inserts it after the time range as
+  {{{samp(=>HH:MM)}}}.  See the variable ~org-log-note-clock-out~ for the
+  possibility to record an additional note together with the clock-out
+  timestamp.[fn:76]
+
+- {{{kbd(C-c C-x C-x)}}}, ~org-clock-in-last~ ::
+  {{{kindex(C-c C-x C-x)}}}
+  {{{vindex(org-clock-continuously)}}}
+
+  Reclock the last clocked task. With one {{{kbd(C-u)}}} prefix
+  argument, select the task from the clock history. With two
+  {{{kbd(C-u)}}} prefixes, force continuous clocking by starting the
+  clock when the last clock stopped.
+
+- {{{kbd(C-c C-x C-e)}}}, ~org-clock-modify-effort-estimate~ ::
+  {{{kindex(C-c C-x C-e)}}}
+
+  Update the effort estimate for the current clock task.
+- {{{kbd(C-c C-c)}}} {{{kbd(C-c C-y)}}}, ~org-evaluate-time-range~ ::
+  {{{kindex(C-c C-c)}}}
+  {{{kindex(C-c C-y)}}}
+  {{{kindex(C-c C-c)}}}
+
+  Recompute the time interval after changing one of the timestamps. This
+  is only necessary if you edit the timestamps directly. If you change
+  them with {{{kbdkey(S-,cursor)}}} keys, the update is automatic.
+
+- {{{kbdkey(C-S-,up)}}} {{{kbdkey(C-S-,down)}}}, ~org-clock-timestamps-up/down~ ::
+  {{{kindex(C-S-@key{up/down})}}}
+
+  On ~CLOCK~ log lines, increase/decrease both timestamps so that the
+  clock duration keeps the same.
+
+- {{{kbdkey(S-M-,up)}}} {{{kbdkey(S-M-,down)}}}, ~org-timestamp-up/down~ ::
+  {{{kindex(S-M-@key{up/down})}}}
+
+  On ~CLOCK~ log lines, increase/decrease the timestamp at point and the
+  one of the previous (or the next clock) timestamp by the same
+  duration. For example, if you hit {{{kbdkey(S-M-,up)}}} to increase a
+  clocked-out timestamp by five minutes, then the clocked-in timestamp
+  of the next clock will be increased by five minutes.
+
+- {{{kbd(C-c C-t)}}}, ~org-todo~ ::
+  {{{kindex(C-c C-t)}}}
+
+  Changing the TODO state of an item to DONE automatically stops the
+  clock if it is running in this same item.
+
+- {{{kbd(C-c C-x C-q)}}}, ~org-clock-cancel~ ::
+  {{{kindex(C-c C-x C-q)}}}
+
+  Cancel the current clock. This is useful if a clock was started by
+  mistake, or if you ended up working on something else.
+
+- {{{kbd(C-c C-x C-j)}}}, ~org-clock-goto~ ::
+  {{{kindex(C-c C-x C-j)}}}
+
+  Jump to the headline of the currently clocked in task. With a
+  {{{kbd(C-u)}}} prefix arg, select the target task from a list of
+  recently clocked tasks.
+
+- {{{kbd(C-c C-x C-d)}}}, ~org-clock-display~ ::
+  {{{kindex(C-c C-x C-d)}}}
+  {{{vindex(org-remove-highlights-with-change)}}}
+
+  Display time summaries for each subtree in the current buffer. This
+  puts overlays at the end of each headline, showing the total time
+  recorded under that heading, including the time of any subheadings.
+  You can use visibility cycling to study the tree, but the overlays
+  disappear when you change the buffer (see variable
+  ~org-remove-highlights-with-change~) or press {{{kbd(C-c C-c)}}}.
+
+
+The {{{kbd(l)}}} key may be used in the timeline (see [[Timeline for a
+single file]]) and in the agenda (see [[Weekly/daily agenda]]) to show which
+tasks have been worked on or closed during a day.
+
+*Important:* note that both ~org-clock-out~ and ~org-clock-in-last~
+can have a global keybinding and will not modify the window
+disposition.
+
+*** The clock table
+    :PROPERTIES:
+    :DESCRIPTION: Detailed reports
+    :END:
+{{{cindex(clocktable\\\, dynamic block)}}}
+{{{cindex(report\\\, of clocked time)}}}
+
+Org mode can produce quite complex reports based on the time clocking
+information.  Such a report is called a /clock table/, because it is
+formatted as one or several Org tables.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-x C-r)}}}, ~org-clock-report~ ::
+  {{{kindex(C-c C-x C-r)}}}
+
+  Insert a dynamic block (see [[Dynamic blocks]]) containing a clock report
+  as an Org mode table into the current file. When the cursor is at an
+  existing clock table, just update it. When called with a prefix
+  argument, jump to the first clock report in the current document and
+  update it. The clock table always includes also trees with ~:ARCHIVE:~
+  tag.
+
+- {{{kbd(C-c C-c)}}} {{{kbd(C-c C-x C-u)}}}, ~org-dblock-update~ ::
+  {{{kindex(C-c C-c)}}}
+
+  Update dynamic block at point.  The cursor needs to be in the
+  ~#+BEGIN~ line of the dynamic block.
+
+- {{{kbd(C-u C-c C-x C-u)}}} ::
+  {{{kindex(C-u C-c C-x C-u)}}}
+
+  Update all dynamic blocks (see [[Dynamic blocks]]). This is useful if you
+  have several clock table blocks in a buffer.
+
+- {{{kbdkey(S-,left)}}} {{{kbdkey(S-,right)}}}, ~org-clocktable-try-shift~ ::
+
+  Shift the current ~:block~ interval and update the table. The cursor
+  needs to be in the ~#+BEGIN: clocktable~ line for this command. If
+  ~:block~ is ~today~, it will be shifted to ~today-1~ etc.
+
+
+Here is an example of the frame for a clock table as it is inserted
+into the buffer with the {{{kbd(C-c C-x C-r)}}} command:
+
+{{{cindex(#+BEGIN\\\, clocktable)}}}
+#+begin_example
+   ,#+BEGIN: clocktable :maxlevel 2 :emphasize nil :scope file
+   ,#+END: clocktable
+#+end_example
+{{{noindent}}}
+{{{vindex(org-clocktable-defaults)}}}
+The {{{samp(BEGIN)}}} line and specify a number of options to define the scope,
+structure, and formatting of the report.  Defaults for all these options can
+be configured in the variable ~org-clocktable-defaults~.
+
+{{{noindent}}} First there are options that determine which clock entries are to
+be selected:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- :maxlevel ::    
+
+  Maximum level depth to which times are listed in the table. Clocks at
+  deeper levels will be summed into the upper level.
+
+- :scope ::      
+
+  The scope to consider.  This can be any of the following:
+
+  - nil ::        the current buffer or narrowed region
+  - file ::      the full current buffer
+  - subtree ::   the subtree where the clocktable is located
+  - tree {{{var(N)}}} :: the surrounding level {{{var(N)}}} tree, for example ~tree3~
+  - tree ::      the surrounding level 1 tree
+  - agenda ::    all agenda files
+  - ("file"..) :: scan these files
+  - file-with-archives ::    current file and its archives
+  - agenda-with-archives ::  all agenda files, including archives
+
+- :block ::       
+
+  The time block to consider. This block is specified either absolute,
+  or relative to the current time and may be any of these formats:
+
+  - 2007-12-31 ::   New year eve 2007
+  - 2007-12 ::      December 2007
+  - 2007-W50 ::     ISO-week 50 in 2007
+  - 2007-Q2 ::      2nd quarter in 2007
+  - 2007 ::         the year 2007
+  - today, yesterday, today-{{{var(N)}}} ::          a relative day
+  - thisweek, lastweek, thisweek-{{{var(N)}}} ::     a relative week
+  - thismonth, lastmonth, thismonth-{{{var(N)}}} ::  a relative month
+  - thisyear, lastyear, thisyear-{{{var(N)}}} ::     a relative year
+
+  Use {{{kbdkey(S-,left)}}} or {{{kbdkey(S-,right)}}} to shift the
+  time interval.
+
+- :tstart ::     
+
+  A time string specifying when to start considering times.
+
+- :tend  ::       
+
+  A time string specifying when to stop considering times.
+
+- :step  ::  
+
+  Set to ~week~ or ~day~ to split the table into chunks. To use this,
+  ~:block~ or ~:tstart~, ~:tend~ are needed.
+
+- :stepskip0 ::   
+
+  Do not show steps that have zero time.
+
+- :fileskip0 ::  
+
+  Do not show table sections from files which did not contribute.
+
+- :tags ::        
+
+  A tags match to select entries that should contribute. See [[Matching
+  tags and properties]] for the match syntax.
+
+
+Then there are options which determine the formatting of the table.  There
+options are interpreted by the function ~org-clocktable-write-default~,
+but you can specify your own function using the ~:formatter~ parameter.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- :emphasize ::   
+
+  When ~t~, emphasize level one and level two items.
+
+- :lang ::        
+
+  Language to use for descriptive cells like "Task".[fn:77]
+
+- :link ::       
+
+  Link the item headlines in the table to their origins.
+
+- :narrow ::     
+
+  An integer to limit the width of the headline column in the org table.
+  If you write it like {{{samp(50!)}}}, then the headline will also be
+  shortened in export.
+
+- :indent  ::    
+
+  Indent each headline field according to its level.
+
+- :tcolumns ::   
+
+  Number of columns to be used for times. If this is smaller than
+  ~:maxlevel~, lower levels will be lumped into one column.
+
+- :level ::      
+
+  Should a level number column be included?
+
+- :compact ::    
+
+  Abbreviation for ~:level nil :indent t :narrow 40! :tcolumns 1~. All
+  are overwritten except if there is an explicit ~:narrow~.
+
+- :timestamp ::  
+
+  A timestamp for the entry, when available. Look for SCHEDULED,
+  DEADLINE, TIMESTAMP and TIMESTAMP_IA, in this order.
+
+- :properties :: 
+
+  List of properties that should be shown in the table. Each property
+  will get its own column.
+
+- :inherit-props :: 
+
+  When this flag is ~t~, the values for ~:properties~ will be inherited.
+
+- :formula  ::   
+
+  Content of a ~#+TBLFM~ line to be added and evaluated. As a special
+  case, {{{samp(:formula %)}}} adds a column with % time. If you do not
+  specify a formula here, any existing formula below the clock table
+  will survive updates and be evaluated.
+
+- :formatter ::  
+
+  A function to format clock data and insert it into the buffer.
+
+
+To get a clock summary of the current level 1 tree, for the current
+day, you could write:
+
+#+begin_example
+   ,#+BEGIN: clocktable :maxlevel 2 :block today :scope tree1 :link t
+   ,#+END: clocktable
+#+end_example
+
+{{{noindent}}} To use a specific time range you could write:[fn:78]
+
+#+begin_example
+   ,#+BEGIN: clocktable :tstart "<2006-08-10 Thu 10:00>"
+                       :tend "<2006-08-10 Thu 12:00>"
+   ,#+END: clocktable
+#+end_example
+
+A summary of the current subtree with % times would be:
+
+#+begin_example
+   ,#+BEGIN: clocktable :scope subtree :link t :formula %
+   ,#+END: clocktable
+#+end_example
+
+A horizontally compact representation of everything clocked during
+last week would be:
+
+#+begin_example
+   ,#+BEGIN: clocktable :scope agenda :block lastweek :compact t
+   ,#+END: clocktable
+#+end_example
+
+*** Resolving idle time
+    :PROPERTIES:
+    :DESCRIPTION: Resolving time when you've been idle
+    :TITLE:    Resolving idle time and continuous clocking
+    :END:
+
+{{{cindex(resolve idle time)}}}
+{{{cindex(idle\\\, resolve\\\, dangling)}}}
+
+If you clock in on a work item, and then walk away from your
+computer---perhaps to take a phone call---you often need to
+``resolve'' the time you were away by either subtracting it from the
+current clock, or applying it to another one.
+
+{{{vindex(org-clock-idle-time)}}}
+
+By customizing the variable ~org-clock-idle-time~ to some integer,
+such as 10 or 15, Emacs can alert you when you get back to your
+computer after being idle for that many minutes, and ask what you want
+to do with the idle time.[fn:79] There will be a question waiting for you
+when you get back, indicating how much idle time has passed
+(constantly updated with the current amount), as well as a set of
+choices to correct the discrepancy:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(k)}}} ::
+  {{{kindex(k)}}}
+
+  To keep some or all of the minutes and stay clocked in, press
+  {{{kbd(k)}}}. Org will ask how many of the minutes to keep. Press
+  {{{key(RET)}}} to keep them all, effectively changing nothing, or
+  enter a number to keep that many minutes.
+
+- {{{kbd(K)}}} ::
+  {{{kindex(K)}}}
+
+  If you use the shift key and press {{{kbd(K)}}}, it will keep however
+  many minutes you request and then immediately clock out of that task.
+  If you keep all of the minutes, this is the same as just clocking out
+  of the current task.
+
+- {{{kbd(s)}}} ::
+  {{{kindex(s)}}}
+
+  To keep none of the minutes, use {{{kbd(s)}}} to subtract all the away
+  time from the clock, and then check back in from the moment you
+  returned.
+
+- {{{kbd(S)}}} ::
+  {{{kindex(S)}}}
+
+  To keep none of the minutes and just clock out at the start of the
+  away time, use the shift key and press {{{kbd(S)}}}. Remember that
+  using shift will always leave you clocked out, no matter which option
+  you choose.
+
+- {{{kbd(C)}}} ::
+  {{{kindex(C)}}}
+
+  To cancel the clock altogether, use {{{kbd(C)}}}. Note that if instead
+  of canceling you subtract the away time, and the resulting clock
+  amount is less than a minute, the clock will still be canceled rather
+  than clutter up the log with an empty entry.
+
+
+What if you subtracted those away minutes from the current clock, and
+now want to apply them to a new clock? Simply clock in to any task
+immediately after the subtraction. Org will notice that you have
+subtracted time ``on the books'', so to speak, and will ask if you
+want to apply those minutes to the next task you clock in on.
+
+There is one other instance when this clock resolution magic occurs.
+Say you were clocked in and hacking away, and suddenly your cat chased
+a mouse who scared a hamster that crashed into your UPS's power
+button! You suddenly lose all your buffers, but thanks to auto-save
+you still have your recent Org mode changes, including your last clock
+in.
+
+If you restart Emacs and clock into any task, Org will notice that you
+have a dangling clock which was never clocked out from your last
+session. Using that clock's starting time as the beginning of the
+unaccounted-for period, Org will ask how you want to resolve that
+time. The logic and behavior is identical to dealing with away time
+due to idleness; it is just happening due to a recovery event rather
+than a set amount of idle time.
+
+You can also check all the files visited by your Org agenda for
+dangling clocks at any time using {{{kbd(M-x org-resolve-clocks RET)}}}
+ (or {{{kbd(C-c C-x C-z)}}}).
+
+*** Continuous clocking
+{{{cindex(continuous clocking)}}}
+{{{vindex(org-clock-continuously)}}}
+
+You may want to start clocking from the time when you clocked out the
+previous task. To enable this systematically, set
+~org-clock-continuously~ to ~t~. Each time you clock in, Org retrieves
+the clock-out time of the last clocked entry for this session, and
+start the new clock from there.
+
+If you only want this from time to time, use three universal prefix
+arguments with ~org-clock-in~ and two {{{kbd(C-u C-u)}}} with
+~org-clock-in-last~.
+
+** Effort estimates
+   :PROPERTIES:
+   :DESCRIPTION: Planning work effort in advance
+   :END:
+{{{cindex(effort estimates)}}}
+{{{cindex(property\\\, Effort)}}}
+{{{vindex(org-effort-property)}}}
+
+If you want to plan your work in a very detailed way, or if you need
+to produce offers with quotations of the estimated work effort, you
+may want to assign effort estimates to entries. If you are also
+clocking your work, you may later want to compare the planned effort
+with the actual working time, a great way to improve planning
+estimates. Effort estimates are stored in a special property
+{{{samp(Effort)}}}.[fn:80] You can set the effort for an entry with
+the following commands:
+
+#+attr_texinfo: :table-type "table" :indic "@kbd"
+- {{{kbd(C-c C-x e)}}}, ~org-set-effort~ ::
+  {{{kindex(C-c C-x e)}}}
+
+  Set the effort estimate for the current entry. With a numeric prefix
+  argument, set it to the Nth allowed value (see below). This command is
+  also accessible from the agenda with the {{{kbd(e)}}} key.
+
+- {{{kbd(C-c C-x C-e)}}}, ~org-clock-modify-effort-estimate~ ::
+  {{{kindex(C-c C-x C-e)}}}
+
+  Modify the effort estimate of the item currently being clocked.
+
+
+Clearly the best way to work with effort estimates is through column
+view (see [[Column view]]). You should start by setting up discrete values
+for effort estimates, and a ~COLUMNS~ format that displays these
+values together with clock sums (if you want to clock your time). For
+a specific buffer you can use:
+
+#+begin_example
+   ,#+PROPERTY: Effort_ALL 0 0:10 0:30 1:00 2:00 3:00 4:00 5:00 6:00 7:00
+   ,#+COLUMNS: %40ITEM(Task) %17Effort(Estimated Effort){:} %CLOCKSUM
+#+end_example
+
+{{{vindex(org-global-properties)}}}
+{{{vindex(org-columns-default-format)}}}
+
+{{{noindent}}} or, even better, you can set up these values globally
+by customizing the variables ~org-global-properties~ and
+~org-columns-default-format~. In particular if you want to use this
+setup also in the agenda, a global setup may be advised.
+
+The way to assign estimates to individual items is then to switch to
+column mode, and to use {{{kbdkey(S-,right)}}} and
+{{{kbdkey(S-,left)}}} to change the value. The values you enter will
+immediately be summed up in the hierarchy. In the column next to it,
+any clocked time will be displayed.
+
+{{{vindex(org-agenda-columns-add-appointments-to-effort-sum)}}}
+
+If you switch to column view in the daily/weekly agenda, the effort column
+will summarize the estimated work effort for each day, and you can use this to find space in your schedule.  To get
+an overview of the entire part of the day that is committed, you can set the
+option ~org-agenda-columns-add-appointments-to-effort-sum~.[fn:179] The
+appointments on a day that take place over a specified time interval will
+then also be added to the load estimate of the day.
+
+Effort estimates can be used in secondary agenda filtering that is
+triggered with the {{{kbd(/)}}} key in the agenda (see [[Agenda
+commands]]). If you have these estimates defined consistently, two or
+three key presses will narrow down the list to stuff that fits into an
+available time slot.
+
+** Relative timer
+   :PROPERTIES:
+   :DESCRIPTION: Notes with a running timer
+   :TITLE:    Taking notes with a relative timer
+   :END:
+{{{cindex(relative timer)}}}
+
+When taking notes during, for example, a meeting or a video viewing, it can
+be useful to have access to times relative to a starting time.  Org provides
+such a relative timer and make it easy to create timed notes.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-x .)}}}, ~org-timer~ ::
+  {{{kindex(C-c C-x .)}}}
+
+  Insert a relative time into the buffer.  The first time you use this, the
+  timer will be started.  When called with a prefix argument, the timer is
+  restarted.
+
+- {{{kbd(C-c C-x -)}}}, ~org-timer-item~ ::
+  {{{kindex(C-c C-x -)}}}
+
+  Insert a description list item with the current relative time.  With a prefix
+  argument, first reset the timer to 0.
+
+- {{{kbdkey(M-,RET)}}}, ~org-insert-heading~ ::
+  {{{kindex(M-@key{RET})}}}
+
+  Once the timer list is started, you can also use {{{kbdkey(M-,RET)}}}
+  to insert new timer items.
+
+- {{{kbd(C-c C-x ,)}}} ::
+  {{{kindex(C-c C-x ,)}}}
+  {{{kindex(C-c C-x ,)}}}
+
+  Pause the timer, or continue it if it is already paused
+  ({{{command(org-timer-pause-or-continue)}}}).
+
+- {{{kbd(C-u C-c C-x ,)}}} ::
+  {{{kindex(C-u C-c C-x ,)}}}
+  {{{kindex(C-u C-c C-x ,)}}}
+
+  Stop the timer. After this, you can only start a new timer, not
+  continue the old one. This command also removes the timer from the
+  mode line.
+
+- {{{kbd(C-c C-x 0)}}}, ~org-timer-start~ ::
+  {{{kindex(C-c C-x 0)}}}
+
+  Reset the timer without inserting anything into the buffer. By
+  default, the timer is reset to 0. When called with a {{{kbd(C-u)}}}
+  prefix, reset the timer to specific starting offset. The user is
+  prompted for the offset, with a default taken from a timer string at
+  point, if any, So this can be used to restart taking notes after a
+  break in the process. When called with a double prefix argument
+  {{{kbd(C-u C-u)}}}, change all timer strings in the active region by a
+  certain amount. This can be used to fix timer strings if the timer was
+  not started at exactly the right moment.
+
+** Countdown timer
+   :PROPERTIES:
+   :DESCRIPTION: Starting a countdown timer for a task
+   :END:
+{{{cindex(Countdown timer)}}}
+{{{kindex(C-c C-x ;)}}}
+{{{kindex(;)}}}
+
+Calling ~org-timer-set-timer~ from an Org mode buffer runs a countdown
+timer. Use {{{kbd(;)}}} from agenda buffers, {{{key(C-c C-x ;)}}}
+everywhere else.
+
+~org-timer-set-timer~ prompts the user for a duration and displays a
+countdown timer in the modeline.  ~org-timer-default-timer~ sets the
+default countdown value.  Giving a prefix numeric argument overrides this
+default value.
+
+* Capture - Refile - Archive
+  :PROPERTIES:
+  :DESCRIPTION: The ins and outs for projects
+  :END:
+{{{cindex(capture)}}}
+
+An important part of any organization system is the ability to quickly
+capture new ideas and tasks, and to associate reference material with
+them. Org does this using a process called /capture/. It also can
+store files related to a task (/attachments/) in a special directory.
+Once in the system, tasks and projects need to be moved around. Moving
+completed project trees to an archive file keeps the system compact
+and fast.
+
+** Capture
+   :PROPERTIES:
+   :DESCRIPTION: Capturing new stuff
+   :END:
+{{{cindex(capture)}}}
+
+Org's method for capturing new items is heavily inspired by John
+Wiegley excellent remember package. Up to version 6.36 Org used a
+special setup for {{{file(remember.el)}}}.  The file {{{file(org-remember.el)}}}
+is still part of Org mode for backward compatibility with existing
+setups. You can find the documentation for org-remember at
+[[http://orgmode.org/org-remember.pdf]].
+
+The new capturing setup described here is preferred and should be used by new
+users.  To convert your ~org-remember-templates~, run the following command:
+{{{kbdspckey(M-x org-capture-import-remember-templates,RET)}}}
+
+{{{noindent}}} and then customize the new variable with 
+{{{kbd(M-x customize-variable org-capture-templates)}}}, check the result, and
+save the customization. You can then use both remember and capture
+until you are familiar with the new mechanism.
+
+Capture lets you quickly store notes with little interruption of your work
+flow.  The basic process of capturing is very similar to remember, but Org
+does enhance it with templates and more.
+
+*** Setting up capture
+    :PROPERTIES:
+    :DESCRIPTION: Where notes will be stored
+    :END:
+
+The following customization sets a default target file for notes, and defines
+a global key for capturing new material.[fn:81]
+
+{{{vindex(org-default-notes-file)}}}
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(setq org-default-notes-file (concat org-directory "/notes.org"))
+(define-key global-map "\C-cc" 'org-capture)
+#+end_src
+
+*** Using capture
+    :PROPERTIES:
+    :DESCRIPTION: Commands to invoke and terminate capture
+    :END:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c c)}}}, ~org-capture~ ::
+  {{{kindex(C-c c)}}}
+  {{{cindex(date tree)}}}
+
+  Call the command ~org-capture~. Note that this keybinding is global
+  and not active by default - you need to install it. If you have
+  templates defined (see [[Capture templates]], it will offer these
+  templates for selection or use a new Org outline node as the default
+  template. It will insert the template into the target file and switch
+  to an indirect buffer narrowed to this new node. You may then insert
+  the information you want.
+
+- {{{kbd(C-c C-c)}}}, ~org-capture-finalize~ ::
+  {{{kindex(C-c C-c)}}}
+
+  Once you have finished entering information into the capture buffer,
+  {{{kbd(C-c C-c)}}} will return you to the window configuration before
+  the capture process, so that you can resume your work without further
+  distraction. When called with a prefix argument, finalize and then
+  jump to the captured item.
+
+- {{{kbd(C-c C-w)}}}, ~org-capture-refile~ ::
+  {{{kindex(C-c C-w)}}}
+
+  Finalize the capture process by refiling the note to a different place
+  (see [[Refile and copy]]). Please realize that this is a normal refiling
+  command that will be executed---so the cursor position at the moment
+  you run this command is important. If you have inserted a tree with a
+  parent and children, first move the cursor back to the parent. Any
+  prefix argument given to this command will be passed on to the
+  ~org-refile~ command.
+
+- {{{kbd(C-c C-k)}}}, ~org-capture-kill~ ::
+  {{{kindex(C-c C-k)}}}
+
+  Abort the capture process and return to the previous state.
+
+
+You can also call ~org-capture~ in a special way from the agenda,
+using the {{{kbd(k c)}}} key combination. With this access, timestamps
+inserted by the selected capture template will default to the cursor
+date in the agenda, rather than to the current date.
+
+To find the locations of the last stored capture, use ~org-capture~ with
+prefix commands:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-u C-c c)}}} ::
+  {{{kindex(C-u C-c c)}}}
+
+  Visit the target location of a capture template. You get to select the
+  template in the usual way.
+
+- {{{kbd(C-u C-u C-c c)}}} ::
+  {{{kindex(C-u C-u C-c c)}}}
+
+  Visit the last stored capture item in its buffer.
+
+
+{{{vindex(org-capture-bookmark)}}}
+{{{cindex(org-capture-last-stored)}}}
+
+You can also jump to the bookmark ~org-capture-last-stored~, which
+will automatically be created unless you set ~org-capture-bookmark~ to
+~nil~.
+
+To insert the capture at point in an Org buffer, call ~org-capture~
+with a ~C-0~ prefix argument.
+
+*** Capture templates
+    :PROPERTIES:
+    :DESCRIPTION: Define the outline of different note types
+    :END:
+{{{cindex(templates\\\, for Capture)}}}
+
+You can use templates for different types of capture items, and for
+different target locations. The easiest way to create such templates
+is through the customize interface.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c c C)}}} ::
+  {{{kindex(C-c c C)}}}
+
+  Customize the variable ~org-capture-templates~.
+
+
+Before we give the formal description of template definitions, let's
+look at an example. Say you would like to use one template to create
+general TODO entries, and you want to put these entries under the
+heading {{{samp(Tasks)}}} in your file {{{file(~/org/gtd.org)}}}.
+Also, a date tree in the file {{{file(journal.org)}}} should capture
+journal entries. A possible configuration would look like:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(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")))
+#+end_src
+
+{{{noindent}}} If you then press {{{kbd(C-c c t)}}}, Org will prepare
+the template for you like this:
+
+#+begin_example
+   ,* TODO
+     [[file:link to where you initiated capture]]
+#+end_example
+
+{{{noindent}}} During expansion of the template, ~%a~ has been
+replaced by a link to the location from where you called the capture
+command. This can be extremely useful for deriving tasks from emails,
+for example. You fill in the task definition, press ~C-c C-c~ and Org
+returns you to the same place where you started the capture process.
+
+To define special keys to capture to a particular template without
+going through the interactive template selection, you can create your
+key binding like this:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(define-key global-map "\C-cx"
+   (lambda () (interactive) (org-capture nil "x")))
+#+end_src
+
+**** Template elements
+     :PROPERTIES:
+     :DESCRIPTION: What is needed for a complete template entry
+     :END:
+
+Now lets look at the elements of a template definition.  Each entry in
+~org-capture-templates~ is a list with the following items:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~keys~ ::
+
+  The keys that will select the template, as a string, characters
+  only, for example "a" for a template to be selected with a
+  single key, or "BTW" for selection with two keys.  When using
+  several keys, keys using the same prefix key must be sequential
+  in the list and preceded by a 2-element entry explaining the
+  prefix key, for example:
+
+  #+header: :eval no
+  #+header: :exports code
+  #+begin_src emacs-lisp
+    ("b" "Templates for marking stuff to buy")
+  #+end_src
+
+  {{{noindent}}} If you do not define a template for the {{{kbd(C)}}}
+  key, this key will be used to open the customize buffer for this
+  complex variable.
+
+- ~description~ ::
+
+  A short string describing the template, which will be shown during
+  selection.
+
+- ~type~ ::
+
+  The type of entry, a symbol.  Valid values are:
+
+  - ~entry~ ::
+
+    An Org mode node, with a headline. Will be filed as the child of the
+    target entry or as a top-level entry. The target file should be an Org
+    mode file.
+
+  - ~item~ ::
+
+    A plain list item, placed in the first plain list at the target
+    location. Again the target file should be an Org file.
+
+  - ~checkitem~ ::
+
+    A checkbox item. This only differs from the plain list item by the
+    default template.
+
+  - ~table-line~ ::
+
+    A new line in the first table at the target location. Where exactly
+    the line will be inserted depends on the properties ~:prepend~ and
+    ~:table-line-pos~ (see below).
+
+  - plain ::
+
+    Text to be inserted as it is.
+
+- target ::
+  {{{vindex(org-default-notes-file)}}}
+
+  Specification of where the captured item should be placed.  In Org mode
+  files, targets usually define a node.  Entries will become children of this
+  node.  Other types will be added to the table or list in the body of this
+  node.  Most target specifications contain a file name.  If that file name is
+  the empty string, it defaults to ~org-default-notes-file~.  A file can
+  also be given as a variable, function, or Emacs Lisp form.
+
+  Valid values are:
+
+  - ~(file "path/to/file")~ ::
+
+    Text will be placed at the beginning or end of that file.
+
+  - ~(id "id of existing org entry")~ ::
+
+    Filing as child of this entry, or in the body of the entry.
+
+  - ~(file+headline "path/to/file" "node headline")~ ::
+
+    Fast configuration if the target heading is unique in the file.
+
+  - ~(file+olp "path/to/file" "Level 1 heading" "Level 2" ...)~ ::
+
+    For non-unique headings, the full path is safer.
+
+  - ~(file+regexp  "path/to/file" "regexp to find location")~ ::
+
+    Use a regular expression to position the cursor.
+
+  - ~(file+datetree "path/to/file")~ ::
+
+    Will create a heading in a date tree for today's date.
+
+  - ~(file+datetree+prompt "path/to/file")~ ::
+
+    Will create a heading in a date tree, but will prompt for the date.
+
+  - ~(file+function "path/to/file" function-finding-location)~ ::
+
+    A function to find the right location in the file.
+
+  - ~(clock)~ ::
+
+    File to the entry that is currently being clocked.
+
+  - ~(function function-finding-location)~ ::
+
+    Most general way, write your own function to find both
+    file and location.
+
+- ~template~ ::
+
+  The template for creating the capture item. If you leave this empty,
+  an appropriate default template will be used. Otherwise this is a
+  string with escape codes, which will be replaced depending on time and
+  context of the capture call. The string with escapes may be loaded
+  from a template file, using the special syntax 
+  ~(file "path/to/template")~. See below for more details.
+
+- ~properties~ ::
+
+  The rest of the entry is a property list of additional options.
+  Recognized properties are:
+
+  - ~:prepend~ ::
+
+    Normally new captured information will be appended at the target
+    location (last child, last table line, last list item, ...). Setting
+    this property will change that.
+
+  - ~:immediate-finish~ ::
+
+    When set, do not offer to edit the information, just file it away
+    immediately. This makes sense if the template only needs information
+    that can be added automatically.
+
+  - ~:empty-lines~ ::
+
+    Set this to the number of lines to insert before and after the new
+    item. The default is 0, and the only other common value is 1.
+
+  - ~:clock-in~ ::
+
+    Start the clock in this item.
+
+  - ~:clock-keep~ ::
+
+    Keep the clock running when filing the captured entry.
+
+  - ~:clock-resume~ ::
+
+    If starting the capture interrupted a clock, restart that clock when
+    finished with the capture. Note that ~:clock-keep~ has precedence over
+    ~:clock-resume~. When setting both to ~t~, the current clock will run
+    and the previous one will not be resumed.
+
+  - ~:unnarrowed~ ::
+
+    Do not narrow the target buffer, simply show the full buffer. Default
+    is to narrow it so that you only see the new material.
+
+  - ~:table-line-pos~ ::
+
+    Specification of the location in the table where the new line should
+    be inserted. It should be a string like "II-3" meaning that the new
+    line should become the third line before the second horizontal
+    separator line.
+
+  - ~:kill-buffer~ ::
+
+    If the target file was not yet visited when capture was invoked, kill
+    the buffer again after capture is completed.
+
+**** Template expansion
+     :PROPERTIES:
+     :DESCRIPTION: Filling in information about time and context
+     :END:
+
+In the template itself, special {{{kbd(%)}}}-escapes allow dynamic
+insertion of content.[fn:82] The templates are expanded in the order given
+here:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- %[{{{var(file)}}}] ::    
+
+  Insert the contents of the file given by {{{var(file)}}}.
+
+- %({{{var(sexp)}}}) ::    
+
+  Evaluate Elisp {{{var(sexp)}}} and replace with the result. The
+  {{{var(sexp)}}} must return a string.
+
+- %<...> ::     
+
+  The result of format-time-string on the ... format specification.
+
+- %t ::         
+
+  Timestamp, date only.
+
+- %T ::         
+
+  Timestamp, with date and time.
+
+- %u, %U ::     
+
+  Like ~%t~, ~%T~ above, but inactive timestamps.
+
+- %i ::         
+
+  Initial content, the region when capture is called while the region is
+  active. The entire text will be indented like ~%i~ itself.
+
+- %a ::         
+
+  Annotation, normally the link created with ~org-store-link~.
+
+- %A ::         
+
+  Like ~%a~, but prompt for the description part.
+
+- %l ::         
+
+  Like ~%a~, but only insert the literal link.
+
+- %c ::         
+
+  Current kill ring head.
+
+- %x ::         
+
+  Content of the X clipboard.
+
+- %k ::         
+
+  Title of the currently clocked task.
+
+- %K ::         
+
+  Link to the currently clocked task.
+
+- %n ::         
+
+  User name (taken from ~user-full-name~).
+
+- %f ::         
+
+  File visited by current buffer when org-capture was called.
+
+- %F ::         
+
+  Full path of the file or directory visited by current buffer.
+
+- %:keyword ::   
+
+  Specific information for certain link types, see below.
+
+- %^g  ::       
+
+  Prompt for tags, with completion on tags in target file.
+
+- %^G  ::       
+
+  Prompt for tags, with completion all tags in all agenda files.
+
+- %^t  ::       
+
+  Like ~%t~, but prompt for date. Similarly ~%^T~, ~%^u~, ~%^U~. You may
+  define a prompt like ~%^{Birthday}t~.
+
+- %^C  ::       
+
+  Interactive selection of which kill or clip to use.
+
+- %^L  ::       
+
+  Like ~%^C~, but insert as link.
+
+- %^{PROP}p ::  
+
+  Prompt the user for a value for property {{{var(prop)}}}.
+
+- %^{PROMPT} ::  
+
+  Prompt the user for a string and replace this sequence with it. You
+  may specify a default value and a completion table with
+  ~%^{prompt|default|completion2|completion3...}~. The arrow keys access
+  a prompt-specific history.
+
+- %\n ::        
+
+  Insert the text entered at the nth %^{PROMPT}, where ~n~ is
+  a number, starting from 1.
+
+- %? ::          
+
+  After completing the template, position cursor here.
+
+
+{{{noindent}}} For specific link types, the following keywords will be
+defined:[fn:83]
+
+{{{vindex(org-from-is-user-regexp)}}}
+
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- bbdb :: ~%:name %:company~ 
+- irc ::   ~%:server %:port %:nick~              
+- vm vm-imap wl mh mew rmail ::   
+  ~%:type %:subject %:message-id~       
+  ~%:from %:fromname %:fromaddress~     
+  ~%:to %:toname %:toaddress~           
+  ~%:date~ (message date header field)                   
+  ~%:date-timestamp~ (date as active timestamp)          
+  ~%:date-timestamp-inactive~ (date as inactive timestamp)
+  ~%:fromto~ (either "to NAME" or "from NAME")[fn:84]
+- gnus :: ~%:group~, for messages also all email fields            
+- w3 w3m :: ~%:url~                               
+- info :: ~%:file %:node~                       
+- calendar :: ~%:date~                              
+
+{{{noindent}}} To place the cursor after template expansion use:
+
+#+begin_example
+   %?          After completing the template, position cursor here.
+#+end_example
+
+**** Templates in contexts
+     :PROPERTIES:
+     :DESCRIPTION: Only show a template in a specific context
+     :END:
+
+{{{vindex(org-capture-templates-contexts)}}}
+
+To control whether a capture template should be accessible from a
+specific context, you can customize ~org-capture-templates-contexts~.
+Let's say, for example, that you have a capture template "p" for
+storing Gnus emails containing patches. Then you would configure this
+option like this:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(setq org-capture-templates-contexts
+      '(("p" (in-mode . "message-mode"))))
+#+end_src
+
+You can also tell that the command key "p" should refer to another
+template.  In that case, add this command key like this:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(setq org-capture-templates-contexts
+      '(("p" "q" (in-mode . "message-mode"))))
+#+end_src
+
+See the docstring of the variable ~org-capture-templates-contexts~ for
+more information.
+
+** Attachments
+   :PROPERTIES:
+   :DESCRIPTION: Add files to tasks
+   :END:
+{{{cindex(attachments)}}}
+{{{vindex(org-attach-directory)}}}
+
+It is often useful to associate reference material with an outline
+node/task. Small chunks of plain text can simply be stored in the
+subtree of a project. Hyperlinks (see [[Hyperlinks]]) can establish
+associations with files that live elsewhere on your computer or in the
+cloud, like emails or source code files belonging to a project.
+Another method is /attachments/, which are files located in a
+directory belonging to an outline node. Org uses directories named by
+the unique ID of each entry. These directories are located in the
+{{{file(data)}}} directory which lives in the same directory where
+your Org file lives.[fn:85] If you initialize this directory with
+~git init~, Org will automatically commit changes when it sees them.
+The attachment system has been contributed to Org by John Wiegley.
+
+In cases where it seems better to do so, you can also attach a
+directory of your choice to an entry. You can also make children
+inherit the attachment directory from a parent, so that an entire
+subtree uses the same attached directory.
+
+{{{noindent}}} The following commands deal with attachments:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-a)}}}, ~org-attach~ ::
+  {{{kindex(C-c C-a)}}}
+
+  The dispatcher for commands related to the attachment system. After
+  these keys, a list of commands is displayed and you must press an
+  additional key to select a command:
+
+  - {{{kbd(a)}}}, ~org-attach-attach~ ::
+    {{{kindex(C-c C-a a)}}}
+    {{{vindex(org-attach-method)}}}
+
+    Select a file and move it into the task's attachment directory. The
+    file will be copied, moved, or linked, depending on
+    ~org-attach-method~. Note that hard links are not supported on all
+    systems.
+
+  - {{{kbd(c)}}}/{{{kbd(m)}}}/{{{kbd(l)}}} ::
+    {{{kindex(C-c C-a c)}}}
+    {{{kindex(C-c C-a m)}}}
+    {{{kindex(C-c C-a l)}}}
+
+    Attach a file using the copy/move/link method. Note that hard links
+    are not supported on all systems.
+
+  - {{{kbd(n)}}}, ~org-attach-new~ ::
+    {{{kindex(C-c C-a n)}}}
+
+    Create a new attachment as an Emacs buffer.
+
+  - {{{kbd(z)}}}, ~org-attach-sync~ ::
+    {{{kindex(C-c C-a z)}}}
+
+    Synchronize the current task with its attachment directory, in case
+    you added attachments yourself.
+
+  - {{{kbd(o)}}}, ~org-attach-open~ ::
+    {{{kindex(C-c C-a o)}}}
+    {{{vindex(org-file-apps)}}}
+
+    Open current task's attachment. If there is more than one, prompt for
+    a file name first. Opening will follow the rules set by
+    ~org-file-apps~. For more details, see the information on following
+    hyperlinks (see [[Handling links]]).
+
+  - {{{kbd(O)}}}, ~org-attach-open-in-emacs~ ::
+    {{{kindex(C-c C-a O)}}}
+
+    Also open the attachment, but force opening the file in Emacs.
+
+  - {{{kbd(f)}}}, ~org-attach-reveal~ ::
+    {{{kindex(C-c C-a f)}}}
+
+    Open the current task's attachment directory.
+
+  - {{{kbd(F)}}}, ~org-attach-reveal-in-emacs~ ::
+    {{{kindex(C-c C-a F)}}}
+
+    Also open the directory, but force using @command{dired} in Emacs.
+
+  - {{{kbd(d)}}}, ~org-attach-delete-one~ ::
+    {{{kindex(C-c C-a d)}}}
+
+    Select and delete a single attachment.
+
+  - {{{kbd(D)}}}, ~org-attach-delete-all~ ::
+    {{{kindex(C-c C-a D)}}}
+
+    Delete all of a task's attachments. A safer way is to open the
+    directory in {{{command(dired)}}} and delete from there.
+
+  - {{{kbd(s)}}}, ~org-attach-set-directory~ ::
+    {{{kindex(C-c C-a s)}}}
+    {{{cindex(property\\\, ATTACH_DIR)}}}
+
+    Set a specific directory as the entry's attachment directory. This
+    works by putting the directory path into the ~ATTACH_DIR~ property.
+
+  - {{{kbd(i)}}}, ~org-attach-set-inherit~ ::
+    {{{kindex(C-c C-a i)}}}
+    {{{cindex(property\\\, ATTACH_DIR_INHERIT)}}}
+
+    Set the ~ATTACH_DIR_INHERIT~ property, so that children will use the
+    same directory for attachments as the parent does.
+
+** RSS feeds
+   :PROPERTIES:
+   :DESCRIPTION: Getting input from RSS feeds
+   :END:
+{{{cindex(RSS feeds)}}}
+{{{cindex(Atom feeds)}}}
+
+Org can add and change entries based on information found in RSS feeds and
+Atom feeds.  You could use this to make a task out of each new podcast in a
+podcast feed.  Or you could use a phone-based note-creating service on the
+web to import tasks into Org.  To access feeds, configure the variable
+~org-feed-alist~.  The docstring of this variable has detailed
+information.  Here is an example:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(setq org-feed-alist
+     '(("Slashdot"
+         "http://rss.slashdot.org/Slashdot/slashdot"
+         "~/txt/org/feeds.org" "Slashdot Entries")))
+#+end_src
+
+{{{noindent}}} will configure that new items from the feed provided by
+~rss.slashdot.org~ will result in new entries in the file
+{{{file(~/org/feeds.org)}}} under the heading ~Slashdot Entries~,
+whenever the following command is used:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-x g)}}}, ~org-feed-update-all~ ::
+  {{{kindex(C-c C-x g)}}}
+
+  Collect items from the feeds configured in ~org-feed-alist~ and act
+  upon them.
+
+- {{{kbd(C-c C-x G)}}}, ~org-feed-goto-inbox~ ::
+  {{{kindex(C-c C-x G)}}}
+
+  Prompt for a feed name and go to the inbox configured for this feed.
+
+
+Under the same headline, Org will create a drawer
+{{{samp(FEEDSTATUS)}}} in which it will store information about the
+status of items in the feed, to avoid adding the same item several
+times. You should add {{{samp(FEEDSTATUS)}}} to the list of drawers in
+that file:
+
+#+begin_example
+   ,#+DRAWERS: LOGBOOK PROPERTIES FEEDSTATUS
+#+end_example
+
+For more information, including how to read atom feeds, see
+{{{file(org-feed.el)}}} and the docstring of ~org-feed-alist~.
+
+** Protocols
+   :PROPERTIES:
+   :DESCRIPTION: External (e.g., browser) access to Emacs and Org
+   :TITLE:    Protocols for external access
+   :END:
+
+{{{cindex(protocols\\\, for external access)}}}
+{{{cindex(emacsserver)}}}
+
+You can set up Org for handling protocol calls from outside
+applications that are passed to Emacs through the
+{{{file(emacsserver)}}}. For example, you can configure bookmarks in
+your web browser to send a link to the current page to Org and create
+a note from it using capture (see [[Capture]]). Or you could create a
+bookmark that will tell Emacs to open the local source file of a
+remote website you are looking at with the browser. See
+[[http://orgmode.org/worg/org-contrib/org-protocol.php]] for detailed
+documentation and setup instructions.
+
+** Refile and copy
+   :PROPERTIES:
+   :DESCRIPTION: Moving/copying a tree from one place to another
+   :END:
+{{{cindex(refiling notes)}}}
+{{{cindex(copying notes)}}}
+
+When reviewing the captured data, you may want to refile or to copy some of
+the entries into a different list, for example into a project.  Cutting,
+finding the right location, and then pasting the note is cumbersome.  To
+simplify this process, you can use the following special command:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c M-w)}}}, ~org-copy~ ::
+  {{{kindex(C-c M-w)}}}
+  {{{findex(org-copy)}}}
+
+  Copying works like refiling, except that the original note is not deleted.
+
+- {{{kbd(C-c C-w)}}}, ~org-refile~ ::
+  {{{kindex(C-c C-w)}}}
+  {{{findex(org-refile)}}}
+  {{{vindex(org-reverse-note-order)}}}
+  {{{vindex(org-refile-targets)}}}
+  {{{vindex(org-refile-use-outline-path)}}}
+  {{{vindex(org-outline-path-complete-in-steps)}}}
+  {{{vindex(org-refile-allow-creating-parent-nodes)}}}
+  {{{vindex(org-log-refile)}}}
+  {{{vindex(org-refile-use-cache)}}}
+
+  Refile the entry or region at point. This command offers possible
+  locations for refiling the entry and lets you select one with
+  completion. The item (or all items in the region) is filed below the
+  target heading as a subitem. Depending on ~org-reverse-note-order~, it
+  will be either the first or last subitem.
+
+  By default, all level 1 headlines in the current buffer are considered
+  to be targets, but you can have more complex definitions across a
+  number of files. See the variable ~org-refile-targets~ for details. If
+  you would like to select a location via a file-path-like completion
+  along the outline path, see the variables
+  ~org-refile-use-outline-path~ and
+  ~org-outline-path-complete-in-steps~. If you would like to be able to
+  create new nodes as new parents for refiling on the fly, check the
+  variable ~org-refile-allow-creating-parent-nodes~. When the variable
+  ~org-log-refile~ is set, a timestamp or a note will be recorded when
+  an entry has been refiled.[fn:86]
+
+- {{{kbd(C-u C-c C-w)}}} ::
+  {{{kindex(C-u C-c C-w)}}}
+
+  Use the refile interface to jump to a heading.
+
+- {{{kbd(C-u C-u C-c C-w)}}}, ~org-refile-goto-last-stored~ ::
+  {{{kindex(C-u C-u C-c C-w)}}}
+
+  Jump to the location where ~org-refile~ last moved a tree to.
+
+- {{{kbd(C-2 C-c C-w)}}} ::
+  {{{kindex(C-2 C-c C-w)}}}
+
+  Refile as the child of the item currently being clocked.
+
+- {{{kbd(C-0 C-c C-w)}}} or {{{kbd(C-u C-u C-u C-c C-w)}}}, ~org-refile-cache-clear~ ::
+  {{{kindex(C-u C-u C-u C-c C-w)}}}
+  {{{kindex(C-0 C-c C-w)}}}
+
+  Clear the target cache.  Caching of refile targets can be turned on by
+  setting ~org-refile-use-cache~.  To make the command see new possible
+  targets, you have to clear the cache with this command.
+
+** Archiving
+   :PROPERTIES:
+   :DESCRIPTION: What to do with finished products
+   :END:
+{{{cindex(archiving)}}}
+
+When a project represented by a (sub)tree is finished, you may want to
+move the tree out of the way and to stop it from contributing to the
+agenda. Archiving is important to keep your working files compact and
+global searches like the construction of agenda views fast.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-x C-a)}}}, ~org-archive-subtree-default~ ::
+  {{{kindex(C-c C-x C-a)}}}
+  {{{vindex(org-archive-default-command)}}}
+
+  Archive the current entry using the command specified in the variable
+  ~org-archive-default-command~.
+
+*** Moving subtrees
+    :PROPERTIES:
+    :DESCRIPTION: Moving a tree to an archive file
+    :TITLE:    Moving a tree to an archive file
+    :END:
+{{{cindex(external archiving)}}}
+
+The most common archiving action is to move a project tree to another file,
+the archive file.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-x C-s)}}} or short {{{kbd(C-c $)}}}, ~org-archive-subtree~ ::
+  {{{kindex(C-c C-x C-s)}}}
+  {{{kindex(C-c $)}}}
+  {{{vindex(org-archive-location)}}}
+
+  Archive the subtree starting at the cursor position to the location
+  given by ~org-archive-location~.
+
+- {{{Kbd(C-u C-c C-x C-s)}}} ::
+  {{{kindex(C-u C-c C-x C-s)}}}
+
+  Check if any direct children of the current headline could be moved to
+  the archive. To do this, each subtree is checked for open TODO
+  entries. If none are found, the command offers to move it to the
+  archive location. If the cursor is /not/ on a headline when this
+  command is invoked, the level 1 trees will be checked.
+
+
+{{{cindex(archive locations)}}}
+
+The default archive location is a file in the same directory as the
+current file, with the name derived by appending {{{file(_archive)}}}
+to the current file name. You can also choose what heading to file
+archived items under, with the possibility to add them to a datetree
+in a file. For information and examples on how to specify the file and
+the heading, see the documentation string of the variable
+~org-archive-location~.
+
+There is also an in-buffer option for setting this variable, for
+example:[fn:87]
+
+{{{cindex(#+ARCHIVE)}}}
+#+begin_example
+   ,#+ARCHIVE: %s_done::
+#+end_example
+
+{{{cindex(property\\\, ARCHIVE)}}}
+
+{{{noindent}}} If you would like to have a special ARCHIVE location
+for a single entry or a (sub)tree, give the entry an ~:ARCHIVE:~
+property with the location as the value (see [[Properties and columns]]).
+
+{{{vindex(org-archive-save-context-info)}}}
+
+When a subtree is moved, it receives a number of special properties
+that record context information like the file from where the entry
+came, its outline path the archiving time etc. Configure the variable
+~org-archive-save-context-info~ to adjust the amount of information
+added.
+
+*** Internal archiving
+    :PROPERTIES:
+    :DESCRIPTION: Switch off a tree but keep it in the file
+    :END:
+
+If you want to just switch off (for agenda views) certain subtrees
+without moving them to a different file, you can use the ~ARCHIVE
+tag~.
+
+A headline that is marked with the ARCHIVE tag (see [[Tags]]) stays at
+its location in the outline tree, but behaves in the following way:
+
+- It does not open when you attempt to do so with a visibility cycling
+  command (see [[Visibility cycling]]). You can force cycling archived
+  subtrees with {{{kbdkey(C-,TAB)}}}, or by setting the option
+  ~org-cycle-open-archived-trees~. Also normal outline commands like
+  ~show-all~ will open archived subtrees.
+
+  {{{vindex(org-cycle-open-archived-trees)}}}
+
+- During sparse tree construction (see [[Sparse trees]]), matches in
+  archived subtrees are not exposed, unless you configure the option
+  ~org-sparse-tree-open-archived-trees~.
+
+  {{{vindex(org-sparse-tree-open-archived-trees)}}}
+
+- During agenda view construction (see [[Agenda views]]), the content of
+  archived trees is ignored unless you configure the option
+  ~org-agenda-skip-archived-trees~, in which case these trees will
+  always be included.  In the agenda you can press {{{kbd(v a)}}} to
+  get archives temporarily included.
+
+  {{{vindex(org-agenda-skip-archived-trees)}}}
+
+- Archived trees are not exported (see [[Exporting]]), only the headline
+  is. Configure the details using the variable
+  ~org-export-with-archived-trees~.
+
+  {{{vindex(org-export-with-archived-trees)}}}
+
+- Archived trees are excluded from column view unless the variable
+  ~org-columns-skip-archived-trees~ is configured to ~nil~.
+
+  {{{vindex(org-columns-skip-archived-trees)}}}
+
+
+The following commands help manage the ARCHIVE tag:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-x a)}}}, ~org-toggle-archive-tag~ ::
+  {{{kindex(C-c C-x a)}}}
+
+  Toggle the ARCHIVE tag for the current headline. When the tag is set,
+  the headline changes to a shadowed face, and the subtree below it is
+  hidden.
+
+- {{{kbd(C-u C-c C-x a)}}} ::
+  {{{kindex(C-u C-c C-x a)}}}
+
+  Check if any direct children of the current headline should be
+  archived. To do this, each subtree is checked for open TODO entries.
+  If none are found, the command offers to set the ARCHIVE tag for the
+  child. If the cursor is /not/ on a headline when this command is
+  invoked, the level 1 trees will be checked.
+
+- {{{kbdkey(C-,TAB)}}}, ~org-force-cycle-archived~ ::
+
+  Cycle a tree even if it is tagged with ARCHIVE.
+
+- {{{kbd(C-c C-x A)}}}, ~org-archive-to-archive-sibling~ ::
+  {{{kindex(C-c C-x A)}}}
+
+  Move the current entry to the /Archive Sibling/. This is a sibling of
+  the entry with the heading {{{samp(Archive)}}} and the tag
+  {{{samp(ARCHIVE)}}}. The entry becomes a child of that sibling and in
+  this way retains a lot of its original context, including inherited
+  tags and approximate position in the outline.
+
+* FIXME Agenda views
+  :PROPERTIES:
+  :DESCRIPTION: Collecting information into views
+  :OPTIONAL_TITLE: Agenda Views
+  :END:
+
+Due to the way Org works, TODO items, time-stamped items, and tagged
+headlines can be scattered throughout a file or even a number of
+files. To get an overview of open action items, or of events that are
+important for a particular date, this information must be collected,
+sorted and displayed in an organized way.
+
+Org can select items based on various criteria and display them
+in a separate buffer.  Seven different view types are provided:
+
+- an /agenda/ that is like a calendar and shows information for
+  specific dates,
+
+- a /TODO list/ that covers all unfinished action items,
+
+- a /match view/, showings headlines based on the tags, properties,
+  and TODO state associated with them,
+
+- a /timeline view/ that shows all events in a single Org file, in
+  time-sorted view,
+
+- a /text search view/ that shows all entries from multiple files that
+  contain specified keywords,
+
+- a /stuck projects view/ showing projects that currently don't move
+  along, and
+
+- /custom views/ that are special searches and combinations of
+  different views.
+
+
+{{{noindent}}} The extracted information is displayed in a special
+/agenda buffer/. This buffer is read-only, but provides commands to
+visit the corresponding locations in the original Org files, and even
+to edit these files remotely.
+
+{{{vindex(org-agenda-window-setup)}}}
+{{{vindex(org-agenda-restore-windows-after-quit)}}}
+
+Two variables control how the agenda buffer is displayed and whether
+the window configuration is restored when the agenda exits:
+~org-agenda-window-setup~ and ~org-agenda-restore-windows-after-quit~.
+
+** Agenda files
+   :PROPERTIES:
+   :DESCRIPTION: Files being searched for agenda information
+   :END:
+{{{cindex(agenda files)}}}
+{{{cindex(files for agenda)}}}
+{{{vindex(org-agenda-files)}}}
+
+The information to be shown is normally collected from all /agenda
+files/, the files listed in the variable ~org-agenda-files~.[fn:180] If
+a directory is part of this list, all files with the extension
+{{{file(.org)}}} in this directory will be part of the list.
+
+Thus, even if you only work with a single Org file, that file should
+be put into the list.[fn:88]  You can customize ~org-agenda-files~, but
+the easiest way to maintain it is through the following commands
+
+{{{cindex(files\\\, adding to agenda list)}}}
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c [)}}}, ~org-agenda-file-to-front~ ::
+  {{{kindex(C-c [)}}}
+
+  Add current file to the list of agenda files. The file is added to the
+  front of the list. If it was already in the list, it is moved to the
+  front. With a prefix argument, file is added/moved to the end.
+
+- {{{kbd(C-c ])}}}, ~org-remove-file~ ::
+  {{{kindex(C-c ])}}}
+
+  Remove current file from the list of agenda files.
+
+- {{{kbd(C-')}}} {{{kbd(C-)}}}, ~org-cycle-agenda-files~ ::
+  {{{kindex(C-')}}}
+  {{{kindex(C-,)}}}
+  {{{cindex(cycling\\\, of agenda files)}}}
+
+  Cycle through agenda file list, visiting one file after the other.
+
+- {{{kbd(M-x org-iswitchb)}}} ::
+  {{{findex(org-iswitchb)}}}
+
+  Command to use an ~iswitchb~-like interface to switch to and between
+  Org buffers.
+
+
+{{{noindent}}} The Org menu contains the current list of files and can
+be used to visit any of them.
+
+If you would like to focus the agenda temporarily on a file not in
+this list, or on just one file in the list, or even on only a subtree
+in a file, then this can be done in different ways. For a single
+agenda command, you may press {{{kbd(<)}}} once or several times in
+the dispatcher (see [[Agenda dispatcher]]). To restrict the agenda scope
+for an extended period, use the following commands:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-x <)}}}, ~org-agenda-set-restriction-lock~ ::
+  {{{kindex(C-c C-x <)}}}
+
+  Permanently restrict the agenda to the current subtree. When with a
+  prefix argument, or with the cursor before the first headline in a
+  file, the agenda scope is set to the entire file. This restriction
+  remains in effect until removed with {{{kbd(C-c C-x >)}}}, or by
+  typing either {{{kbd(<)}}} or {{{kbd(>)}}} in the agenda dispatcher.
+  If there is a window displaying an agenda view, the new restriction
+  takes effect immediately.
+
+- {{{kbd(C-c C-x >)}}}, ~org-agenda-remove-restriction-lock~ ::
+  {{{kindex(C-c C-x >)}}}
+
+  Remove the permanent restriction created by {{{kbd(C-c C-x <)}}}.
+
+
+{{{noindent}}} When working with {{{file(speedbar.el)}}}, you can use
+the following commands in the Speedbar frame:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(<)}}} in the speedbar frame ~org-speedbar-set-agenda-restriction~ ::
+  {{{kindex(<)}}}
+
+  Permanently restrict the agenda to the item---either an Org file or a
+  subtree in such a file---at the cursor in the Speedbar frame. If there
+  is a window displaying an agenda view, the new restriction takes
+  effect immediately.
+
+- {{{kbd(>)}}} in the speedbar frame ~org-agenda-remove-restriction-lock~ ::
+  {{{kindex(>)}}}
+
+  Lift the restriction.
+
+** Agenda dispatcher
+   :PROPERTIES:
+   :DESCRIPTION: Keyboard access to agenda views
+   :TITLE:    The agenda dispatcher
+   :END:
+{{{cindex(agenda dispatcher)}}}
+{{{cindex(dispatching agenda commands)}}}
+
+The views are created through a dispatcher, which should be bound to a
+global key---for example {{{kbd(C-c a)}}} (see [[Activation]]). In the
+following we will assume that {{{kbd(C-c a)}}} is indeed how the
+dispatcher is accessed and list keyboard access to commands
+accordingly. After pressing {{{kbd(C-c a)}}}, an additional letter is
+required to execute a command. The dispatcher offers the following
+default commands:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(a)}}} ::
+  {{{kindex(C-c a a)}}}
+
+  Create the calendar-like agenda (see [[Weekly/daily agenda]]).
+
+- {{{kbd(t)}}} or {{{kbd(T)}}} ::
+  {{{kindex(C-c a t)}}}
+  {{{kindex(C-c a T)}}}
+
+  Create a list of all TODO items (see [[Global TODO list]]).
+
+- {{{kbd(m)}}} or {{{kbd(M)}}} ::
+  {{{kindex(C-c a m)}}}
+  {{{kindex(C-c a M)}}}
+
+  Create a list of headlines matching a TAGS expression (see [[Matching tags and properties]]).
+
+- {{{kbd(L)}}} ::
+  {{{kindex(C-c a L)}}}
+
+  Create the timeline view for the current buffer 
+  (see [[Timeline for a single file]]).
+
+- {{{kbd(s)}}} ::
+  {{{kindex(C-c a s)}}}
+
+  Create a list of entries selected by a boolean expression of keywords
+  and/or regular expressions that must or must not occur in the entry.
+
+- {{{kbd(/)}}} ::
+  {{{kindex(C-c a /)}}}
+  {{{vindex(org-agenda-text-search-extra-files)}}}
+
+  Search for a regular expression in all agenda files and additionally
+  in the files listed in ~org-agenda-text-search-extra-files~. This uses
+  the Emacs command ~multi-occur~. A prefix argument can be used to
+  specify the number of context lines for each match, default is
+  1.
+
+- {{{kbd(#)}}} or {{{kbd(!)}}} ::
+  {{{kindex(C-c a #)}}}
+  {{{kindex(C-c a !)}}}
+  Create a list of stuck projects (see [[Stuck projects]]).
+
+- {{{kbd(<)}}} ::
+  {{{kindex(C-c a <)}}}
+
+  Restrict an agenda command to the current buffer.[fn:89] After
+  pressing {{{kbd(<)}}}, you still need to press the character selecting
+  the command.
+
+- {{{kbd(< <)}}} ::
+  {{{kindex(C-c a < <)}}}
+
+  If there is an active region, restrict the following agenda command to
+  the region. Otherwise, restrict it to the current subtree.[fn:90]
+  After pressing {{{kbd(< <)}}}, you still need to press the character
+  selecting the command.
+
+- {{{kbd(*)}}} ::
+  {{{kindex(C-c a *)}}}
+  {{{vindex(org-agenda-sticky)}}}
+
+  Toggle sticky agenda views. By default, Org maintains only a single
+  agenda buffer and rebuilds it each time you change the view, to make
+  sure everything is always up to date. If you switch between views
+  often and the build time bothers you, you can turn on sticky agenda
+  buffers (make this the default by customizing the variable
+  ~org-agenda-sticky~). With sticky agendas, the dispatcher only
+  switches to the selected view, you need to update it by hand with
+  {{{kbd(r)}}} or {{{kbd(g)}}}. You can toggle sticky agenda view any
+  time with ~org-toggle-sticky-agenda~.
+
+
+You can also define custom commands that will be accessible through
+the dispatcher, just like the default commands. This includes the
+possibility to create extended agenda buffers that contain several
+blocks together, for example the weekly agenda, the global TODO list
+and a number of special tags matches. See [[Custom agenda views]].
+
+** Built-in agenda views
+   :PROPERTIES:
+   :DESCRIPTION: What is available out of the box?
+   :TITLE: The built-in agenda views
+   :END:
+In this section we describe the built-in views.
+
+*** FIXED Weekly/daily agenda
+    :PROPERTIES:
+    :DESCRIPTION: The calendar page with current tasks
+    :END:
+{{{cindex(agenda)}}}
+{{{cindex(weekly agenda)}}}
+{{{cindex(daily agenda)}}}
+
+The purpose of the weekly/daily /agenda/ is to act like a page of a
+paper agenda, showing all the tasks for the current week or day.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c a a)}}}, ~org-agenda-list~ ::
+  {{{cindex(org-agenda, command)}}}
+
+  Compile an agenda for the current week from a list of Org files. The
+  agenda shows the entries for each day. With a numeric prefix (like
+  {{{kbd(C-u 2 1 C-c a a)}}}) you may set the number of days to be
+  displayed.[fn:91]
+
+
+{{{vindex(org-agenda-span)}}}
+{{{vindex(org-agenda-ndays)}}}
+The default number of days displayed in the agenda is set by the variable
+~org-agenda-span~ (or the obsolete ~org-agenda-ndays~).  This
+variable can be set to any number of days you want to see by default in the
+agenda, or to a span name, such a ~day~, ~week~, ~month~ or
+~year~.
+
+Remote editing from the agenda buffer means, for example, that you can
+change the dates of deadlines and appointments from the agenda buffer.
+The commands available in the Agenda buffer are listed in [[Agenda
+commands]].
+
+**** FIXED Calendar/Diary integration
+     :PROPERTIES:
+     :DESCRIPTION: Integrate the Emacs diary with Org
+     :END:
+{{{cindex(calendar integration)}}}
+{{{cindex(diary integration)}}}
+{{{cindex(Reingold\\\, Edward M.)}}}
+
+Emacs contains the calendar and diary by Edward M. Reingold.  The
+calendar displays a three-month calendar with holidays from different
+countries and cultures.  The diary allows you to keep track of
+anniversaries, lunar phases, sunrise/set, recurrent appointments
+(weekly, monthly) and more.  In this way, it is quite complementary to
+Org.  It can be very useful to combine output from Org with
+the diary.
+
+In order to include entries from the Emacs diary into Org mode's
+agenda, you only need to customize the variable
+
+#+begin_src emacs-lisp
+  (setq org-agenda-include-diary t)
+#+end_src
+
+{{{noindent}}} After that, everything will happen automatically.  All diary
+entries including holidays, anniversaries, etc., will be included in the
+agenda buffer created by Org mode.  {{{key(SPC)}}}, {{{key(TAB)}}}, and
+{{{key(RET)}}} can be used from the agenda buffer to jump to the diary
+file in order to edit existing diary entries.  The {{{kbd(i)}}} command to
+insert new entries for the current date works in the agenda buffer, as
+well as the commands {{{kbd(S)}}}, {{{kbd(M)}}}, and {{{kbd(C)}}} to display
+Sunrise/Sunset times, show lunar phases and to convert to other
+calendars, respectively.  {{{kbd(c)}}} can be used to switch back and forth
+between calendar and agenda.
+
+If you are using the diary only for sexp entries and holidays, it is
+faster to not use the above setting, but instead to copy or even move
+the entries into an Org file.  Org mode evaluates diary-style sexp
+entries, and does it faster because there is no overhead for first
+creating the diary display.  Note that the sexp entries must start at
+the left margin, no whitespace is allowed before them.  For example,
+the following segment of an Org file will be processed and entries
+will be made in the agenda:[fn:181]
+
+#+begin_example
+   ,* Birthdays and similar stuff
+   ,#+CATEGORY: Holiday
+   %%(org-calendar-holiday)   ; special function for holiday names
+   ,#+CATEGORY: Ann
+   %%(org-anniversary 1956  5 14) Arthur Dent is %d years old
+   %%(org-anniversary 1869 10  2) Mahatma Gandhi would be %d years old
+#+end_example
+
+**** FIXED Anniversaries from BBDB
+     :PROPERTIES:
+     :DESCRIPTION: Integrate Big Brother Database and Org
+     :END:
+
+{{{cindex(BBDB, anniversaries)}}}
+{{{cindex(anniversaries, from BBDB)}}}
+
+If you are using the Big Brothers Database to store your contacts, you will
+very likely prefer to store anniversaries in BBDB rather than in a
+separate Org or diary file.  Org supports this and will show BBDB
+anniversaries as part of the agenda.  All you need to do is to add the
+following to one of your agenda files:
+
+#+begin_example
+   ,* Anniversaries
+   ,  :PROPERTIES:
+   ,  :CATEGORY: Anniv
+   ,  :END:
+   ,%%(org-bbdb-anniversaries)
+#+end_example
+
+You can then go ahead and define anniversaries for a BBDB record.
+Basically, you need to press {{{kbdspckey(C-o anniversary,RET)}}} with
+the cursor in a BBDB record and then add the date in the format
+~YYYY-MM-DD~ or ~MM-DD~, followed by a space and the class of the
+anniversary ({{{samp(birthday)}}} or {{{samp(wedding)}}}, or a format
+string). If you omit the class, it will default to
+{{{samp(birthday)}}}. Here are a few examples, the header for the file
+{{{file(org-bbdb.el)}}} contains more detailed information.
+
+#+begin_example
+   1973-06-22
+   06-22
+   1955-08-02 wedding
+   2008-04-14 %s released version 6.01 of org mode, %d years ago
+#+end_example
+
+After a change to BBDB, or for the first agenda display during an
+Emacs session, the agenda display will suffer a short delay as Org
+updates its hash with anniversaries. However, from then on things will
+be very fast---much faster in fact than a long list of
+{{{samp(%%(diary-anniversary))}}} entries in an Org or Diary file.
+
+**** FIXED Appointment reminders
+     :PROPERTIES:
+     :DESCRIPTION: Integrate the Emacs appointment facility and Org
+     :END:
+{{{cindex(@file{appt.el})}}}
+{{{cindex(appointment reminders)}}}
+{{{cindex(appointment)}}}
+{{{cindex(reminders)}}}
+
+Org can interact with Emacs appointments notification facility.  To add the
+appointments of your agenda files, use the command ~org-agenda-to-appt~.
+This command lets you filter through the list of your appointments and add
+only those belonging to a specific category or matching a regular expression.
+It also reads a ~APPT_WARNTIME~ property which will then override the
+value of ~appt-message-warning-time~ for this appointment.  See the
+docstring for details.
+
+*** FIXED Global TODO list
+    :PROPERTIES:
+    :DESCRIPTION: All unfinished action items
+    :END:
+{{{cindex(global TODO list)}}}
+{{{cindex(TODO list, global)}}}
+
+The global TODO list contains all unfinished TODO items formatted and
+collected into a single place.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c a t)}}}, ~org-todo-list~ ::
+
+  Show the global TODO list. This collects the TODO items from all
+  agenda files (see [[Agenda views]]) into a single buffer. By default, this
+  lists items with a state the is not a DONE state. The buffer is in
+  ~agenda-mode~, so there are commands to examine and manipulate the
+  TODO entries directly from that buffer (see [[Agenda commands]]).
+
+- {{{kbd(C-c a T)}}}, ~org-todo-list~ ::
+
+  {{{cindex(TODO keyword matching)}}}
+  {{{vindex(org-todo-keywords)}}}
+
+  Like the above, but allows selection of a specific TODO keyword. You
+  can also do this by specifying a prefix argument to {{{kbd(C-c a
+  t)}}}. You are prompted for a keyword, and you may also specify
+  several keywords by separating them with {{{samp(|)}}} as the boolean
+  OR operator. With a numeric prefix, the Nth keyword in
+  ~org-todo-keywords~ is selected.
+
+  {{{kindex(r)}}}
+
+  The {{{kbd(r)}}} key in the agenda buffer regenerates it, and you can give
+  a prefix argument to this command to change the selected TODO keyword,
+  for example {{{kbd(3 r)}}}.  If you often need a search for a specific
+  keyword, define a custom command for it (see [[Agenda dispatcher]]).
+
+  Matching specific TODO keywords can also be done as part of a tags
+  search (see [[Tag searches]]).
+
+
+Remote editing of TODO items means that you can change the state of a
+TODO entry with a single key press.  The commands available in the
+TODO list are described in [[Agenda commands]].
+
+{{{cindex(sublevels, inclusion into TODO list)}}}
+
+Normally the global TODO list simply shows all headlines with TODO
+keywords.  This list can become very long.  There are two ways to keep
+it more compact:
+
+
+- Some people view a TODO item that has been /scheduled/ for execution
+  or have a /deadline/ (see [[Timestamps]]) as no longer /open/. Configure
+  the variables ~org-agenda-todo-ignore-scheduled~,
+  ~org-agenda-todo-ignore-deadlines~,
+  ~org-agenda-todo-ignore-timestamp~ and/or
+  ~org-agenda-todo-ignore-with-date~ to exclude such items from the
+  global TODO list.
+
+  {{{vindex(org-agenda-todo-ignore-scheduled)}}}
+  {{{vindex(org-agenda-todo-ignore-deadlines)}}}
+  {{{vindex(org-agenda-todo-ignore-timestamp)}}}
+  {{{vindex(org-agenda-todo-ignore-with-date)}}}
+
+- TODO items may have sublevels to break up the task into subtasks. In
+  such cases it may be enough to list only the highest level TODO
+  headline and omit the sublevels from the global list. Configure the
+  variable ~org-agenda-todo-list-sublevels~ to get this behavior.
+
+  {{{vindex(org-agenda-todo-list-sublevels)}}}
+
+*** Matching tags and properties
+    :PROPERTIES:
+    :DESCRIPTION: Structured information with fine-tuned search
+    :END:
+{{{cindex(matching, of tags)}}}
+{{{cindex(matching, of properties)}}}
+{{{cindex(tags view)}}}
+{{{cindex(match view)}}}
+
+If headlines in the agenda files are marked with /tags/ (see [[Tags]]), or
+have properties (see [[Properties and columns]]), you can select headlines
+based on this metadata and collect them into an agenda buffer. The
+match syntax described here also applies when creating sparse trees
+with {{{kbd(C-c / m)}}}.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c a m)}}}, ~org-tags-view~ ::
+
+  Produce a list of all headlines that match a given set of tags. The
+  command prompts for a selection criterion, which is a boolean logic
+  expression with tags, like {{{samp(+work+urgent-withboss)}}} or
+  {{{samp(work|home)}}} (see [[Tags]]). If you often need a specific search,
+  define a custom command for it (see [[Agenda dispatcher]]).
+
+- {{{kbd(C-c a M)}}}, ~org-tags-view~ ::
+
+  {{{vindex(org-tags-match-list-sublevels)}}}
+  {{{vindex(org-agenda-tags-todo-honor-ignore-options)}}}
+
+  Like {{{kbd(C-c a m)}}}, but only select headlines that are also TODO
+  items in a not-DONE state and force checking subitems (see the variable
+  ~org-tags-match-list-sublevels~). To exclude scheduled/deadline items,
+  see the variable ~org-agenda-tags-todo-honor-ignore-options~. Matching
+  specific TODO keywords together with a tags match is also possible,
+  see [[Tag searches]].
+
+
+The commands available in the tags list are described in [[Agenda
+commands]].
+
+
+{{{cindex(Boolean logic\\\, for tag or property searches)}}}
+
+A search string can use Boolean operators {{{samp(&)}}} for AND and
+{{{samp(|)}}} for OR. {{{samp(&)}}} binds more strongly than
+{{{samp(|)}}}. Parentheses are currently not implemented. Each element
+in the search is either a tag, a regular expression matching tags, or
+an expression like ~PROPERTY OPERATOR VALUE~ with a comparison
+operator, accessing a property value. Each element may be preceded by
+{{{samp(-)}}}, to select against it, and {{{samp(+)}}} is syntactic
+sugar for positive selection. The AND operator {{{samp(&)}}} is
+optional when {{{samp(+)}}} or {{{samp(-)}}} is present. Here are some
+examples, using only tags.
+
+#+attr_texinfo: :table-type "table" :indic "@samp"
+
+- +work-boss ::
+
+  Select headlines tagged {{{samp(:work:)}}}, but discard those also
+  tagged {{{samp(:boss:)}}}.
+
+- work|laptop ::
+
+  Selects lines tagged {{{samp(:work:)}}} or {{{samp(:laptop:)}}}.
+
+- work|laptop+night ::
+
+  Like before, but require the {{{samp(:laptop:)}}} lines to be tagged
+  also {{{samp(:night:)}}}.
+
+
+{{{cindex(regular expressions, with tags search)}}}
+
+Instead of a tag, you may also specify a regular expression enclosed
+in curly braces. For example, {{{samp(work+{^boss.*})}}} matches
+headlines that contain the tag {{{samp(:work:)}}} and any tag
+/starting/ with {{{samp(boss)}}}.
+
+{{{cindex(TODO keyword matching, with tags search)}}}
+{{{cindex(level\\\, require for tags/property match)}}}
+{{{cindex(category\\\, require for tags/property match)}}}
+{{{vindex(org-odd-levels-only)}}}
+
+You may also test for properties (see [[Properties and columns]]) at the
+same time as matching tags. The properties may be real properties, or
+special properties that represent other metadata (see [[Special
+properties]]). For example, the "property" ~TODO~ represents the TODO
+keyword of the entry. Or, the "property" ~LEVEL~ represents the
+level of an entry. So a search {{{samp(+LEVEL=3+boss-TODO="DONE")}}}
+lists all level three headlines that have the tag {{{samp(boss)}}} and
+are /not/ marked with the TODO keyword DONE. In buffers with
+~org-odd-levels-only~ set, {{{samp(LEVEL)}}} does not count the number
+of stars, but {{{samp(LEVEL=2)}}} will correspond to 3 stars etc. The
+ITEM special property cannot currently be used in tags/property
+searches.[fn:92]
+
+Here are more examples:
+
+#+attr_texinfo: :table-type "table" :indic "@samp"
+
+- work+TODO="WAITING" ::
+
+  Select {{{samp(:work:)}}}-tagged TODO lines with the specific TODO
+  keyword {{{samp(WAITING)}}}.
+
+- work+TODO="WAITING"|home+TODO="WAITING" ::
+
+  Waiting tasks both at work and at home.
+
+
+When matching properties, a number of different operators can be used to test
+the value of a property.  Here is a complex example:
+
+#+begin_example
+   +work-boss+PRIORITY="A"+Coffee="unlimited"+Effort<2         
+            +With={Sarah|Denny}+SCHEDULED>="<2008-10-11>"
+#+end_example
+
+{{{noindent}}} The type of comparison will depend on how the
+comparison value is written:
+
+- If the comparison value is a plain number, a numerical comparison is
+  done, and the allowed operators are ~<~, ~=~, ~>~, ~<=~, ~>=~, and
+  ~<>~.
+
+- If the comparison value is enclosed in double-quotes, a string
+  comparison is done, and the same operators are allowed.
+
+- If the comparison value is enclosed in double-quotes /and/ angular
+  brackets (like {{{samp(DEADLINE<="<2008-12-24 18:30>")}}}), both
+  values are assumed to be date/time specifications in the standard
+  Org way, and the comparison will be done accordingly. Special values
+  that will be recognized are ~"<now>"~ for now (including time), and
+  ~"<today>"~, and ~"<tomorrow>"~ for these days at 0:00 hours, i.e.@:
+  without a time specification. Also strings like ~"<+5d>"~ or
+  ~"<-2m>"~ with units ~d~, ~w~, ~m~, and ~y~ for day, week, month,
+  and year, respectively, can be used.
+
+- If the comparison value is enclosed in curly braces, a regexp match
+  is performed, with {{{samp(=)}}} meaning that the regexp matches the
+  property value, and ~<>~ meaning that it does not match.
+
+
+So the search string in the example finds entries tagged
+{{{samp(:work:)}}} but not {{{samp(:boss:)}}}, which also have a
+priority value {{{samp(A)}}}, a {{{samp(:Coffee:)}}} property with the
+value {{{samp(unlimited)}}}, an {{{samp(Effort)}}} property that is
+numerically smaller than 2, a {{{samp(:With:)}}} property that is
+matched by the regular expression {{{samp(Sarah|Denny)}}}, and that
+are scheduled on or after October 11, 2008.
+
+Accessing TODO, LEVEL, and CATEGORY during a search is fast. Accessing
+any other properties will slow down the search. However, once you have
+paid the price by accessing one property, testing additional
+properties is cheap again.
+
+You can configure Org mode to use property inheritance during a
+search, but beware that this can slow down searches considerably. See
+[[Property inheritance]], for details.
+
+For backward compatibility, and also for typing speed, there is also a
+different way to test TODO states in a search. For this, terminate the
+tags/property part of the search string (which may include several
+terms connected with {{{samp(|)}}}) with a {{{samp(/)}}} and then
+specify a Boolean expression just for TODO keywords. The syntax is
+then similar to that for tags, but should be applied with care: for
+example, a positive selection on several TODO keywords cannot
+meaningfully be combined with boolean AND. However, /negative
+selection/ combined with AND can be meaningful. To make sure that only
+lines are checked that actually have any TODO keyword (resulting in a
+speed-up), use {{{kbd(C-c a M)}}}, or equivalently start the TODO part
+after the slash with {{{samp(!)}}}. Using {{{kbd(C-c a M)}}} or
+{{{samp(/!)}}} will not match TODO keywords in a DONE state. Examples:
+
+#+attr_texinfo: :table-type "table" :indic "@samp"
+- work/WAITING ::
+
+  Same as {{{samp(work+TODO="WAITING")}}}
+
+- work/!-WAITING-NEXT ::
+  
+  Select {{{samp(:work:)}}}-tagged TODO lines that are neither {{{samp(WAITING)}}}
+  nor {{{samp(NEXT)}}}
+
+- work/!+WAITING|+NEXT ::
+
+  Select {{{samp(:work:)}}}-tagged TODO lines that are either
+  {{{samp(WAITING)}}} or {{{samp(NEXT)}}}.
+
+*** FIXED Timeline for a single file
+    :PROPERTIES:
+    :DESCRIPTION: Time-sorted view for a single file
+    :OPTIONAL_TITLE: Timeline
+    :END:
+
+{{{cindex(timeline\\\, single file)}}}
+{{{cindex(time-sorted view)}}}
+
+The timeline summarizes all time-stamped items from a single Org mode
+file in a /time-sorted view/.  The main purpose of this command is
+to give an overview over events in a project.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c a L)}}}, ~org-timeline~ ::
+
+  Show a time-sorted view of the Org file, with all time-stamped items.
+  When called with a {{{kbd(C-u)}}} prefix, all unfinished TODO entries
+  (scheduled or not) are also listed under the current date.
+
+
+{{{noindent}}} The commands available in the timeline buffer are
+listed in [[Agenda commands]].
+
+*** FIXED Search view
+    :PROPERTIES:
+    :DESCRIPTION: Find entries by searching for text
+    :END:
+{{{cindex(search view)}}}
+{{{cindex(text search)}}}
+{{{cindex(searching, for text)}}}
+
+This agenda view is a general text search facility for Org mode entries.
+It is particularly useful to find notes.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c a s)}}}, ~org-search-view~ ::
+
+  This is a special search that lets you select entries by matching a
+  substring or specific words using a boolean logic.
+
+
+For example, the search string {{{samp(computer equipment)}}} will
+find entries that contain {{{samp(computer equipment)}}} as a
+substring. If the two words are separated by more space or a line
+break, the search will still match. Search view can also search for
+specific keywords in the entry, using Boolean logic. The search string
+{{{samp(+computer +wifi -ethernet -{8.11[bg]})}}} will search for
+note entries that contain the keywords ~computer~ and ~wifi~, but not
+the keyword ~ethernet~, and which are also not matched by the regular
+expression ~8.11[bg]~, meaning to exclude both 8.11b and 8.11g. The
+first {{{samp(+)}}} is necessary to turn on word search, other
+{{{samp(+)}}} characters are optional. For more details, see the
+docstring of the command ~org-search-view~.
+
+{{{vindex(org-agenda-text-search-extra-files)}}}
+
+Note that in addition to the agenda files, this command will also
+search the files listed in ~org-agenda-text-search-extra-files~.
+
+*** FIXED Stuck projects
+    :PROPERTIES:
+    :DESCRIPTION: Find projects you need to review
+    :END:
+{{{pindex(GTD\\\, Getting Things Done)}}}
+
+If you are following a system like David Allen's GTD to organize your
+work, one of the "duties" you have is a regular review to make sure
+that all projects move along. A /stuck/ project is a project that has
+no defined next actions, so it will never show up in the TODO lists
+Org mode produces. During the review, you need to identify such
+projects and define next actions for them.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c a #)}}}, ~org-agenda-list-stuck-projects~ ::
+
+  List projects that are stuck.
+
+- {{{kbd(C-c a !)}}} ::
+
+  {{{vindex(org-stuck-projects)}}}
+  {{{kindex(C-c a !)}}}
+
+  Customize the variable ~org-stuck-projects~ to define what a stuck
+  project is and how to find it.
+
+
+You almost certainly will have to configure this view before it will
+work for you.  The built-in default assumes that all your projects are
+level-2 headlines, and that a project is not stuck if it has at least
+one entry marked with a TODO keyword TODO or NEXT or NEXTACTION.
+
+Let's assume that you, in your own way of using Org mode, identify
+projects with a tag PROJECT, and that you use a TODO keyword MAYBE to
+indicate a project that should not be considered yet. Let's further
+assume that the TODO keyword DONE marks finished projects, and that
+NEXT and TODO indicate next actions. The tag @SHOP indicates shopping
+and is a next action even without the NEXT tag. Finally, if the
+project contains the special word IGNORE anywhere, it should not be
+listed either. In this case you would start by identifying eligible
+projects with a tags/todo match (see [[Tag searches]]).
+{{{samp(+PROJECT/-MAYBE-DONE)}}}, and then check for TODO, NEXT,
+@SHOP, and IGNORE in the subtree to identify projects that are not
+stuck. The correct customization for this is:
+
+#+begin_src emacs-lisp
+(setq org-stuck-projects
+      '("+PROJECT/-MAYBE-DONE" ("NEXT" "TODO") ("@@SHOP")
+                               "\\<IGNORE\\>"))
+#+end_src
+
+Note that if a project is identified as non-stuck, the subtree of this entry
+will still be searched for stuck projects.
+
+** Presentation and sorting
+   :PROPERTIES:
+   :DESCRIPTION: How agenda items are prepared for display
+   :END:
+{{{cindex(presentation\\\, of agenda items)}}}
+{{{vindex(org-agenda-prefix-format)}}}
+{{{vindex(org-agenda-tags-column)}}}
+
+Before displaying items in an agenda view, Org mode visually prepares
+the items and sorts them. Each item occupies a single line. The line
+starts with a /prefix/ that contains the /category/ (see [[Categories]])
+of the item and other important information. You can customize in
+which column tags will be displayed through ~org-agenda-tags-column~.
+You can also customize the prefix using the option
+~org-agenda-prefix-format~. This prefix is followed by a cleaned-up
+version of the outline headline associated with the item.
+
+*** Categories
+    :PROPERTIES:
+    :DESCRIPTION: Not all tasks are equal
+    :END:
+
+{{{cindex(category)}}}
+{{{cindex(#+CATEGORY)}}}
+
+The category is a broad label assigned to each agenda item. By
+default, the category is simply derived from the file name, but you
+can also specify it with a special line in the buffer, like
+this:[fn:93]
+
+#+begin_example
+   ,#+CATEGORY: Thesis
+#+end_example
+
+{{{noindent}}}
+{{{cindex(property\\\, CATEGORY)}}}
+
+If you would like to have a special CATEGORY for a single entry or a
+(sub)tree, give the entry a ~:CATEGORY:~ property with the special
+category you want to apply as the value.
+
+{{{noindent}}} The display in the agenda buffer looks best if the
+category is not longer than 10 characters.
+
+{{{noindent}}} You can set up icons for category by customizing the
+~org-agenda-category-icon-alist~ variable.
+{{{vindex(org-agenda-category-icon-alist)}}}
+
+*** Time-of-day specifications
+    :PROPERTIES:
+    :DESCRIPTION: How the agenda knows the time
+    :END:
+{{{cindex(time-of-day specification)}}}
+
+Org mode checks each agenda item for a time-of-day specification.  The
+time can be part of the timestamp that triggered inclusion into the
+agenda, for example as in ~<2005-05-10 Tue 19:00>~.  Time
+ranges can be specified with two timestamps, like:
+
+  ~<2005-05-10 Tue 20:30>--<2005-05-10 Tue 22:15>~.
+
+In the headline of the entry itself, a time(range) may also appear as
+plain text (like {{{samp(12:45)}}} or a {{{samp(8:30-1pm)}}}). If the
+agenda integrates the Emacs diary (see [[Weekly/daily agenda]]), time
+specifications in diary entries are recognized as well.
+
+For agenda display, Org mode extracts the time and displays it in a
+standard 24 hour format as part of the prefix.  The example times in
+the previous paragraphs would end up in the agenda like this:
+
+#+begin_example
+    8:30-13:00 Arthur Dent lies in front of the bulldozer
+   12:45...... Ford Prefect arrives and takes Arthur to the pub
+   19:00...... The Vogon reads his poem
+   20:30-22:15 Marvin escorts the Hitchhikers to the bridge
+#+end_example
+
+{{{cindex(time grid)}}}
+
+If the agenda is in single-day mode, or for the display of today, the
+timed entries are embedded in a time grid, like
+
+#+begin_example
+    8:00...... ------------------
+    8:30-13:00 Arthur Dent lies in front of the bulldozer
+   10:00...... ------------------
+   12:00...... ------------------
+   12:45...... Ford Prefect arrives and takes Arthur to the pub
+   14:00...... ------------------
+   16:00...... ------------------
+   18:00...... ------------------
+   19:00...... The Vogon reads his poem
+   20:00...... ------------------
+   20:30-22:15 Marvin escorts the Hitchhikers to the bridge
+#+end_example
+
+{{{vindex(org-agenda-use-time-grid)}}}
+{{{vindex(org-agenda-time-grid)}}}
+
+The time grid can be turned on and off with the variable
+~org-agenda-use-time-grid~, and can be configured with
+~org-agenda-time-grid~.
+
+*** Sorting of agenda items
+    :PROPERTIES:
+    :DESCRIPTION: The order of things
+    :END:
+{{{cindex(sorting\\\, of agenda items)}}}
+{{{cindex(priorities\\\, of agenda items)}}}
+
+Before being inserted into a view, the items are sorted.  How this is
+done depends on the type of view.
+
+- For the daily/weekly agenda, the items for each day are sorted.  The
+  default order is to first collect all items containing an explicit
+  time-of-day specification.  These entries will be shown at the
+  beginning of the list, as a /schedule/ for the day.  After that,
+  items remain grouped in categories, in the sequence given by
+  ~org-agenda-files~. Within each category, items are sorted by
+  priority (see [[Priorities]]), which is composed of the base priority
+  (2000 for priority {{{samp(A)}}}, 1000 for {{{samp(B)}}}, and 0 for
+  {{{samp(C)}}}), plus additional increments for overdue scheduled or deadline items.
+
+  {{{vindex(org-agenda-files)}}}
+
+- For the TODO list, items remain in the order of categories, but
+  within each category, sorting takes place according to priority (see
+  [[Priorities]]).  The priority used for sorting derives from the
+  priority cookie, with additions depending on how close an item is to
+  its due or scheduled date.
+
+- For tags matches, items are not sorted at all, but just appear in
+  the sequence in which they are found in the agenda files.
+
+
+{{{vindex(org-agenda-sorting-strategy)}}}
+
+Sorting can be customized using the variable
+~org-agenda-sorting-strategy~, and may also include criteria based on
+the estimated effort of an entry (see [[Effort estimates]]).
+
+** FIXME Agenda commands
+   :PROPERTIES:
+   :DESCRIPTION: Remote editing of Org trees
+   :TITLE:    Commands in the agenda buffer
+   :END:
+{{{cindex(commands\\\, in agenda buffer)}}}
+
+Entries in the agenda buffer are linked back to the Org file or diary
+file where they originate.  You are not allowed to edit the agenda
+buffer itself, but commands are provided to show and jump to the
+original entry location, and to edit the Org files ``remotely'' from
+the agenda buffer.  In this way, all information is stored only once,
+removing the risk that your agenda and note files may diverge.
+
+Some commands can be executed with mouse clicks on agenda lines.  For
+the other commands, the cursor needs to be in the desired line.
+
+*** FIXME Motion2
+{{{cindex(motion commands in agenda)}}}
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(n)}}}, ~org-agenda-next-line~ ::
+  {{{kindex(n)}}}
+ 
+  Next line (same as {{{key(down)}}} and {{{kbd(C-n)}}}).
+
+- {{{kbd(p)}}}, ~org-agenda-previous-line~ ::
+  {{{kindex(p)}}}
+
+  Previous line (same as {{{key(up)}}} and {{{kbd(C-p)}}}).
+
+*** View/Go to Org file
+{{{cindex(view file commands in agenda)}}}
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{key(SPC)}}} or {{{key(mouse-3)}}}, ~org-agenda-show-and-scroll-up~ ::
+  {{{kindex(@key{SPC})}}}
+  {{{kindex(mouse-3)}}}
+
+  Display the original location of the item in another window. With
+  prefix arg, make sure that the entire entry is made visible in the
+  outline, not only the heading.
+
+- {{{kbd(L)}}}, ~org-agenda-recenter~ ::
+  {{{kindex(L)}}}
+
+  Display original location and recenter that window.
+
+- {{{key(TAB)}}} or {{{key(mouse-2)}}}, ~org-agenda-goto~ ::
+  {{{kindex(@key{TAB})}}}
+  {{{kindex(mouse-2)}}}
+
+  Go to the original location of the item in another window.
+
+- {{{key(RET)}}}, ~org-agenda-switch-to~ ::
+  {{{kindex(@key{RET})}}}
+
+  Go to the original location of the item and delete other windows.
+
+- {{{kbd(F)}}}, ~org-agenda-follow-mode~ ::
+  {{{kindex(F)}}}
+  {{{vindex(org-agenda-start-with-follow-mode)}}}
+
+  Toggle Follow mode. In Follow mode, as you move the cursor through the
+  agenda buffer, the other window always shows the corresponding
+  location in the Org file. The initial setting for this mode in new
+  agenda buffers can be set with the variable
+  ~org-agenda-start-with-follow-mode~.
+
+- {{{kbd(C-c C-x b)}}}, ~org-agenda-tree-to-indirect-buffer~ ::
+  {{{kindex(C-c C-x b)}}}
+
+  Display the entire subtree of the current item in an indirect buffer.
+  With a numeric prefix argument N, go up to level N and then take that
+  tree. If N is negative, go up that many levels. With a {{{kbd(C-u)}}}
+  prefix, do not remove the previously used indirect buffer.
+
+- {{{kbd(C-c C-o)}}}, ~org-agenda-open-link~ ::
+  {{{kindex(C-c C-o)}}}
+
+  Follow a link in the entry. This will offer a selection of any links
+  in the text belonging to the referenced Org node. If there is only one
+  link, it will be followed without a selection prompt.
+
+*** Change display
+{{{cindex(change agenda display)}}}
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(A)}}} ::
+  {{{kindex(A)}}}
+  {{{cindex(display changing\\\, in agenda)}}}
+
+  Interactively select another agenda view and append it to the current
+  view.
+
+- {{{kbd(o)}}} ::
+  {{{kindex(o)}}}
+
+  Delete other windows.
+
+- {{{kbd(v d)}}} or short {{{kbd(d)}}}, ~org-agenda-day-view~ ::
+  {{{kindex(v d)}}}
+  {{{kindex(d)}}}
+  {{{vindex(org-agenda-span)}}}
+
+  Switch to day view. When switching to day view, this setting becomes
+  the default for subsequent agenda refreshes. A numeric prefix argument
+  may be used to jump directly to a specific day of the year. For
+  example, {{{kbd(32 d)}}} jumps to February 1st. When setting day view,
+  a year may be encoded in the prefix argument as well. For example,
+  {{{kbd(200712 d)}}} will jump to January 12, 2007. If such a year
+  specification has only one or two digits, it will be mapped to the
+  interval 1938-2037.
+
+- {{{kbd(v w)}}} or short {{{kbd(w)}}}, ~org-agenda-week-view~ ::
+  {{{kindex(v w)}}}
+  {{{kindex(w)}}}
+  {{{vindex(org-agenda-span)}}}
+
+  Switch to week view. When switching week view, this setting becomes
+  the default for subsequent agenda refreshes. A numeric prefix argument
+  may be used to jump directly to a specific day of the ISO week. For
+  example {{{kbd(9 w)}}} to ISO week number 9. When setting week view, a
+  year may be encoded in the prefix argument as well. For example,
+  {{{kbd(200712 w)}}} will jump to week 12 in 2007. If such a year
+  specification has only one or two digits, it will be mapped to the
+  interval 1938-2037.
+
+- {{{kbd(v m)}}}, ~org-agenda-month-view~ ::
+  {{{kindex(v m)}}}
+  {{{vindex(org-agenda-span)}}}
+
+  Switch to month view. Because month views are slow to create, they do
+  not become the default for subsequent agenda refreshes. A numeric
+  prefix argument may be used to jump directly to a specific day of the
+  month. When setting month view, a year may be encoded in the prefix
+  argument as well. For example, {{{kbd(200712 m)}}} will jump to
+  December, 2007. If such a year specification has only one or two
+  digits, it will be mapped to the interval 1938-2037.
+
+- {{{kbd(v y)}}}, ~org-agenda-year-view~ ::
+  {{{kindex(v y)}}}
+  {{{vindex(org-agenda-span)}}}
+
+  Switch to year view. Because year views are slow to create, they do
+  not become the default for subsequent agenda refreshes. A numeric
+  prefix argument may be used to jump directly to a specific day of the
+  year.
+
+- {{{kbdspckey(v,SPC)}}}, ~org-agenda-reset-view~ ::
+  {{{kindex(v @key{SPC})}}}
+  {{{vindex(org-agenda-span)}}}
+
+  Reset ~org-agenda-span~ to the current span.
+
+- {{{kbd(f)}}}, ~org-agenda-later~ ::
+  {{{kindex(f)}}}
+
+  Go forward in time to display the following ~org-agenda-current-span~
+  days. For example, if the display covers a week, switch to the
+  following week. With prefix arg, go forward that many times
+  ~org-agenda-current-span~ days.
+
+- {{{kbd(b)}}}, ~org-agenda-earlier~ ::
+  {{{kindex(b)}}}
+
+  Go backward in time to display earlier dates.
+
+- {{{kbd(.)}}}, ~org-agenda-goto-today~ ::
+  {{{kindex(.)}}}
+
+  Go to today.
+
+- {{{kbd(j)}}}, ~org-agenda-goto-date~ ::
+  {{{kindex(j)}}}
+  
+  Prompt for a date and go there.
+
+- {{{kbd(J)}}}, ~org-agenda-clock-goto~ ::
+  {{{kindex(J)}}}
+
+   Go to the currently clocked-in task /in the agenda buffer/.
+
+- {{{kbd(D)}}}, ~org-agenda-toggle-diary~ ::
+  {{{kindex(D)}}}
+
+   Toggle the inclusion of diary entries.  See [[Weekly/daily agenda]].
+
+- {{{kbd(v l)}}} or {{{kbd(v L)}}} or short {{{kbd(l)}}}, ~org-agenda-log-mode~ ::
+  {{{kindex(v l)}}}
+  {{{kindex(l)}}}
+  {{{kindex(v L)}}}
+  {{{vindex(org-log-done)}}}
+  {{{vindex(org-agenda-log-mode-items)}}}
+
+  Toggle Logbook mode. In Logbook mode, entries that were marked DONE
+  while logging was on (see the variable ~org-log-done~) are shown in
+  the agenda, as are entries that have been clocked on that day. You can
+  configure the entry types that should be included in log mode using
+  the variable ~org-agenda-log-mode-items~. When called with a
+  {{{kbd(C-u)}}} prefix, show all possible logbook entries, including
+  state changes. When called with two prefix args {{{kbd(C-u C-u)}}},
+  show only logging information, nothing else. {{{kbd(v L)}}} is
+  equivalent to {{{kbd(C-u v l)}}}.
+
+- {{{kbd(v [)}}} or short {{{kbd([)}}}, ~org-agenda-manipulate-query-add~ ::
+  {{{kindex(v [)}}}
+  {{{kindex([)}}}
+
+  Include inactive timestamps into the current view. Only for
+  weekly/daily agenda and timeline views.
+
+- {{{kbd(v a)}}}, ~org-agenda-archives-mode~ ::
+  {{{kindex(v a)}}}
+
+  Toggle Archives mode. In Archives mode, trees that are marked
+  ~ARCHIVED~ are also scanned when producing the agenda. To exit
+  archives mode, press {{{kbd(v a)}}} again.
+
+- {{{kbd(v A)}}}, ~org-agenda-archives-mode 'files~ ::
+
+  Toggle Archives mode. In Archives mode, trees that are marked
+  ~ARCHIVED~ are also scanned when producing the agenda, including all
+  archive files. To exit archives mode, press {{{kbd(v a)}}}.
+
+- {{{kbd(v R)}}} or short {{{kbd(R)}}}, ~org-agenda-clockreport-mode~ ::
+  {{{kindex(v R)}}}
+  {{{kindex(R)}}}
+  {{{vindex(org-agenda-start-with-clockreport-mode)}}}
+  {{{vindex(org-clock-report-include-clocking-task)}}}
+
+  Toggle Clockreport mode. In Clockreport mode, the daily/weekly agenda
+  will always show a table with the clocked times for the timespan and
+  file scope covered by the current agenda view. The initial setting for
+  this mode in new agenda buffers can be set with the variable
+  ~org-agenda-start-with-clockreport-mode~. By using a prefix argument
+  when toggling this mode (i.e., {{{kbd(C-u R)}}}), the clock table will
+  not show contributions from entries that are hidden by agenda
+  filtering.[fn:94] See also the variable
+  ~org-clock-report-include-clocking-task~.
+
+- {{{kbd(v c)}}} ::
+  {{{kindex(v c)}}}
+  {{{vindex(org-agenda-clock-consistency-checks)}}}
+
+  Show overlapping clock entries, clocking gaps, and other clocking
+  problems in the current agenda range. You can then visit clocking
+  lines and fix them manually. See the variable
+  ~org-agenda-clock-consistency-checks~ for information on how to
+  customize the definition of what constituted a clocking problem. To
+  return to normal agenda display, press {{{kbd(l)}}} to exit Logbook
+  mode.
+
+- {{{kbd(v E)}}} or short {{{kbd(E)}}}, ~org-agenda-entry-text-mode~ ::
+  {{{kindex(v E)}}}
+  {{{kindex(E)}}}
+  {{{vindex(org-agenda-start-with-entry-text-mode)}}}
+  {{{vindex(org-agenda-entry-text-maxlines)}}}
+
+  Toggle entry text mode. In entry text mode, a number of lines from the
+  Org outline node referenced by an agenda line will be displayed below
+  the line. The maximum number of lines is given by the variable
+  ~org-agenda-entry-text-maxlines~. Calling this command with a numeric
+  prefix argument will temporarily modify that number to the prefix
+  value.
+
+- {{{kbd(G)}}}, ~org-agenda-toggle-time-grid~ ::
+  {{{kindex(G)}}}
+  {{{vindex(org-agenda-use-time-grid)}}}
+  {{{vindex(org-agenda-time-grid)}}}
+
+  Toggle the time grid on and off. See also the variables
+  ~org-agenda-use-time-grid~ and ~org-agenda-time-grid~.
+
+- {{{kbd(r)}}}, ~org-agenda-redo~ ::
+  {{{kindex(r)}}}
+
+  Recreate the agenda buffer, for example to reflect the changes after
+  modification of the timestamps of items with {{{kbdkey(S-,left)}}} and
+  {{{kbdkey(S-,right)}}}.  When the buffer is the global TODO list, a prefix
+  argument is interpreted to create a selective list for a specific TODO
+  keyword.
+
+- {{{kbd(g)}}}, ~org-agenda-redo~ ::
+  {{{kindex(g)}}}
+
+  Same as {{{kbd(r)}}}.
+
+- {{{kbd(C-x C-s)}}} or short {{{kbd(s)}}}, ~org-save-all-org-buffers~ ::
+  {{{kindex(C-x C-s)}}}
+  {{{kindex(s)}}}
+
+  Save all Org buffers in the current Emacs session, and also the
+  locations of IDs.
+
+- {{{kbd(C-c C-x C-c)}}}, ~org-agenda-columns~ ::
+  {{{kindex(C-c C-x C-c)}}}
+  {{{vindex(org-columns-default-format)}}}
+
+  Invoke column view (see [[Column view]]) in the agenda buffer. The column
+  view format is taken from the entry at point, or (if there is no entry
+  at point), from the first entry in the agenda view. So whatever the
+  format for that entry would be in the original buffer (taken from a
+  property, from a ~#+COLUMNS~ line, or from the default variable
+  ~org-columns-default-format~), will be used in the agenda.
+
+- {{{kbd(C-c C-x >)}}}, ~org-agenda-remove-restriction-lock~ ::
+  {{{kindex(C-c C-x >)}}}
+
+  Remove the restriction lock on the agenda, if it is currently
+  restricted to a file or subtree (see [[Agenda files]]).
+
+*** FIXME Secondary filtering and query editing
+{{{cindex(filtering, by tag category and effort\\\, in agenda)}}}
+{{{cindex(tag filtering\\\, in agenda)}}}
+{{{cindex(category filtering\\\, in agenda)}}}
+{{{cindex(effort filtering\\\, in agenda)}}}
+{{{cindex(query editing\\\, in agenda)}}}
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(<)}}}, ~org-agenda-filter-by-category~ ::
+  {{{kindex(<)}}}
+  {{{vindex(org-agenda-category-filter-preset)}}}
+
+  Filter the current agenda view with respect to the category of the
+  item at point. Pressing {{{kbd(<)}}} another time will remove this
+  filter. You can add a filter preset through the option
+  ~org-agenda-category-filter-preset~ (see below).
+
+- {{{kbd(/)}}}, ~org-agenda-filter-by-tag~ ::
+  {{{kindex(/)}}}
+  {{{vindex(org-agenda-tag-filter-preset)}}}
+
+  Filter the current agenda view with respect to a tag and/or effort
+  estimates. The difference between this and a custom agenda command is
+  that filtering is very fast, so that you can switch quickly between
+  different filters without having to recreate the
+  agenda.[fn:95]
+
+  You will be prompted for a tag selection letter; {{{key(SPC)}}} will
+  mean any tag at all. Pressing {{{key(TAB)}}} at that prompt will offer
+  use completion to select a tag (including any tags that do not have a
+  selection character). The command then hides all entries that do not
+  contain or inherit this tag. When called with prefix arg, remove the
+  entries that /do/ have the tag. A second {{{kbd(/)}}} at the prompt
+  will turn off the filter and unhide any hidden entries. If the first
+  key you press is either {{{kbd(+)}}} or {{{kbd(-)}}}, the previous
+  filter will be narrowed by requiring or forbidding the selected
+  additional tag. Instead of pressing {{{kbd(+)}}} or {{{kbd(-)}}} after
+  {{{kbd(/)}}}, you can also immediately use the ~\~ command.
+
+  {{{vindex(org-sort-agenda-noeffort-is-high)}}}
+
+  In order to filter for effort estimates, you should set up allowed
+  efforts globally, for example:
+  #+header: :eval no
+  #+header: :exports code
+  #+begin_src emacs-lisp
+  (setq org-global-properties
+      '(("Effort_ALL". "0 0:10 0:30 1:00 2:00 3:00 4:00")))
+  #+end_src
+
+  You can then filter for an effort by first typing an operator, one of
+  {{{kbd(<)}}}, {{{kbd(>)}}}, and {{{kbd(=)}}}, and then the one-digit
+  index of an effort estimate in your array of allowed values, where
+  {{{kbd(0)}}} means the 10th value. The filter will then restrict to
+  entries with effort smaller-or-equal, equal, or larger-or-equal than
+  the selected value. If the digits 0-9 are not used as fast access keys
+  to tags, you can also simply press the index digit directly without an
+  operator. In this case, {{{kbd(<)}}} will be assumed. For application
+  of the operator, entries without a defined effort will be treated
+  according to the value of ~org-sort-agenda-noeffort-is-high~. To
+  filter for tasks without effort definition, press {{{kbd(?)}}} as the
+  operator.
+
+  Org also supports automatic, context-aware tag filtering. If the
+  variable ~org-agenda-auto-exclude-function~ is set to a user-defined
+  function, that function can decide which tags should be excluded from
+  the agenda automatically. Once this is set, the {{{kbd(/)}}} command
+  then accepts {{{kbd(RET)}}} as a sub-option key and runs the auto
+  exclusion logic. For example, let's say you use a ~Net~ tag to
+  identify tasks which need network access, an ~Errand~ tag for errands
+  in town, and a ~Call~ tag for making phone calls. You could
+  auto-exclude these tags based on the availability of the Internet, and
+  outside of business hours, with something like this:
+
+  #+header: :eval no
+  #+header: :exports code
+  #+begin_src emacs-lisp
+  (defun org-my-auto-exclude-function (tag)
+    (and (cond
+          ((string= tag "Net")
+           (/= 0 (call-process "/sbin/ping" nil nil nil
+                               "-c1" "-q" "-t1" "mail.gnu.org")))
+          ((or (string= tag "Errand") (string= tag "Call"))
+           (let ((hour (nth 2 (decode-time))))
+             (or (< hour 8) (> hour 21)))))
+         (concat "-" tag)))
+  (setq org-agenda-auto-exclude-function 'org-my-auto-exclude-function)
+  #+end_src
+
+- ~\~ ~org-agenda-filter-by-tag-refine~ ::
+  {{{kindex(XXX)}}}
+  #+comment: Should be \
+  Narrow the current agenda filter by an additional condition. When
+  called with prefix arg, remove the entries that /do/ have the tag, or
+  that do match the effort criterion. You can achieve the same effect by
+  pressing {{{kbd(+)}}} or {{{kbd(-)}}} as the first key after the
+  {{{kbd(/)}}} command.
+
+- {{{kbd([)}}} {{{kbd(])}}} {{{kbd({)}}} {{{kbd(})}}} in search view ::
+  {{{kindex([)}}}
+  {{{kindex(])}}}
+  {{{kindex(@{)}}}
+  {{{kindex(@})}}}
+
+  Add new search words ({{{kbd([)}}} and {{{kbd(])}}}) or new regular
+  expressions ({{{kbd({)}}} and {{{kbd(})}}}) to the query string. The
+  opening bracket/brace will add a positive search term prefixed by
+  {{{samp(+)}}}, indicating that this search term /must/ occur/match in
+  the entry. The closing bracket/brace will add a negative search term
+  which /must not/ occur/match in the entry for it to be selected.
+
+*** FIXME Remote editing
+{{{cindex(remote editing\\\, from agenda)}}}
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(0--9)}}} ::
+
+  Digit argument.
+
+- {{{kbd(C-_)}}}, ~org-agenda-undo~ ::
+  {{{kindex(C-_)}}}
+  {{{cindex(undoing remote-editing events)}}}
+  {{{cindex(remote editing\\\, undo)}}}
+
+  Undo a change due to a remote editing command. The change is undone
+  both in the agenda buffer and in the remote buffer.
+
+- {{{kbd(t)}}}, ~org-agenda-todo~ ::
+  {{{kindex(t)}}}
+
+  Change the TODO state of the item, both in the agenda and in the
+  original org file.
+
+- {{{kbdkey(C-S-,right)}}}, ~org-agenda-todo-nextset~ ::
+  {{{kindex(C-S-@key{right})}}}
+
+  Switch to the next set of TODO keywords.
+
+- {{{kbdkey(C-S-,left)}}}, ~org-agenda-todo-previousset~ ::
+  {{{kindex(C-S-@key{left})}}}
+
+  Switch to the previous set of TODO keywords.
+
+- {{{kbd(C-k)}}}, ~org-agenda-kill~ ::
+  {{{kindex(C-k)}}}
+  {{{vindex(org-agenda-confirm-kill)}}}
+
+  Delete the current agenda item along with the entire subtree belonging
+  to it in the original Org file. If the text to be deleted remotely is
+  longer than one line, the kill needs to be confirmed by the user. See
+  variable ~org-agenda-confirm-kill~.
+
+- {{{kbd(C-c C-w)}}}, ~org-agenda-refile~ ::
+  {{{kindex(C-c C-w)}}}
+
+  Refile the entry at point.
+
+- {{{kbd(C-c C-x C-a)}}} or short {{{kbd(a)}}}, ~org-agenda-archive-default-with-confirmation~ ::
+  {{{kindex(C-c C-x C-a)}}}
+  {{{kindex(a)}}}
+  {{{vindex(org-archive-default-command)}}}
+
+  Archive the subtree corresponding to the entry at point using the
+  default archiving command set in ~org-archive-default-command~. When
+  using the ~a~ key, confirmation will be required.
+
+- {{{kbd(C-c C-x a)}}}, ~org-agenda-toggle-archive-tag~ ::
+  {{{kindex(C-c C-x a)}}}
+
+  Toggle the ARCHIVE tag for the current headline.
+
+- {{{kbd(C-c C-x A)}}}, ~org-agenda-archive-to-archive-sibling~ ::
+  {{{kindex(C-c C-x A)}}}
+
+  Move the subtree corresponding to the current entry to its /archive
+  sibling/.
+
+- {{{kbd(C-c C-x C-s)}}} or short {{{kbd($)}}}, ~org-agenda-archive~ ::
+  {{{kindex(C-c C-x C-s)}}}
+  {{{kindex($)}}}
+
+  Archive the subtree corresponding to the current headline. This means
+  the entry will be moved to the configured archive location, most
+  likely a different file.
+
+- {{{kbd(T)}}}, ~org-agenda-show-tags~ ::
+  {{{kindex(T)}}}
+  {{{vindex(org-agenda-show-inherited-tags)}}}
+
+  Show all tags associated with the current item. This is useful if you
+  have turned off ~org-agenda-show-inherited-tags~, but still want to
+  see all tags of a headline occasionally.
+
+- {{{kbd(:)}}}, ~org-agenda-set-tags~ ::
+  {{{kindex(:)}}}
+
+  Set tags for the current headline. If there is an active region in the
+  agenda, change a tag for all headings in the region.
+
+- {{{kbd(,)}}} ::
+  {{{kindex(XXX)}}}
+  #+comment: Should be a comma
+  Set the priority for the current item (~org-agenda-priority~). Org
+  mode prompts for the priority character. If you reply with
+  {{{key(SPC)}}}, the priority cookie is removed from the entry.
+
+- {{{kbd(P)}}}, ~org-agenda-show-priority~ ::
+  {{{kindex(P)}}}
+
+  Display weighted priority of current item.
+
+- {{{kbd(+)}}} {{{kbdkey(S-,up)}}}, ~org-agenda-priority-up~ ::
+  {{{kindex(+)}}}
+
+  Increase the priority of the current item. The priority is changed in
+  the original buffer, but the agenda is not resorted. Use the
+  {{{kbd(r)}}} key for this.
+
+- {{{kbd(-)}}} {{{kbdkey(S-,down)}}}, ~org-agenda-priority-down~ ::
+  {{{kindex(-)}}}
+
+  Decrease the priority of the current item.
+
+- {{{kbd(z)}}} {{{kbd(C-c C-z)}}}, ~org-agenda-add-note~ ::
+  {{{kindex(z)}}}
+  {{{vindex(org-log-into-drawer)}}}
+
+  Add a note to the entry. This note will be recorded, and then filed to
+  the same location where state change notes are put. Depending on
+  ~org-log-into-drawer~, this may be inside a drawer.
+
+- {{{kbd(C-c C-a)}}}, ~org-attach~ ::
+  {{{kindex(C-c C-a)}}}
+
+  Dispatcher for all command related to attachments.
+
+- {{{kbd(C-c C-s)}}}, ~org-agenda-schedule~ ::
+  {{{kindex(C-c C-s)}}}
+
+  Schedule this item.  With prefix arg remove the scheduling timestamp
+
+- {{{kbd(C-c C-d)}}}, ~org-agenda-deadline~ ::
+  {{{kindex(C-c C-d)}}}
+  
+  Set a deadline for this item.  With prefix arg remove the deadline.
+
+- {{{kbdkey(S-,right)}}}, ~org-agenda-do-date-later~ ::
+  {{{kindex(S-@key{right})}}}
+
+  Change the timestamp associated with the current line by one day into
+  the future. If the date is in the past, the first call to this command
+  will move it to today. With a numeric prefix argument, change it by
+  that many days. For example, {{{kbdkey(3 6 5 S-,right)}}} will change
+  it by a year. With a {{{kbd(C-u)}}} prefix, change the time by one
+  hour. If you immediately repeat the command, it will continue to
+  change hours even without the prefix arg. With a double 
+  {{{kbd(C-u C-u)}}} prefix, do the same for changing minutes. The stamp is changed
+  in the original Org file, but the change is not directly reflected in
+  the agenda buffer. Use {{{kbd(r)}}} or {{{kbd(g)}}} to update the
+  buffer.
+
+- {{{kbdkey(S-,left)}}}, ~org-agenda-do-date-earlier~ ::
+  {{{kindex(S-@key{left})}}}
+
+  Change the timestamp associated with the current line by one day
+  into the past.
+
+- {{{kbd(>)}}}, ~org-agenda-date-prompt~ ::
+  {{{kindex(>)}}}
+
+  Change the timestamp associated with the current line. The key
+  {{{kbd(>)}}} has been chosen, because it is the same as {{{kbd(S-.)}}}
+  on my keyboard.
+
+- {{{kbd(I)}}}, ~org-agenda-clock-in~ ::
+  {{{kindex(I)}}}
+
+  Start the clock on the current item. If a clock is running already, it
+  is stopped first.
+
+- {{{kbd(O)}}}, ~org-agenda-clock-out~ ::
+  {{{kindex(O)}}}
+
+  Stop the previously started clock.
+
+- {{{kbd(X)}}}, ~org-agenda-clock-cancel~ ::
+  {{{kindex(X)}}}
+
+  Cancel the currently running clock.
+
+- {{{kbd(J)}}}, ~org-agenda-clock-goto~ ::
+  {{{kindex(J)}}}
+
+  Jump to the running clock in another window.
+
+- {{{kbd(k)}}}, ~org-agenda-capture~ ::
+  {{{kindex(k)}}}
+  {{{cindex(capturing\\\, from agenda)}}}
+  {{{vindex(org-capture-use-agenda-date)}}}
+
+  Like ~org-capture~, but use the date at point as the default date for
+  the capture template.  See ~org-capture-use-agenda-date~ to make this
+  the default behavior of ~org-capture~.
+
+*** Bulk remote editing selected entries
+{{{cindex(remote editing\\\, bulk\\\, from agenda)}}}
+{{{vindex(org-agenda-bulk-persistent-marks)}}}
+{{{vindex(org-agenda-bulk-custom-functions)}}}
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(m)}}}, ~org-agenda-bulk-mark~ ::
+  {{{kindex(m)}}}
+
+  Mark the entry at point for bulk action. With prefix arg, mark that
+  many successive entries.
+
+- {{{kbd(%)}}}, ~org-agenda-bulk-mark-regexp~ ::
+  {{{kindex(%)}}}
+
+  Mark entries matching a regular expression for bulk action.
+
+- {{{kbd(u)}}}, ~org-agenda-bulk-unmark~ ::
+  {{{kindex(u)}}}
+
+  Unmark entry for bulk action.
+
+- {{{kbd(U)}}}, ~org-agenda-bulk-remove-all-marks~ ::
+  {{{kindex(U)}}}
+
+  Unmark all marked entries for bulk action.
+
+- {{{kbd(B)}}}, ~org-agenda-bulk-action~ ::
+  {{{kindex(B)}}}
+
+  Bulk action: act on all marked entries in the agenda. This will prompt
+  for another key to select the action to be applied. The prefix arg to
+  {{{kbd(B)}}} will be passed through to the {{{kbd(s)}}} and
+  {{{kbd(d)}}} commands, to bulk-remove these special timestamps. By
+  default, marks are removed after the bulk. If you want them to
+  persist, set ~org-agenda-bulk-persistent-marks~ to ~t~ or hit
+  {{{kbd(p)}}} at the prompt.
+
+  - {{{kbd(*)}}} ::  
+
+    Toggle persistent marks.
+
+  - {{{kbd($)}}} :: 
+
+    Archive all selected entries.
+
+  - {{{kbd(A)}}} :: 
+
+    Archive entries by moving them to their respective archive siblings.
+
+  - {{{kbd(t)}}} :: 
+
+    Change TODO state. This prompts for a single TODO keyword and changes
+    the state of all selected entries, bypassing blocking and suppressing
+    logging notes (but not timestamps).
+
+  - {{{kbd(+)}}}  :: 
+
+    Add a tag to all selected entries.
+
+  - {{{kbd(-)}}}  :: 
+
+    Remove a tag from all selected entries.
+
+  - {{{kbd(s)}}}  :: 
+
+    Schedule all items to a new date. To shift existing schedule dates by
+    a fixed number of days, use something starting with double plus at the
+    prompt, for example {{{samp(++8d)}}} or {{{samp(++2w)}}}.
+
+  - {{{kbd(d)}}}  :: 
+
+    Set deadline to a specific date.
+
+  - {{{kbd(r)}}}  :: 
+
+    Prompt for a single refile target and move all entries. The entries
+    will no longer be in the agenda; refresh ({{{kbd(g)}}}) to bring them
+    back.
+
+  - {{{kbd(S)}}}  :: 
+
+    Reschedule randomly into the coming N days. N will be prompted for.
+    With prefix arg ({{{kbd(C-u B S)}}}), scatter only across weekdays.
+
+  - {{{kbd(f)}}}  :: 
+
+    Apply a function to marked entries.[fn:96] For example, the function
+    below sets the CATEGORY property of the entries to web.
+
+    #+header: :eval no
+    #+header: :exports code
+    #+begin_src emacs-lisp
+    (defun set-category ()
+      (interactive "P")
+      (let* ((marker (or (org-get-at-bol 'org-hd-marker)
+                         (org-agenda-error)))
+             (buffer (marker-buffer marker)))
+        (with-current-buffer buffer
+          (save-excursion
+            (save-restriction
+              (widen)
+              (goto-char marker)
+              (org-back-to-heading t)
+              (org-set-property "CATEGORY" "web"))))))
+    #+end_src
+
+*** Calendar commands
+{{{cindex(calendar commands\\\, from agenda)}}}
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(c)}}}, ~org-agenda-goto-calendar~ ::
+  {{{kindex(c)}}}
+
+  Open the Emacs calendar and move to the date at the agenda cursor.
+
+- {{{kbd(c)}}}, ~org-calendar-goto-agenda~ ::
+  {{{kindex(c)}}}
+
+  When in the calendar, compute and show the Org mode agenda for the
+  date at the cursor.
+
+- {{{kbd(i)}}}, ~org-agenda-diary-entry~ ::
+  {{{kindex(i)}}}
+  {{{vindex(org-agenda-diary-file)}}}
+  {{{cindex(diary entries\\\, creating from agenda)}}}
+
+  Insert a new entry into the diary, using the date at the cursor and
+  (for block entries) the date at the mark. This will add to the Emacs
+  diary file, in a way similar to the {{{kbd(i)}}} command in the
+  calendar.[fn:97] The diary file will pop up in another window, where
+  you can add the entry.
+
+  If you configure ~org-agenda-diary-file~ to point to an Org mode file,
+  Org will create entries (in Org mode syntax) in that file instead.
+  Most entries will be stored in a date-based outline tree that will
+  later make it easy to archive appointments from previous months/years.
+  The tree will be built under an entry with a ~DATE_TREE~ property, or
+  else with years as top-level entries. Emacs will prompt you for the
+  entry text---if you specify it, the entry will be created in
+  ~org-agenda-diary-file~ without further interaction. If you directly
+  press {{{key(RET)}}} at the prompt without typing text, the target
+  file will be shown in another window for you to finish the entry
+  there. See also the {{{kbd(k r)}}} command.
+
+- {{{kbd(M)}}}, ~org-agenda-phases-of-moon~ ::
+  {{{kindex(M)}}}
+
+  Show the phases of the moon for the three months around current date.
+
+- {{{kbd(S)}}}, ~org-agenda-sunrise-sunset~ ::
+  {{{kindex(S)}}}
+
+  Show sunrise and sunset times. The geographical location must be set
+  with calendar variables, see the documentation for the Emacs calendar.
+
+- {{{kbd(C)}}}, ~org-agenda-convert-date~ ::
+  {{{kindex(C)}}}
+
+  Convert the date at cursor into many other cultural and historic
+  calendars.
+
+- {{{kbd(H)}}}, ~org-agenda-holidays~ ::
+  {{{kindex(H)}}}
+
+  Show holidays for three months around the cursor date.
+
+- {{{kbd(M-x org-export-icalendar-combine-agenda-files)}}} ::
+
+  Export a single iCalendar file containing entries from all agenda
+  files. This is a globally available command, and also available in the
+  agenda menu.
+
+*** Exporting to a file
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-x C-w)}}}, ~org-agenda-write~ ::
+  {{{kindex(C-x C-w)}}}
+  {{{cindex(exporting agenda views)}}}
+  {{{cindex(agenda views\\\, exporting)}}}
+  {{{vindex(org-agenda-exporter-settings)}}}
+
+  Write the agenda view to a file. Depending on the extension of the
+  selected file name, the view will be exported as HTML (extension
+  {{{file(.html)}}} or {{{file(.htm)}}}), Postscript (extension
+  {{{file(.ps)}}}), PDF (extension {{{file(.pdf)}}}), and plain text
+  (any other extension). When called with a {{{kbd(C-u)}}} prefix
+  argument, immediately open the newly created file. Use the variable
+  ~org-agenda-exporter-settings~ to set options for {{{file(ps-print)}}}
+  and for {{{file(htmlize)}}} to be used during export.
+
+*** Quit and exit
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(q)}}}, ~org-agenda-quit~ ::
+  {{{kindex(q)}}}
+
+  Quit agenda, remove the agenda buffer.
+
+- {{{kbd(x)}}}, ~org-agenda-exit~ ::
+  {{{kindex(x)}}}
+  {{{cindex(agenda files\\\, removing buffers)}}}
+
+  Exit agenda, remove the agenda buffer and all buffers loaded by Emacs
+  for the compilation of the agenda. Buffers created by the user to
+  visit Org files will not be removed.
+
+** Custom agenda views
+   :PROPERTIES:
+   :DESCRIPTION: Defining special searches and views
+   :END:
+{{{cindex(custom agenda views)}}}
+{{{cindex(agenda views\\\, custom)}}}
+
+Custom agenda commands serve two purposes: to store and quickly access
+frequently used TODO and tags searches, and to create special composite
+agenda buffers.  Custom agenda commands will be accessible through the
+dispatcher (see [[Agenda dispatcher]]), just like the default commands.
+
+*** Storing searches
+    :PROPERTIES:
+    :DESCRIPTION: Type once, use often
+    :END:
+
+The first application of custom searches is the definition of keyboard
+shortcuts for frequently used searches, either creating an agenda
+buffer, or a sparse tree (the latter covering of course only the
+current buffer).
+
+{{{kindex(C-c a C)}}}
+{{{vindex(org-agenda-custom-commands)}}}
+
+Custom commands are configured in the variable
+~org-agenda-custom-commands~. You can customize this variable, for
+example by pressing {{{kbd(C-c a C)}}}. You can also directly set it
+with Emacs Lisp in {{{file(.emacs)}}}. The following example contains
+all valid search types:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(setq org-agenda-custom-commands
+      '(("w" todo "WAITING")
+        ("W" todo-tree "WAITING")
+        ("u" tags "+boss-urgent")
+        ("v" tags-todo "+boss-urgent")
+        ("U" tags-tree "+boss-urgent")
+        ("f" occur-tree "\\<FIXME\\>")
+        ("h" . "HOME+Name tags searches") ; description for "h" prefix
+        ("hl" tags "+home+Lisa")
+        ("hp" tags "+home+Peter")
+        ("hk" tags "+home+Kim")))
+#+end_src
+
+{{{noindent}}} The initial string in each entry defines the keys you
+have to press after the dispatcher command {{{kbd(C-c a)}}} in order
+to access the command. Usually this will be just a single character,
+but if you have many similar commands, you can also define two-letter
+combinations where the first character is the same in several
+combinations and serves as a prefix key.[fn:98] The second parameter
+is the search type, followed by the string or regular expression to be
+used for the matching. The example above will therefore define:
+
+#+attr_texinfo: :table-type "table" :indic "@kbd"
+- C-c a w ::
+
+  A global search for TODO entries with {{{samp(WAITING)}}} as the TODO
+  keyword.
+
+- C-c a W ::
+
+  The same search, but only in the current buffer and displaying the
+  results as a sparse tree.
+
+- C-c a u ::
+
+  A global tags search for headlines marked {{{samp(:boss:)}}} but not
+  {{{samp(:urgent:)}}}.
+
+- C-c a v ::
+
+  The same search as {{{kbd(C-c a u)}}}, but limiting the search to
+  headlines that are also TODO items.
+
+- C-c a U ::
+
+  The same search as {{{kbd(C-c a u)}}}, but only in the current buffer and
+  displaying the result as a sparse tree.
+
+- C-c a f ::
+
+  Create a sparse tree (again: current buffer only) with all entries
+  containing the word {{{samp(FIXME)}}}
+
+- C-c a h ::
+
+  A prefix command for a HOME tags search where you have to press an
+  additional key ({{{kbd(l)}}}, {{{kbd(p)}}} or {{{kbd(k)}}}) to select
+  a name (Lisa, Peter, or Kim) as additional tag to match.
+
+
+*** Block agenda
+    :PROPERTIES:
+    :DESCRIPTION: All the stuff you need in a single buffer
+    :END:
+{{{cindex(block agenda)}}}
+{{{cindex(agenda\\\, with block views)}}}
+
+Another possibility is the construction of agenda views that comprise
+the results of /several/ commands, each of which creates a block in
+the agenda buffer. The available commands include ~agenda~ for the
+daily or weekly agenda (as created with {{{kbd(C-c a a)}}}), ~alltodo~
+for the global TODO list (as constructed with {{{kbd(C-c a t)}}}), and
+the matching commands discussed above: ~todo~, ~tags~, and
+~tags-todo~. Here are two examples:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(setq org-agenda-custom-commands
+      '(("h" "Agenda and Home-related tasks"
+         ((agenda "")
+          (tags-todo "home")
+          (tags "garden")))
+        ("o" "Agenda and Office-related tasks"
+         ((agenda "")
+          (tags-todo "work")
+          (tags "office")))))
+#+end_src
+
+{{{noindent}}} This will define {{{kbd(C-c a h)}}} to create a
+multi-block view for stuff you need to attend to at home. The
+resulting agenda buffer will contain your agenda for the current week,
+all TODO items that carry the tag {{{samp(home)}}}, and also all lines
+tagged with {{{samp(garden)}}}. Finally the command {{{kbd(C-c a o)}}}
+provides a similar view for office tasks.
+
+*** Setting options for custom commands
+    :PROPERTIES:
+    :DESCRIPTION: Changing the rules
+    :END:
+{{{cindex(options\\\, for custom agenda views)}}}
+{{{vindex(org-agenda-custom-commands)}}}
+
+Org mode contains a number of variables regulating agenda construction
+and display. The global variables define the behavior for all agenda
+commands, including the custom commands. However, if you want to
+change some settings just for a single custom view, you can do so.
+Setting options requires inserting a list of variable names and values
+at the right spot in ~org-agenda-custom-commands~. For example:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(setq org-agenda-custom-commands
+      '(("w" todo "WAITING"
+         ((org-agenda-sorting-strategy '(priority-down))
+          (org-agenda-prefix-format "  Mixed: ")))
+        ("U" tags-tree "+boss-urgent"
+         ((org-show-following-heading nil)
+          (org-show-hierarchy-above nil)))
+        ("N" search ""
+         ((org-agenda-files '("~org/notes.org"))
+          (org-agenda-text-search-extra-files nil)))))
+#+end_src
+
+{{{noindent}}} Now the {{{kbd(C-c a w)}}} command will sort the
+collected entries only by priority, and the prefix format is modified
+to just say {{{samp( Mixed: )}}} instead of giving the category of the
+entry. The sparse tags tree of {{{kbd(C-c a U)}}} will now turn out
+ultra-compact, because neither the headline hierarchy above the match,
+nor the headline following the match will be shown. The command
+{{{kbd(C-c a N)}}} will do a text search limited to only a single
+file.
+
+{{{vindex(org-agenda-custom-commands)}}}
+
+For command sets creating a block agenda, ~org-agenda-custom-commands~
+has two separate spots for setting options. You can add options that
+should be valid for just a single command in the set, and options that
+should be valid for all commands in the set. The former are just added
+to the command entry; the latter must come after the list of command
+entries. Going back to the block agenda example (see [[Block
+agenda]]), let's change the sorting strategy for the {{{kbd(C-c a
+h)}}} commands to ~priority-down~, but let's sort the results for
+GARDEN tags query in the opposite order, ~priority-up~. This would
+look like this:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(setq org-agenda-custom-commands
+      '(("h" "Agenda and Home-related tasks"
+         ((agenda)
+          (tags-todo "home")
+          (tags "garden"
+                ((org-agenda-sorting-strategy '(priority-up)))))
+         ((org-agenda-sorting-strategy '(priority-down))))
+        ("o" "Agenda and Office-related tasks"
+         ((agenda)
+          (tags-todo "work")
+          (tags "office")))))
+#+end_src
+
+As you see, the values and parentheses setting is a little complex.
+When in doubt, use the customize interface to set this variable---it
+fully supports its structure. Just one caveat: when setting options in
+this interface, the /values/ are just Lisp expressions. So if the
+value is a string, you need to add the double-quotes around the value
+yourself.
+
+{{{vindex(org-agenda-custom-commands-contexts)}}}
+
+To control whether an agenda command should be accessible from a
+specific context, you can customize
+~org-agenda-custom-commands-contexts~. Let's say for example that you
+have an agenda command {{{kbd(o)}}} displaying a view that you only
+need when reading emails. Then you would configure this option like
+this:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(setq org-agenda-custom-commands-contexts
+      '(("o" (in-mode . "message-mode"))))
+#+end_src
+
+You can also tell that the command key {{{kbd(o)}}} should refer to another
+command key {{{kbd(r)}}}.  In that case, add this command key like this:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(setq org-agenda-custom-commands-contexts
+      '(("o" "r" (in-mode . "message-mode"))))
+#+end_src
+
+See the docstring of the variable for more information.
+
+** Exporting agenda views
+   :PROPERTIES:
+   :DESCRIPTION: Writing a view to a file
+   :END:
+{{{cindex(agenda views\\\, exporting)}}}
+
+If you are away from your computer, it can be very useful to have a
+printed version of some agenda views to carry around. Org mode can
+export custom agenda views as plain text, HTML, Postscript,
+PDF, and iCalendar files.[fn:99] If you want to
+do this only occasionally, use the following command:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-x C-w)}}}, ~org-agenda-write~ ::
+
+  {{{cindex(exporting agenda views)}}}
+  {{{cindex(agenda views\\\, exporting)}}}
+  {{{vindex(org-agenda-exporter-settings)}}}
+
+  Write the agenda view to a file. Depending on the extension of the
+  selected file name, the view will be exported as HTML (extension
+  {{{file(.html)}}} or {{{file(.htm)}}}), Postscript (extension
+  {{{file(.ps)}}}), iCalendar (extension {{{file(.ics)}}}), or plain
+  text (any other extension). Use the variable
+  ~org-agenda-exporter-settings~ to set options for {{{file(ps-print)}}}
+  and for {{{file(htmlize)}}} to be used during export, for example:
+
+  {{{vindex(org-agenda-add-entry-text-maxlines)}}}
+  {{{vindex(htmlize-output-type)}}}
+  {{{vindex(ps-number-of-columns)}}}
+  {{{vindex(ps-landscape-mode)}}}
+
+  #+header: :eval no
+  #+header: :exports code
+  #+begin_src emacs-lisp
+  (setq org-agenda-exporter-settings
+        '((ps-number-of-columns 2)
+          (ps-landscape-mode t)
+          (org-agenda-add-entry-text-maxlines 5)
+          (htmlize-output-type 'css)))
+  #+end_src
+
+
+If you need to export certain agenda views frequently, you can
+associate any custom agenda command with a list of output file
+names.[fn:100] Here is an example that first defines custom commands
+for the agenda and the global TODO list, together with a number of
+files to which to export them. Then we define two block agenda
+commands and specify file names for them as well. File names can be
+relative to the current working directory, or absolute.
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(setq org-agenda-custom-commands
+      '(("X" agenda "" nil ("agenda.html" "agenda.ps"))
+        ("Y" alltodo "" nil ("todo.html" "todo.txt" "todo.ps"))
+        ("h" "Agenda and Home-related tasks"
+         ((agenda "")
+          (tags-todo "home")
+          (tags "garden"))
+         nil
+         ("~/views/home.html"))
+        ("o" "Agenda and Office-related tasks"
+         ((agenda)
+          (tags-todo "work")
+          (tags "office"))
+         nil
+         ("~/views/office.ps" "~/calendars/office.ics"))))
+#+end_src
+
+The extension of the file name determines the type of export. If it is
+{{{file(.html)}}}, Org mode will use the {{{file(htmlize.el)}}}
+package to convert the buffer to HTML and save it to this file name.
+If the extension is {{{file(.ps)}}}, ~ps-print-buffer-with-faces~ is
+used to produce Postscript output. If the extension is
+{{{file(.ics)}}}, iCalendar export is run export over all files that
+were used to construct the agenda, and limit the export to entries
+listed in the agenda. Any other extension produces a plain ASCII file.
+
+The export files are /not/ created when you use one of those
+commands interactively because this might use too much overhead.
+Instead, there is a special command to produce /all/ specified
+files in one step:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c a e)}}}, ~org-store-agenda-views~ ::
+
+  Export all agenda views that have export file names associated with
+  them.
+
+
+You can use the options section of the custom agenda commands to also
+set options for the export commands.  For example:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(setq org-agenda-custom-commands
+      '(("X" agenda ""
+         ((ps-number-of-columns 2)
+          (ps-landscape-mode t)
+          (org-agenda-prefix-format " [ ] ")
+          (org-agenda-with-colors nil)
+          (org-agenda-remove-tags t))
+         ("theagenda.ps"))))
+#+end_src
+
+{{{noindent}}} This command sets two options for the Postscript
+exporter, to make it print in two columns in landscape format---the
+resulting page can be cut in two and then used in a paper agenda. The
+remaining settings modify the agenda prefix to omit category and
+scheduling information, and instead include a checkbox to check off
+items. We also remove the tags to make the lines compact, and we don't
+want to use colors for the black-and-white printer. Settings specified
+in ~org-agenda-exporter-settings~ will also apply, but the settings in
+~org-agenda-custom-commands~ take precedence.
+
+{{{noindent}}} From the command line you may also use:
+
+#+begin_src sh
+  emacs -eval (org-batch-store-agenda-views) -kill
+#+end_src
+
+{{{noindent}}} or, if you need to modify some parameters:[fn:101]
+
+#+begin_example
+   emacs -eval '(org-batch-store-agenda-views                      \
+                 org-agenda-span (quote month)                     \
+                 org-agenda-start-day "2007-11-01"                 \
+                 org-agenda-include-diary nil                      \
+                 org-agenda-files (quote ("~/org/project.org")))'  \
+         -kill
+#+end_example
+
+{{{noindent}}} which will create the agenda views restricted to the
+file {{{file(~/org/project.org)}}}, without diary entries and with a
+30-day extent.
+
+You can also extract agenda information in a way that allows further
+processing by other programs.  See [[Extracting agenda information]], for
+more information.
+
+** Using column view in the agenda
+   :PROPERTIES:
+   :DESCRIPTION: Using column view for collected entries
+   :OPTIONAL_TITLE: Agenda column view
+   :END:
+{{{cindex(column view\\\, in agenda)}}}
+{{{cindex(agenda\\\, column view)}}}
+<<Agenda column view>>
+
+Column view (see [[Column view]]) is normally used to view and edit
+properties embedded in the hierarchical structure of an Org file. It
+can be quite useful to use column view also from the agenda, where
+entries are collected by certain criteria.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-x C-c)}}}, ~org-agenda-columns~ ::
+
+  Turn on column view in the agenda.
+
+
+To understand how to use this properly, it is important to realize that the
+entries in the agenda are no longer in their proper outline environment.
+This causes the following issues:
+
+1. Org needs to make a decision which ~COLUMNS~ format to use. Since
+   the entries in the agenda are collected from different files, and
+   different files may have different ~COLUMNS~ formats, this is a
+   non-trivial problem. Org first checks if the variable
+   ~org-agenda-overriding-columns-format~ is currently set, and if so,
+   takes the format from there. Otherwise it takes the format
+   associated with the first item in the agenda, or, if that item does
+   not have a specific format (defined in a property, or in its file),
+   it uses ~org-columns-default-format~.
+
+   {{{vindex(org-columns-default-format)}}}
+   {{{vindex(org-overriding-columns-format)}}}
+
+2. If any of the columns has a summary type defined (see [[Column
+   attributes]]), turning on column view in the agenda will visit all
+   relevant agenda files and make sure that the computations of this
+   property are up to date. This is also true for the special
+   ~CLOCKSUM~ property. Org will then sum the values displayed in the
+   agenda. In the daily/weekly agenda, the sums will cover a single
+   day; in all other views they cover the entire block. It is vital to
+   realize that the agenda may show the same entry /twice/ (for
+   example as scheduled and as a deadline), and it may show two
+   entries from the same hierarchy (for example a /parent/ and its
+   /child/). In these cases, the summation in the agenda will lead to
+   incorrect results because some values will count double.
+
+   {{{cindex(property, special, CLOCKSUM)}}}
+
+3. When the column view in the agenda shows the ~CLOCKSUM~, that is
+   always the entire clocked time for this item. So even in the
+   daily/weekly agenda, the clocksum listed in column view may
+   originate from times outside the current view. This has the
+   advantage that you can compare these values with a column listing
+   the planned total effort for a task---one of the major applications
+   for column view in the agenda. If you want information about
+   clocked time in the displayed period use clock table mode (press
+   {{{kbd(R)}}} in the agenda).
+
+4. When the column view in the agenda shows the ~CLOCKSUM_T~, that is
+   always today's clocked time for this item.  So even in the weekly agenda,
+   the clocksum listed in column view only originates from today.  This lets
+   you compare the time you spent on a task for today, with the time already
+   spent (via ~CLOCKSUM~) and with the planned total effort for it.
+
+   {{{cindex(property, special, CLOCKSUM_T)}}}
+
+* FIXME Markup for rich export
+  :PROPERTIES:
+  :DESCRIPTION: Prepare text for rich export
+  :OPTIONAL_TITLE: Markup
+  :END:
+
+When exporting Org mode documents, the exporter tries to reflect the
+structure of the document as accurately as possible in the backend.
+Since export targets like HTML, LaTeX, or DocBook allow much richer
+formatting, Org mode has rules on how to prepare text for rich export.
+This section summarizes the markup rules used in an Org mode buffer.
+
+** Structural markup elements
+   :PROPERTIES:
+   :DESCRIPTION: The basic structure as seen by the exporter
+   :END:
+
+*** Document title
+    :PROPERTIES:
+    :DESCRIPTION: Where the title is taken from
+    :END:
+{{{cindex(document title\\\, markup rules)}}}
+
+{{{noindent}}} The title of the exported document is taken from the
+special line:
+
+{{{cindex(#+TITLE)}}}
+#+begin_example
+   ,#+TITLE: This is the title of the document
+#+end_example
+
+{{{noindent}}} If this line does not exist, the title is derived from
+the first non-empty, non-comment line in the buffer. If no such line
+exists, or if you have turned off exporting of the text before the
+first headline (see below), the title will be the file name without
+extension.
+
+{{{cindex(property\\\, EXPORT_TITLE)}}}
+
+If you are exporting only a subtree by marking is as the region, the
+heading of the subtree will become the title of the document. If the
+subtree has a property ~EXPORT_TITLE~, that will take precedence.
+
+*** Headings and sections
+    :PROPERTIES:
+    :DESCRIPTION: The document structure as seen by the exporter
+    :END:
+{{{cindex(headings and sections\\\, markup rules)}}}
+
+{{{vindex(org-export-headline-levels)}}}
+
+The outline structure of the document as described in [[Document
+structure]], forms the basis for defining sections of the exported
+document. However, since the outline structure is also used for (for
+example) lists of tasks, only the first three outline levels will be
+used as headings. Deeper levels will become itemized lists. You can
+change the location of this switch globally by setting the variable
+~org-export-headline-levels~, or on a per-file basis with the ~H~ option:
+
+{{{cindex(#+OPTIONS)}}}
+#+begin_example
+   ,#+OPTIONS: H:4
+#+end_example
+
+*** Table of contents
+    :PROPERTIES:
+    :DESCRIPTION: The if and where of the table of contents
+    :END:
+{{{cindex(table of contents\\\, markup rules)}}}
+
+{{{vindex(org-export-with-toc)}}}
+
+The table of contents is normally inserted directly before the first
+headline of the file. If you would like to get it to a different
+location, insert the string ~[TABLE-OF-CONTENTS]~ on a line by itself
+at the desired location. The depth of the table of contents is by
+default the same as the number of headline levels, but you can choose
+a smaller number, or turn off the table of contents entirely, by
+configuring the variable ~org-export-with-toc~, or on a per-file basis
+with the ~toc~ option:
+
+#+begin_example
+   ,#+OPTIONS: toc:2          (only to two levels in TOC)
+   ,#+OPTIONS: toc:nil        (no TOC at all)
+#+end_example
+
+*** Initial text
+    :PROPERTIES:
+    :DESCRIPTION: Text before the first heading?
+    :TITLE:    Text before the first headline
+    :END:
+{{{cindex(text before first headline\\\, markup rules)}}}
+{{{cindex(#+TEXT)}}}
+
+Org mode normally exports the text before the first headline, and even uses
+the first line as the document title.  The text will be fully marked up.  If
+you need to include literal HTML, LaTeX, or DocBook code, use the special
+constructs described below in the sections for the individual exporters.
+
+{{{vindex(org-export-skip-text-before-1st-heading)}}}
+
+Some people like to use the space before the first headline for setup
+and internal links and therefore would like to control the exported
+text before the first headline in a different way. You can do so by
+setting the variable ~org-export-skip-text-before-1st-heading~ to ~t~.
+On a per-file basis, you can get the same effect with
+{{{samp(#+OPTIONS: skip:t)}}}.
+
+{{{noindent}}}
+
+If you still want to have some text before the first headline, use the
+~#+TEXT~ construct:
+
+#+begin_example
+   ,#+OPTIONS: skip:t
+   ,#+TEXT: This text will go before the *first* headline.
+   ,#+TEXT: [TABLE-OF-CONTENTS]
+   ,#+TEXT: This goes between the table of contents and the *first* headline
+#+end_example
+
+*** Lists
+    :PROPERTIES:
+    :DESCRIPTION: Lists
+    :END:
+{{{cindex(lists\\\, markup rules)}}}
+
+Plain lists as described in [[Plain lists]], are translated to the
+backend's syntax for such lists. Most backends support unordered,
+ordered, and description lists.
+
+*** Paragraphs
+    :PROPERTIES:
+    :DESCRIPTION: Paragraphs
+    :END:
+{{{cindex(paragraphs\\\, markup rules)}}}
+
+Paragraphs are separated by at least one empty line. If you need to
+enforce a line break within a paragraph, use ~\\~ at the end
+of a line.
+
+To keep the line breaks in a region, but otherwise use normal
+formatting, you can use ~VERSE~ blocks, which can also be used to
+format poetry:
+
+{{{cindex(#+BEGIN_VERSE)}}}
+#+begin_example
+   #+BEGIN_VERSE
+    Great clouds overhead
+    Tiny black birds rise and fall
+    Snow covers Emacs
+
+        -- AlexSchroeder
+   #+END_VERSE
+#+end_example
+
+When quoting a passage from another document, it is customary to
+format this as a paragraph that is indented on both the left and the
+right margin. You can include quotations in Org mode documents like
+this:
+
+{{{cindex(#+BEGIN_QUOTE)}}}
+#+begin_example
+   #+BEGIN_QUOTE
+   Everything should be made as simple as possible,
+   but not any simpler -- Albert Einstein
+   #+END_QUOTE
+#+end_example
+
+If you would like to center some text, do it like this:
+{{{cindex(#+BEGIN_CENTER)}}}
+#+begin_example
+   #+BEGIN_CENTER
+   Everything should be made as simple as possible, \\
+   but not any simpler
+   #+END_CENTER
+#+end_example
+
+*** Footnote markup
+    :PROPERTIES:
+    :DESCRIPTION: Footnotes
+    :END:
+{{{cindex(footnotes\\\, markup rules)}}}
+{{{cindex(@file{footnote.el})}}}
+
+Footnotes defined in the way described in [[Creating footnotes]], will be exported
+by all backends.  Org allows multiple references to the same note, and
+multiple footnotes side by side.
+
+*** Emphasis and monospace
+    :PROPERTIES:
+    :DESCRIPTION: Bold, italic, etc.
+    :END:
+
+{{{cindex(underlined text\\\, markup rules)}}}
+{{{cindex(bold text\\\, markup rules)}}}
+{{{cindex(italic text\\\, markup rules)}}}
+{{{cindex(verbatim text\\\, markup rules)}}}
+{{{cindex(code text\\\, markup rules)}}}
+{{{cindex(strike-through text\\\, markup rules)}}}
+
+You can make words **bold**, //italic//, _underlined_, ~=code=~
+and ~~verbatim~~, and, if you must, {{{samp(+strike-through+)}}}.  Text
+in the code and verbatim string is not processed for Org mode specific
+syntax; it is exported verbatim.
+
+*** Horizontal rules
+    :PROPERTIES:
+    :DESCRIPTION: Make a line
+    :END:
+{{{cindex(horizontal rules\\\, markup rules)}}}
+
+A line consisting of only dashes, and at least 5 of them, will be
+exported as a horizontal line (~<hr/>~ in HTML and ~\hrule~
+in LaTeX).
+
+*** Comment lines
+    :PROPERTIES:
+    :DESCRIPTION: What will *not* be exported
+    :END:
+{{{cindex(comment lines)}}}
+{{{cindex(exporting\\\, not)}}}
+{{{cindex(#+BEGIN_COMMENT)}}}
+
+Lines starting with zero or more whitespace characters followed by one
+{{{samp(#)}}} and a whitespace are treated as comments and will never
+be exported. Also entire subtrees starting with the word
+{{{samp(COMMENT)}}} will never be exported. Finally, regions
+surrounded by {{{samp(#+BEGIN_COMMENT)}}} ...
+{{{samp(#+END_COMMENT)}}} will not be exported.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c ;)}}} ::
+  {{{kindex(C-c ;)}}}
+
+  Toggle the COMMENT keyword at the beginning of an entry.
+
+** Images and tables
+   :PROPERTIES:
+   :DESCRIPTION: Tables and images can be exported
+   :END:
+
+{{{cindex(tables\\\, markup rules)}}}
+{{{cindex(#+CAPTION)}}}
+{{{cindex(#+LABEL)}}}
+
+Both the native Org mode tables (see [[Tables]]) and tables formatted with
+the {{{file(table.el)}}} package will be exported properly. For Org
+mode tables, the lines before the first horizontal separator line will
+become table header lines. You can use the following lines somewhere
+before the table to assign a caption and a label for cross references,
+and in the text you can refer to the object with
+~\ref{tab:basic-data}~:
+
+#+begin_example
+   #+CAPTION: This is the caption for the next table (or link)
+   #+LABEL:   tab:basic-data
+      | ... | ...|
+      |-----|----|
+#+end_example
+
+Optionally, the caption can take the form:
+#+begin_example
+   #+CAPTION: [Caption for list of figures]{Caption for table (or link).}
+#+end_example
+
+{{{cindex(inlined images\\\, markup rules)}}}
+
+Some backends (HTML, LaTeX, and DocBook) allow you to directly
+include images into the exported document. Org does this, if a link to
+an image files does not have a description part, for example
+~[[./img/a.jpg]]~. If you wish to define a caption for the image and maybe
+a label for internal cross references, make sure that the link is on a
+line by itself and precede it with ~#+CAPTION~ and ~#+LABEL~ as
+follows:
+
+#+begin_example
+   #+CAPTION: This is the caption for the next figure link (or table)
+   #+LABEL:   fig:SED-HR4049
+   [[./img/a.jpg]]
+#+end_example
+
+You may also define additional attributes for the figure. As this is
+backend-specific, see the sections about the individual backends for
+more information.
+
+See [[Handling links][the discussion of image links]].
+
+** Literal examples
+   :PROPERTIES:
+   :DESCRIPTION: Source code examples with special formatting
+   :END:
+{{{cindex(literal examples\\\, markup rules)}}}
+{{{cindex(code line references\\\, markup rules)}}}
+
+You can include literal examples that should not be subjected to
+markup. Such examples will be typeset in monospace, so this is well
+suited for source code and similar examples.
+{{{cindex(#+BEGIN_EXAMPLE)}}}
+
+#+begin_example
+   ,#+BEGIN_EXAMPLE
+   Some example from a text file.
+   ,#+END_EXAMPLE
+#+end_example
+
+Note that such blocks may be /indented/ in order to align nicely with
+indented text and in particular with plain list structure (see [[Plain
+lists]]). For simplicity when using small examples, you can also start
+the example lines with a colon followed by a space. There may also be
+additional whitespace before the colon:
+
+#+begin_example
+   Here is an example
+      : Some example from a text file.
+#+end_example
+
+{{{cindex(formatting source code\\\, markup rules)}}}
+
+If the example is source code from a programming language, or any
+other text that can be marked up by font-lock in Emacs, you can ask
+for the example to look like the fontified Emacs buffer.[fn:102] This
+is done with the {{{samp(src)}}} block, where you also need to specify
+the name of the major mode that should be used to fontify the example,
+see [[Easy templates]] for shortcuts to easily insert code blocks.[fn:103]
+
+{{{cindex(#+BEGIN_SRC)}}}
+
+#+begin_example
+   #+BEGIN_SRC emacs-lisp
+     (defun org-xor (a b)
+        "Exclusive or."
+        (if a (not b) b))
+   #+END_SRC
+#+end_example
+
+Both in ~example~ and in ~src~ snippets, you can add a ~-n~ switch to
+the end of the ~BEGIN~ line, to get the lines of the example numbered.
+If you use a ~+n~ switch, the numbering from the previous numbered
+snippet will be continued in the current one. In literal examples, Org
+will interpret strings like {{{samp((ref:name))}}} as labels, and use
+them as targets for special hyperlinks like ~[[(name)]]~ (i.e., the
+reference name enclosed in single parenthesis). In HTML, hovering the
+mouse over such a link will remote-highlight the corresponding code
+line, which is kind of cool.
+
+You can also add a ~-r~ switch which /removes/ the labels from the
+source code.[fn:104] With the ~-n~ switch, links to these references
+will be labeled by the line numbers from the code listing, otherwise
+links will use the labels with no parentheses. Here is an example:
+
+#+begin_example
+   #+BEGIN_SRC emacs-lisp -n -r
+   (save-excursion                  (ref:sc)
+      (goto-char (point-min))       (ref:jump)
+   #+END_SRC
+   In line [[(sc)]] we remember the current position.  [[(jump)][Line (jump)]]
+   jumps to point-min.
+#+end_example
+
+{{{vindex(org-coderef-label-format)}}}
+
+If the syntax for the label format conflicts with the language syntax,
+use a ~-l~ switch to change the format, for example
+{{{samp(#+BEGIN_SRC pascal -n -r -l "((%s))")}}}. See also the
+variable ~org-coderef-label-format~.
+
+HTML export also allows examples to be published as text areas
+(see [[Text areas in HTML export]]).
+
+Because the ~#+BEGIN_...~ and ~#+END_...~ patterns need to be added so
+often, shortcuts are provided using the Easy Templates facility (see
+[[Easy templates]]).
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c ')}}} ::
+  {{{kindex(C-c ')}}}
+
+  Edit the source code example at point in its native mode. This works
+  by switching to a temporary buffer with the source code. You need to
+  exit by pressing {{{kbd(C-c ')}}} again.[fn:105] The edited version
+  will then replace the old version in the Org buffer. Fixed-width
+  regions (where each line starts with a colon followed by a space) will
+  be edited using ~artist-mode~ to allow creating ASCII drawings
+  easily.[fn:106] Using this command in an empty line will create a new
+  fixed-width region. 
+
+- {{{kbd(C-c l)}}} ::
+  {{{kindex(C-c l)}}}
+
+  Calling ~org-store-link~ while editing a source code example in a
+  temporary buffer created with {{{kbd(C-c ')}}} will prompt for a
+  label. Make sure that it is unique in the current buffer, and insert
+  it with the proper formatting like {{{samp((ref:label))}}} at the end
+  of the current line. Then the label is stored as a link
+  {{{samp((label))}}}, for retrieval with {{{kbd(C-c C-l)}}}.
+
+** Include files
+   :PROPERTIES:
+   :DESCRIPTION: Include additional files into a document
+   :END:
+{{{cindex(include files\\\, markup rules)}}}
+
+During export, you can include the content of another file. For
+example, to include your {{{file(.emacs)}}} file, you could use:
+
+{{{cindex(#+INCLUDE)}}}
+
+#+begin_example
+   ,#+INCLUDE: "~/.emacs" src emacs-lisp
+#+end_example
+
+{{{noindent}}} The optional second and third parameter are the markup
+(e.g., {{{samp(quote)}}}, {{{samp(example)}}}, or {{{samp(src)}}}),
+and, if the markup is {{{samp(src)}}}, the language for formatting the
+contents. The markup is optional; if it is not given, the text will be
+assumed to be in Org mode format and will be processed normally. The
+include line will also allow additional keyword parameters ~:prefix1~
+and ~:prefix~ to specify prefixes for the first line and for each
+following line, ~:minlevel~ in order to get Org mode content demoted
+to a specified level, as well as any options accepted by the selected
+markup. For example, to include a file as an item, use:
+
+#+begin_example
+   ,#+INCLUDE: "~/snippets/xx" :prefix1 "   + " :prefix "     "
+#+end_example
+
+You can also include a portion of a file by specifying a lines range
+using the ~:lines~ parameter. The line at the upper end of the range
+will not be included. The start and/or the end of the range may be
+omitted to use the obvious defaults.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- #+INCLUDE: "~/.emacs" :lines "5-10" ::  
+
+  Include lines 5 to 10, 10 excluded.
+
+- #+INCLUDE: "~/.emacs" :lines "-10"  ::  
+
+  Include lines 1 to 10, 10 excluded.
+
+- #+INCLUDE: "~/.emacs" :lines "10-"  ::  
+
+  Include lines from 10 to EOF.
+
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c ')}}}
+  {{{kindex(C-c ')}}}
+
+  Visit the include file at point.
+
+** Index entries
+   :PROPERTIES:
+   :DESCRIPTION: Making an index
+   :END:
+{{{cindex(index entries\\\, for publishing)}}}
+
+You can specify entries that will be used for generating an index
+during publishing. This is done by lines starting with ~#+INDEX~. An
+entry the contains an exclamation mark will create a sub item. See
+[[Generating an index]] for more information.
+
+#+begin_example
+   ,* Curriculum Vitae
+   #+INDEX: CV
+   #+INDEX: Application!CV
+#+end_example
+
+** Macro replacement
+   :PROPERTIES:
+   :DESCRIPTION: Use macros to create complex output
+   :END:
+{{{cindex(macro replacement\\\, during export)}}}
+{{{cindex(#+MACRO)}}}
+
+You can define text snippets with a macro:
+
+#+begin_example
+   ,#+MACRO: name   replacement text $1, $2 are arguments
+#+end_example
+
+{{{noindent}}} which can be referenced anywhere in the document (even in
+code examples) with ~{{{name(arg1,arg2)}}}~.  In addition to
+defined macros, ~{{{title}}}~, ~{{{author}}}~, etc.,
+will reference information set by the ~#+TITLE:~, ~#+AUTHOR:~, and
+similar lines.  Also, ~{{{date(FORMAT)}}}~ and
+~{{{modification-time(FORMAT)}}}~ refer to current date time
+and to the modification time of the file being exported, respectively.
+~FORMAT~ should be a format string understood by
+~format-time-string~.
+
+Macro expansion takes place during export, and some people use it to
+construct complex HTML code.
+
+** FIXME Embedded LaTeX
+   :PROPERTIES:
+   :DESCRIPTION: LaTeX can be freely used inside Org documents
+   :OPTIONAL_TITLE: Embedded Latex
+   :END:
+{{{cindex(@TeX{} interpretation)}}}
+{{{cindex(@LaTeX{} interpretation)}}}
+
+Plain ASCII is normally sufficient for almost all note taking.
+Exceptions include scientific notes, which often require mathematical
+symbols and the occasional formula. LaTeX is widely used to typeset
+scientific documents.[fn:107] Org mode supports embedding LaTeX
+code into its files, because many academics are used to writing and
+reading LaTeX source code, and because it can be readily processed
+to produce pretty output for a number of export backends.
+
+*** Special symbols
+    :PROPERTIES:
+    :DESCRIPTION: Greek letters and other symbols
+    :END:
+{{{cindex(math symbols)}}}
+{{{cindex(special symbols)}}}
+{{{cindex(@TeX{} macros)}}}
+{{{cindex(@LaTeX{} fragments, markup rules)}}}
+{{{cindex(HTML entities)}}}
+{{{cindex(@LaTeX{} entities)}}}
+
+You can use LaTeX macros to insert special symbols like
+~\alpha~ to indicate the Greek letter, or ~\to~ to
+indicate an arrow. Completion for these macros is available, just type
+~\~ and maybe a few letters, and press {{{kbdkey(M-,TAB)}}}
+to see possible completions. Unlike LaTeX code, Org mode allows
+these macros to be present without surrounding math delimiters, for
+example:
+
+#+begin_example
+   Angles are written as Greek letters \alpha, \beta and \gamma.
+#+end_example
+
+{{{vindex(org-entities)}}}
+
+During export, these symbols will be transformed into the native
+format of the exporter backend. Strings like ~\alpha~ will be exported
+as ~&alpha;~ in the HTML output, and as ~$\alpha$~ in the LaTeX
+output. Similarly, ~\nbsp~ will become ~&nbsp;~ in HTML and ~~~ in
+LaTeX. If you need such a symbol inside a word, terminate it like
+this: ~\Aacute{}stor~.
+
+A large number of entities is provided, with names taken from both
+HTML and LaTeX; see the variable ~org-entities~ for the complete
+list. ~\-~ is treated as a shy hyphen, and {{{samp(--)}}},
+{{{samp(---)}}}, and {{{samp(...)}}} are all converted into special
+commands creating hyphens of different lengths or a compact set of
+dots.
+
+If you would like to see entities displayed as UTF8 characters, use the
+following command:[fn:108]
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-x XXX)}}} ::
+  {{{kindex(C-c C-x XXX)}}}
+#+comment: Should be \
+  Toggle display of entities as UTF-8 characters. This does not change
+  the buffer content which remains plain ASCII, but it overlays the
+  UTF-8 character for display purposes only.
+
+*** FIXME Subscripts and superscripts
+    :PROPERTIES:
+    :DESCRIPTION: Simple syntax for raising/lowering text
+    :END:
+{{{cindex(subscript)}}}
+{{{cindex(superscript)}}}
+
+Just like in LaTeX, {{{samp(^)}}} and {{{samp(_)}}} are used to
+indicate super- and subscripts. Again, these can be used without
+embedding them in math-mode delimiters. To increase the readability of
+ASCII text, it is not necessary (but OK) to surround multi-character
+sub- and superscripts with curly braces. For example
+
+#+begin_example
+   The mass of 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.
+#+end_example
+
+{{{vindex(org-export-with-sub-superscripts)}}}
+
+To avoid interpretation as raised or lowered text, you can quote
+{{{kbd(^)}}} and {{{kbd(_)}}} with a backslash: ~\^~ and ~\_~. If you
+write a text where the underscore is often used in a different
+context, Org's convention to always interpret these as subscripts can
+get in your way. Configure the variable
+~org-export-with-sub-superscripts~ to globally change this convention,
+or use, on a per-file basis:
+
+#+begin_example
+   ,#+OPTIONS: ^:{}
+#+end_example
+
+{{{noindent}}} With this setting, ~a_b~ will not be interpreted as a
+subscript, but ~a_{b}~ will.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-x XXX)}}} ::
+  {{{kindex(C-c C-x XXX)}}}
+#+comment: Should be \
+  In addition to showing entities as UTF-8 characters, this command will
+  also format sub- and superscripts in a WYSIWYM way.
+
+*** LaTeX fragments
+    :PROPERTIES:
+    :DESCRIPTION: Complex formulas made easy
+    :END:
+{{{cindex(@LaTeX{} fragments)}}}
+{{{vindex(org-format-latex-header)}}}
+
+Going beyond symbols and sub- and superscripts, a full formula
+language is needed. Org mode can contain LaTeX math fragments, and
+it supports ways to process these for several export backends. When
+exporting to LaTeX, the code is obviously left as it is. When
+exporting to HTML, Org invokes the [[http://www.mathjax.org][MathJax library]] (see [[Math
+formatting in HTML export]]) to process and display the math.[fn:109]
+Finally, it can also process the mathematical expressions into images
+that can be displayed in a browser or in DocBook documents.[fn:110]
+
+LaTeX fragments don't need any special marking at all.  The following
+snippets will be identified as LaTeX source code:
+
+- Environments of any kind.[fn:111]  The only requirement is that the
+  ~\begin~ statement appears on a new line, preceded by only whitespace.
+
+- Text within the usual LaTeX math delimiters. To avoid conflicts
+  with currency specifications, single ~$~ characters are
+  only recognized as math delimiters if the enclosed text contains at
+  most two line breaks, is directly attached to the ~$~
+  characters with no whitespace in between, and if the closing
+  ~$~ is followed by whitespace, punctuation or a dash. For
+  the other delimiters, there is no such restriction, so when in
+  doubt, use ~\(...\)~ as inline math delimiters.
+
+
+{{{noindent}}} For example:
+
+#+begin_example
+   \begin{equation}                          % arbitrary environments,
+   x=\sqrt{b}                                % even tables, figures
+   \end{equation}                            % etc
+
+   If $a^2=b$ and \( b=2 \), then the solution must be
+   either $$ a=+\sqrt{2} $$ or \[ a=-\sqrt{2} \].
+#+end_example
+
+{{{noindent}}}
+{{{vindex(org-format-latex-options)}}}
+
+If you need any of the delimiter ASCII sequences for other purposes,
+you can configure the option ~org-format-latex-options~ to deselect
+the ones you do not wish to have interpreted by the LaTeX
+converter.
+
+{{{vindex(org-export-with-LaTeX-fragments)}}}
+
+LaTeX processing can be configured with the variable
+~org-export-with-LaTeX-fragments~. The default setting is ~t~ which
+means {{{file(MathJax)}}} for HTML, and no processing for DocBook,
+ASCII and LaTeX backends. You can also set this variable on a
+per-file basis using one of these lines:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- #+OPTIONS: LaTeX:t ::          
+
+  Do the right thing automatically (MathJax).
+
+- #+OPTIONS: LaTeX:dvipng ::    
+
+  Force using dvipng images.
+
+- #+OPTIONS: LaTeX:nil ::        
+
+  Do not process LaTeX fragments at all
+
+- #+OPTIONS: LaTeX:verbatim ::  
+
+  Verbatim export, for jsMath or so.
+
+*** Previewing LaTeX fragments
+    :PROPERTIES:
+    :DESCRIPTION: What will this snippet look like?
+    :END:
+{{{cindex(@LaTeX{} fragments, preview)}}}
+
+If you have {{{file(dvipng)}}} installed, LaTeX fragments can be
+processed to produce preview images of the typeset expressions:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-x C-l)}}} ::
+  {{{kindex(C-c C-x C-l)}}}
+
+  Produce a preview image of the LaTeX fragment at point and overlay
+  it over the source code. If there is no fragment at point, process all
+  fragments in the current entry (between two headlines). When called
+  with a prefix argument, process the entire subtree. When called with
+  two prefix arguments, or when the cursor is before the first headline,
+  process the entire buffer.
+
+- {{{kbd(C-c C-c)}}} ::
+  {{{kindex(C-c C-c)}}}
+
+  Remove the overlay preview images.
+
+
+{{{vindex(org-format-latex-options)}}}
+
+You can customize the variable ~org-format-latex-options~ to influence
+some aspects of the preview. In particular, the ~:scale~ (and for HTML
+export, ~:html-scale~) property can be used to adjust the size of the
+preview images.
+
+*** CDLaTeX mode
+    :PROPERTIES:
+    :DESCRIPTION: Speed up entering of formulas
+    :TITLE:    Using CDLaTeX to enter math
+    :END:
+{{{cindex(CD@LaTeX{})}}}
+
+CDLaTeX mode is a minor mode that is normally used in combination
+with a major LaTeX mode like AUCTeX in order to speed-up
+insertion of environments and math templates. Inside Org mode, you can
+make use of some of the features of CDLaTeX mode. You need to
+install {{{file(cdlatex.el)}}} and {{{file(texmathp.el)}}} (the latter
+comes also with AUCTeX) from
+[[http://www.astro.uva.nl/~dominik/Tools/cdlatex]]. Don't use CDLaTeX
+mode itself under Org mode, but use the light version
+~org-cdlatex-mode~ that comes as part of Org mode. Turn it on for the
+current buffer with ~M-x org-cdlatex-mode~, or for all Org files with
+this hook:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(add-hook 'org-mode-hook 'turn-on-org-cdlatex)
+#+end_src
+
+When this mode is enabled, the following features are present (for more
+details see the documentation of CDLaTeX mode):
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c {)}}} ::
+  {{{kindex(C-c @{)}}}
+
+  Insert an environment template.
+
+- {{{key(TAB)}}} ::
+  {{{kindex(@key{TAB})}}}
+
+  Expand a template if the cursor is inside a LaTeX fragment.[fn:112]
+  For example, {{{key(TAB)}}} will expand ~fr~ to ~\frac{}{}~ and
+  position the cursor correctly inside the first brace. Another
+  {{{key(TAB)}}} will get you into the second brace. Even outside
+  fragments, {{{key(TAB)}}} will expand environment abbreviations at the
+  beginning of a line. For example, if you write {{{samp(equ)}}} at the
+  beginning of a line and press {{{key(TAB)}}}, this abbreviation will
+  be expanded to an ~equation~ environment. To get a list of all
+  abbreviations, type {{{kbd(M-x cdlatex-command-help)}}}.
+
+- {{{kbd(_)}}} {{{kbd(^)}}} ::
+  {{{kindex(_)}}}
+  {{{kindex(^)}}}
+  {{{vindex(cdlatex-simplify-sub-super-scripts)}}}
+
+  Pressing {{{kbd(_)}}} and {{{kbd(^)}}} inside a LaTeX fragment will
+  insert these characters together with a pair of braces. If you use
+  {{{key(TAB)}}} to move out of the braces, and if the braces surround
+  only a single character or macro, they are removed again (depending on
+  the variable ~cdlatex-simplify-sub-super-scripts~).
+
+- {{{kbd(`)}}} ::
+  {{{kindex(`)}}}
+
+  Pressing the backquote followed by a character inserts math macros,
+  also outside LaTeX fragments. If you wait more than 1.5 seconds
+  after the backquote, a help window will pop up.
+
+- {{{kbd(')}}} ::
+  {{{kindex(')}}}
+
+  Pressing the single-quote followed by another character modifies the
+  symbol before point with an accent or a font. If you wait more than
+  1.5 seconds after the single-quote, a help window will pop up.
+  Character modification will work only inside LaTeX fragments;
+  outside the quote is normal.
+
+* FIXME Exporting
+  :PROPERTIES:
+  :DESCRIPTION: Sharing and publishing notes
+  :END:
+{{{cindex(exporting)}}}
+
+Org mode documents can be exported into a variety of other formats.
+For printing and sharing of notes, ASCII export produces a readable
+and simple version of an Org file. HTML export allows you to publish a
+notes file on the web, while the XOXO format provides a solid base for
+exchange with a broad range of other applications. LaTeX export
+lets you use Org mode and its structured editing functions to easily
+create LaTeX files. DocBook export makes it possible to convert Org
+files to many other formats using DocBook tools. OpenDocument Text
+(ODT) export allows seamless collaboration across organizational
+boundaries. For project management you can create gantt and resource
+charts by using TaskJuggler export. To incorporate entries with
+associated times like deadlines or appointments into a desktop
+calendar program like iCal, Org mode can also produce extracts in the
+iCalendar format. Currently, Org mode only supports export, not import
+of these different formats.
+
+Org supports export of selected regions when ~transient-mark-mode~ is
+enabled (default in Emacs 23).
+
+** Selective export
+   :PROPERTIES:
+   :DESCRIPTION: Using tags to select and exclude trees
+   :END:
+{{{cindex(export\\\, selective by tags or TODO keyword)}}}
+{{{vindex(org-export-select-tags)}}}
+{{{vindex(org-export-exclude-tags)}}}
+{{{cindex(org-export-with-tasks)}}}
+
+You may use tags to select the parts of a document that should be exported,
+or to exclude parts from export.  This behavior is governed by two variables:
+~org-export-select-tags~ and ~org-export-exclude-tags~,
+respectively defaulting to ~:export:~ and ~:noexport:~.
+
+1. Org first checks if any of the /select/ tags is present in the
+   buffer. If yes, all trees that do not carry one of these tags will
+   be excluded. If a selected tree is a subtree, the heading hierarchy
+   above it will also be selected for export, but not the text below
+   those headings.
+
+2. If none of the select tags is found, the whole buffer will be
+   selected for export.
+
+3. Finally, all subtrees that are marked by any of the /exclude/ tags
+   will be removed from the export buffer.
+
+
+The variable ~org-export-with-tasks~ can be configured to select which
+kind of tasks should be included for export.  See the docstring of the
+variable for more information.
+
+** FIXME Export options
+   :PROPERTIES:
+   :DESCRIPTION: Per-file export settings
+   :END:
+{{{cindex(options\\\, for export)}}}
+{{{cindex(completion\\\, of option keywords)}}}
+
+The exporter recognizes special lines in the buffer which provide
+additional information. These lines may be put anywhere in the file.
+The whole set of lines can be inserted into the buffer with 
+{{{kbd(C-c C-e t)}}}. For individual lines, a good way to make sure the keyword
+is correct is to type {{{samp(#+)}}} and then use {{{kbdkey(M-,TAB)}}}
+completion (see [[Completion]]). For a summary of other in-buffer settings
+not specifically related to export, see [[In-buffer settings]]. In
+particular, note that you can place commonly-used (export) options in
+a separate file which can be included using ~#+SETUPFILE~.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-e t)}}}, ~org-insert-export-options-template~ ::
+  {{{kindex(C-c C-e t)}}}
+
+  Insert template with export options, see example below.
+
+
+{{{cindex(#+TITLE)}}}
+{{{cindex(#+AUTHOR)}}}
+{{{cindex(#+DATE)}}}
+{{{cindex(#+EMAIL)}}}
+{{{cindex(#+DESCRIPTION)}}}
+{{{cindex(#+KEYWORDS)}}}
+{{{cindex(#+LANGUAGE)}}}
+{{{cindex(#+TEXT)}}}
+{{{cindex(#+OPTIONS)}}}
+{{{cindex(#+BIND)}}}
+{{{cindex(#+LINK_UP)}}}
+{{{cindex(#+LINK_HOME)}}}
+{{{cindex(#+EXPORT_SELECT_TAGS)}}}
+{{{cindex(#+EXPORT_EXCLUDE_TAGS)}}}
+{{{cindex(#+XSLT)}}}
+{{{cindex(#+LaTeX_HEADER)}}}
+{{{vindex(user-full-name)}}}
+{{{vindex(user-mail-address)}}}
+{{{vindex(org-export-default-language)}}}
+{{{vindex(org-export-date-timestamp-format)}}}
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- #+TITLE: ::      
+
+  The title to be shown (default is the buffer name).
+
+- #+AUTHOR: ::     
+
+  The author (default taken from ~user-full-name~).
+
+- #+DATE: ::       
+
+  A date, an Org timestamp, or a format string for
+  ~format-time-string~.[fn:113]
+
+- #+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 ...
+
+- #+BIND: ::       
+
+  Lisp-var lisp-val, e.g., org-export-latex-low-levels itemize. You need
+  to confirm using these, or configure ~org-export-allow-BIND~.
+
+- #+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}~.
+
+- #+EXPORT_SELECT_TAGS: ::  
+
+  Tags that select a tree for export.
+
+- #+EXPORT_EXCLUDE_TAGS: :: 
+
+  Tags that exclude a tree from export.
+
+- #+XSLT: ::       
+
+  The XSLT stylesheet used by DocBook exporter to generate FO file.
+
+
+
+{{{noindent}}} The ~#+OPTIONS~ line is a compact form to specify
+export settings.[fn:114] Here you can:
+
+{{{cindex(headline levels)}}}
+{{{cindex(section-numbers)}}}
+{{{cindex(table of contents)}}}
+{{{cindex(line-break preservation)}}}
+{{{cindex(quoted HTML tags)}}}
+{{{cindex(fixed-width sections)}}}
+{{{cindex(tables)}}}
+{{{cindex(@TeX{}-like syntax for sub- and superscripts)}}}
+{{{cindex(footnotes)}}}
+{{{cindex(special strings)}}}
+{{{cindex(emphasized text)}}}
+{{{cindex(@TeX{} macros)}}}
+{{{cindex(@LaTeX{} fragments)}}}
+{{{cindex(author info\\\, in export)}}}
+{{{cindex(time info\\\, in export)}}}
+{{{vindex(org-export-plist-vars)}}}
+{{{vindex(org-export-author-info)}}}
+{{{vindex(org-export-creator-info)}}}
+{{{vindex(org-export-email-info)}}}
+{{{vindex(org-export-time-stamp-file)}}}
+
+#+attr_texinfo: :table-type "table" :indic "@code"
+- H: ::        
+
+  Set the number of headline levels for export.
+
+- num: ::      
+
+  Turn on/off section-numbers.
+
+- toc: ::      
+
+  Turn on/off table of contents, or set level limit (integer).
+
+- \n: ::       
+
+  Turn on/off line-break-preservation (DOES NOT WORK).
+
+- @: ::        
+
+  Turn on/off quoted HTML tags.
+
+- :: ::        
+
+  Turn on/off fixed-width sections.
+
+- |: ::        
+
+  Turn on/off tables,
+
+- ^: ::        
+
+  Turn on/off TeX-like syntax for sub- and superscripts. If you write
+  "^:{}", ~a_{b}~ will be interpreted, but the simple ~a_b~ will be left
+  as it is.
+
+- : ::        
+
+  Turn on/off conversion of special strings.
+
+- f: ::         
+
+  Turn on/off footnotes like this: ~[1]~.
+
+- todo: ::      
+
+  Turn on/off inclusion of TODO keywords into exported text.
+
+- tasks: ::     
+
+  Turn on/off inclusion of tasks (TODO items), can be nil to remove all
+  tasks, ~todo~ to remove DONE tasks, or list of keywords to keep.
+
+- pri: ::       
+
+  Turn on/off priority cookies.
+
+- tags: ::     
+
+  Turn on/off inclusion of tags, may also be ~not-in-toc~.
+
+- <: ::         
+
+  Turn on/off inclusion of any time/date stamps like DEADLINES.
+
+- *: ::        
+
+  Turn on/off emphasized text (bold, italic, underlined).
+
+- TeX: ::      
+
+  Turn on/off simple TeX macros in plain text.
+
+- LaTeX: ::     
+
+  Configure export of LaTeX fragments.  Default ~auto~.
+
+- skip: ::      
+
+  Turn on/off skipping the text before the first heading.
+
+- author: ::    
+
+  Turn on/off inclusion of author name/email into exported file.
+
+- email: ::     
+
+  Turn on/off inclusion of author email into exported file.
+
+- creator: ::  
+
+  Turn on/off inclusion of creator info into exported file.
+
+- timestamp: :: 
+
+  Turn on/off inclusion creation time into exported file.
+
+- d: ::        
+
+  Turn on/off inclusion of drawers, or list drawers to include.
+
+
+{{{noindent}}} These options take effect in both the HTML and LaTeX
+export, except for ~TeX~ and ~LaTeX~ options, which are respectively
+~t~ and ~nil~ for the LaTeX export.
+
+The default values for these and many other options are given by a set
+of variables. For a list of such variables, the corresponding OPTIONS
+keys and also the publishing keys (see [[Project alist]]), see the
+constant ~org-export-plist-vars~.
+
+When exporting only a single subtree by selecting it with
+{{{kbd(C-c @)}}} before calling an export command, the subtree can
+overrule some of the file's export settings with properties
+~EXPORT_FILE_NAME~, ~EXPORT_TITLE~, ~EXPORT_TEXT~, ~EXPORT_AUTHOR~,
+~EXPORT_DATE~, and ~EXPORT_OPTIONS~.
+
+** The export dispatcher
+   :PROPERTIES:
+   :DESCRIPTION: How to access exporter commands
+   :END:
+{{{cindex(dispatcher\\\, for export commands)}}}
+
+All export commands can be reached using the export dispatcher, which
+is a prefix key that prompts for an additional key specifying the
+command. Normally the entire file is exported, but if there is an
+active region that contains one outline tree, the first heading is
+used as document title and the subtrees are exported.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-e)}}}, ~org-export~ ::
+  {{{kindex(C-c C-e)}}}
+  {{{vindex(org-export-run-in-background)}}}
+
+  Dispatcher for export and publishing commands. Displays a help-window
+  listing the additional key(s) needed to launch an export or publishing
+  command. The prefix arg is passed through to the exporter. A double
+  prefix {{{kbd(C-u C-u)}}} causes most commands to be executed in the
+  background, in a separate Emacs process.[fn:115]
+
+- {{{kbd(C-c C-e v)}}}, ~org-export-visible~ ::
+  {{{kindex(C-c C-e v)}}}
+
+  Like {{{kbd(C-c C-e)}}}, but only export the text that is currently visible
+  (i.e., not hidden by outline visibility).
+
+- {{{kbd(C-u C-u C-c C-e)}}}, ~org-export~ ::
+  {{{kindex(C-u C-u C-c C-e)}}}
+  {{{vindex(org-export-run-in-background)}}}
+
+  Call the exporter, but reverse the setting of
+  ~org-export-run-in-background~, i.e., request background processing if
+  not set, or force processing in the current Emacs process if set.
+
+** ASCII/Latin-1/UTF-8 export
+   :PROPERTIES:
+   :DESCRIPTION: Exporting to flat files with encoding
+   :END:
+{{{cindex(ASCII export)}}}
+{{{cindex(Latin-1 export)}}}
+{{{cindex(UTF-8 export)}}}
+
+ASCII export produces a simple and very readable version of an Org
+mode file, containing only plain ASCII. Latin-1 and UTF-8 export
+augment the file with special characters and symbols available in
+these encodings.
+
+{{{cindex(region\\\, active)}}}
+{{{cindex(active region)}}}
+{{{cindex(transient-mark-mode)}}}
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-e a)}}}, ~org-export-as-ascii~ ::
+  {{{kindex(C-c C-e a)}}}
+  {{{cindex(property\\\, EXPORT_FILE_NAME)}}}
+
+  Export as an ASCII file. For an Org file, {{{file(myfile.org)}}}, the
+  ASCII file will be {{{file(myfile.txt)}}}. The file will be
+  overwritten without warning. If there is an active region, only the
+  region will be exported.[fn:116] If the selected region is a single
+  tree, the tree head will become the document title.[fn:117] If the
+  tree head entry has or inherits an ~EXPORT_FILE_NAME~ property, that
+  name will be used for the export.
+
+- {{{kbd(C-c C-e A)}}}, ~org-export-as-ascii-to-buffer~ ::
+  {{{kindex(C-c C-e A)}}}
+
+  Export to a temporary buffer.  Do not create a file.
+
+- {{{kbd(C-c C-e n)}}}, ~org-export-as-latin1~ ::
+  {{{kindex(C-c C-e n)}}}
+
+  Like {{{kbd(C-c C-e a)}}}, but use Latin-1 encoding.
+
+- {{{kbd(C-c C-e N)}}}, ~org-export-as-latin1-to-buffer~ ::
+  {{{kindex(C-c C-e N)}}}
+
+  Like {{{kbd(C-c C-e A)}}}, but use Latin-1 encoding.
+
+- {{{kbd(C-c C-e u)}}}, ~org-export-as-utf8~ ::
+  {{{kindex(C-c C-e u)}}}
+
+  Like {{{kbd(C-c C-e a)}}}, but use UTF-8 encoding.
+
+- {{{kbd(C-c C-e U)}}}, ~org-export-as-utf8-to-buffer~ ::
+  {{{kindex(C-c C-e U)}}}
+
+  Like {{{kbd(C-c C-e A)}}}, but use UTF-8 encoding.
+
+
+- {{{kbd(C-c C-e v a/n/u)}}} ::
+  {{{kindex(C-c C-e v a)}}}
+  {{{kindex(C-c C-e v n)}}}
+  {{{kindex(C-c C-e v u)}}}
+
+  Export only the visible part of the document.
+
+
+{{{cindex(headline levels\\\, for exporting)}}}
+
+In the exported version, the first 3 outline levels will become
+headlines, defining a general document structure. Additional levels
+will be exported as itemized lists. If you want that transition to
+occur at a different level, specify it with a prefix argument, e.g.:
+
+#+begin_example
+   C-1 C-c C-e a
+#+end_example
+
+{{{noindent}}} This setting creates only top level headlines and
+exports the rest as items. When headlines are converted to items, the
+indentation of the text following the headline is changed to fit
+nicely under the item. This is done with the assumption that the first
+body line indicates the base indentation of the body text. Any
+indentation larger than this is adjusted to preserve the layout
+relative to the first line. Should there be lines with less
+indentation than the first one, these are left alone.
+
+{{{vindex(org-export-ascii-links-to-notes)}}}
+
+Links will be exported in a footnote-like style, with the descriptive
+part in the text and the link in a note before the next heading. See
+the variable ~org-export-ascii-links-to-notes~ for details and other
+options.
+
+** HTML export
+   :PROPERTIES:
+   :DESCRIPTION: Exporting to HTML
+   :END:
+{{{cindex(HTML export)}}}
+{{{cindex(Gruber\\\, John)}}}
+
+Org mode contains a HTML (XHTML 1.0 strict) exporter with extensive
+HTML formatting, in ways similar to John Gruber's /markdown/ language,
+but with additional support for tables.
+
+*** HTML export commands
+    :PROPERTIES:
+    :DESCRIPTION: How to invoke HTML export
+    :END:
+{{{cindex(region\\\, active)}}}
+{{{cindex(active region)}}}
+{{{cindex(transient-mark-mode)}}}
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-e h)}}}, ~org-export-as-html~ ::
+  {{{kindex(C-c C-e h)}}}
+  {{{cindex(property\\\, EXPORT_FILE_NAME)}}}
+
+  Export as an HTML file. For an Org file {{{file(myfile.org)}}}, the
+  HTML file will be {{{file(myfile.html)}}}. The file will be
+  overwritten without warning. If there is an active region, only the
+  active region will be exported.[fn:118] If the selected region is a
+  single tree, the tree head will become the document title.[fn:119] If
+  the tree head entry has, or inherits, an ~EXPORT_FILE_NAME~ property,
+  that name will be used for the export.
+
+- {{{kbd(C-c C-e b)}}}, ~org-export-as-html-and-open~ ::
+  {{{kindex(C-c C-e b)}}}
+
+  Export as a HTML file and immediately open it with a browser.
+
+- {{{kbd(C-c C-e H)}}}, ~org-export-as-html-to-buffer~ ::
+  {{{kindex(C-c C-e H)}}}
+
+  Export to a temporary buffer.  Do not create a file.
+
+- {{{kbd(C-c C-e R)}}}, ~org-export-region-as-html~ ::
+  {{{kindex(C-c C-e R)}}}
+
+  Export the active region to a temporary buffer. With a prefix
+  argument, do not produce the file header and footer, but just the
+  plain HTML section for the region. This is good for cut-and-paste
+  operations.
+
+- {{{kbd(C-c C-e v h/b/H/R)}}} ::
+  {{{kindex(C-c C-e v h)}}}
+  {{{kindex(C-c C-e v b)}}}
+  {{{kindex(C-c C-e v H)}}}
+  {{{kindex(C-c C-e v R)}}}
+
+  Export only the visible part of the document.
+
+- {{{kbd(M-x org-export-region-as-html)}}} ::
+
+  Convert the region to HTML under the assumption that it was in Org
+  mode syntax before. This is a global command that can be invoked in
+  any buffer.
+
+- {{{kbd(M-x org-replace-region-by-HTML)}}} ::
+
+  Replace the active region (assumed to be in Org mode syntax) by HTML
+  code.
+
+
+{{{cindex(headline levels\\\, for exporting)}}}
+
+In the exported version, the first three outline levels will become
+headlines, defining a general document structure. Additional levels
+will be exported as itemized lists. If you want that transition to
+occur at a different level, specify it with a numeric prefix argument,
+e.g.:
+
+#+begin_example
+   C-2 C-c C-e b
+#+end_example
+
+{{{noindent}}} This setting creates two levels of headings and exports
+the rest as list items.
+
+*** HTML preamble and postamble
+    :PROPERTIES:
+    :DESCRIPTION: How to insert a preamble and postamble
+    :END:
+{{{vindex(org-export-html-preamble)}}}
+{{{vindex(org-export-html-postamble)}}}
+{{{vindex(org-export-html-preamble-format)}}}
+{{{vindex(org-export-html-postamble-format)}}}
+{{{vindex(org-export-html-validation-link)}}}
+{{{vindex(org-export-author-info)}}}
+{{{vindex(org-export-email-info)}}}
+{{{vindex(org-export-creator-info)}}}
+{{{vindex(org-export-time-stamp-file)}}}
+
+The HTML exporter lets you define a preamble and a postamble.
+
+The default value for ~org-export-html-preamble~ is ~t~, which means
+that the preamble is inserted depending on the relevant format string
+in ~org-export-html-preamble-format~.
+
+Setting ~org-export-html-preamble~ to a string will override the default
+format string.  Setting it to a function, will insert the output of the
+function, which must be a string; such a function takes no argument but you
+can check against the value of ~opt-plist~, which contains the list of
+publishing properties for the current file.  Setting to ~nil~ will not
+insert any preamble.
+
+The default value for ~org-export-html-postamble~ is
+{{{samp('auto)}}}, which means that the HTML exporter will look for
+the value of ~org-export-author-info~, ~org-export-email-info~,
+~org-export-creator-info~ and ~org-export-time-stamp-file~,
+~org-export-html-validation-link~ and build the postamble from these
+values. Setting ~org-export-html-postamble~ to ~t~ will insert the
+postamble from the relevant format string found in
+~org-export-html-postamble-format~. Setting it to ~nil~ will not
+insert any postamble.
+
+*** Quoting HTML tags
+    :PROPERTIES:
+    :DESCRIPTION: Using direct HTML in Org mode
+    :END:
+
+Plain ~<~ and {{{samp(>)}}} are always transformed to
+{{{samp(&lt;)}}} and {{{samp(&gt;)}}} in HTML export. If you want to
+include simple HTML tags which should be interpreted as such, mark
+them with {{{samp(@)}}} as in {{{samp(@<b>bold text@</b>)}}}. Note
+that this really works only for simple tags. For more extensive HTML
+that should be copied verbatim to the exported file use either ~#+HTML~:
+
+{{{cindex(#+HTML)}}}
+{{{cindex(#+BEGIN_HTML)}}}
+#+begin_example
+   ,#+HTML: Literal HTML code for export
+#+end_example
+
+{{{noindent}}} or an HTML block:
+{{{cindex(#+BEGIN_HTML)}}}
+
+#+begin_example
+   #+BEGIN_HTML
+   All lines between these markers are exported literally
+   #+END_HTML
+#+end_example
+
+*** Links in HTML export
+    :PROPERTIES:
+    :DESCRIPTION: How links will be interpreted and formatted
+    :END:
+{{{cindex(links\\\, in HTML export)}}}
+{{{cindex(internal links\\\, in HTML export)}}}
+{{{cindex(external links\\\, in HTML export)}}}
+
+Internal links (see [[Internal links]]) will continue to work in HTML.
+This includes automatic links created by radio targets (see [[Radio
+targets]]). Links to external files will still work if the target file
+is on the same /relative/ path as the published Org file. Links to
+other {{{file(.org)}}} files will be translated into HTML links under
+the assumption that a HTML version also exists of the linked file, at
+the same relative path. ~id:~ links can then be used to jump
+to specific entries across files. For information related to linking
+files while publishing them to a publishing directory see [[Publishing
+links]].
+
+If you want to specify attributes for links, you can do so using a
+special ~#+ATTR_HTML~ line to define attributes that will be added to
+the ~<a>~ or ~<img>~ tags. Here is an example that sets ~title~ and
+~style~ attributes for a link:
+
+{{{cindex(#+ATTR_HTML)}}}
+#+begin_example
+   ,#+ATTR_HTML: title="The Org mode homepage" style="color:red;"
+   ,[[http://orgmode.org]]
+#+end_example
+
+*** Tables in HTML export
+    :PROPERTIES:
+    :DESCRIPTION: How to modify the formatting of tables
+    :END:
+{{{cindex(tables\\\, in HTML)}}}
+{{{vindex(org-export-html-table-tag)}}}
+
+Org mode tables are exported to HTML using the table tag defined in
+~org-export-html-table-tag~. The default setting makes tables without
+cell borders and frame. If you would like to change this for
+individual tables, place something like the following before the
+table:
+
+{{{cindex(#+CAPTION)}}}
+{{{cindex(#+ATTR_HTML)}}}
+#+begin_example
+   ,#+CAPTION: This is a table with lines around and between cells
+   ,#+ATTR_HTML: border="2" rules="all" frame="border"
+#+end_example
+
+*** Images in HTML export
+    :PROPERTIES:
+    :DESCRIPTION: How to insert figures into HTML output
+    :END:
+{{{cindex(images\\\, inline in HTML)}}}
+{{{cindex(inlining images in HTML)}}}
+{{{vindex(org-export-html-inline-images)}}}
+
+HTML export can inline images given as links in the Org file, and it
+can make an image the clickable part of a link. By default, images are
+inlined if a link does not have a description.[fn:120] So
+{{{samp([[file:myimg.jpg]])}}} will be inlined, while {{{samp([[file:myimg.jpg][the image]])}}} will just produce a link {{{samp(the image)}}} that points
+to the image. If the description part itself is a ~file:~ link or a
+~http:~ URL pointing to an image, this image will be inlined and
+activated so that clicking on the image will activate the link. For
+example, to include a thumbnail that will link to a high resolution
+version of the image, you could use:
+
+#+begin_example
+   [[file:highres.jpg][file:thumb.jpg]]
+#+end_example
+
+If you need to add attributes to an inlined image, use a ~#+ATTR_HTML~.
+In the example below we specify the ~alt~ and ~title~ attributes to
+support text viewers and accessibility, and align it to the right.
+
+{{{cindex(#+CAPTION)}}}
+{{{cindex(#+ATTR_HTML)}}}
+#+begin_example
+   ,#+CAPTION: A black cat stalking a spider
+   ,#+ATTR_HTML: alt="cat/spider image" title="Action!" align="right"
+   [[./img/a.jpg]]
+#+end_example
+
+{{{noindent}}} You could use ~http~ addresses just as well.
+
+*** Math formatting in HTML export
+    :PROPERTIES:
+    :DESCRIPTION: Beautiful math also on the web
+    :END:
+{{{cindex(MathJax)}}}
+{{{cindex(dvipng)}}}
+
+LaTeX math snippets (see [[LaTeX fragments]]) can be displayed in two
+different ways on HTML pages. The default is to use the [[http://www.mathjax.org][MathJax system]]
+which should work out of the box with Org mode installation because
+~http://orgmode.org~ serves {{{file(MathJax)}}} for Org mode users for
+small applications and for testing purposes.[fn:121] To configure
+{{{file(MathJax)}}}, use the variable
+~org-export-html-mathjax-options~ or insert something like the
+following into the buffer:
+
+#+begin_example
+   ,#+MATHJAX: align:"left" mathml:t path:"/MathJax/MathJax.js"
+#+end_example
+
+{{{noindent}}} See the docstring of the variable
+~org-export-html-mathjax-options~ for the meaning of the parameters in
+this line.
+
+If you prefer, you can also request that LaTeX fragments are
+processed into small images that will be inserted into the browser
+page. Before the availability of MathJax, this was the default method
+for Org files. This method requires that the {{{file(dvipng)}}}
+program is available on your system. You can still get this processing
+with the following option:
+
+#+begin_example
+   ,#+OPTIONS: LaTeX:dvipng
+#+end_example
+
+*** Text areas in HTML export
+    :PROPERTIES:
+    :DESCRIPTION: An alternate way to show an example
+    :END:
+{{{cindex(text areas\\\, in HTML)}}}
+
+An alternative way to publish literal code examples in HTML is to use
+text areas, where the example can even be edited before pasting it
+into an application. It is triggered by a ~-t~ switch at an ~example~
+or ~src~ block. Using this switch disables any options for syntax and
+label highlighting, and line numbering, which may be present. You may
+also use ~-h~ and ~-w~ switches to specify the height and width of the
+text area, which default to the number of lines in the example, and
+80, respectively. For example
+
+#+begin_example
+   ,#+BEGIN_EXAMPLE -t -w 40
+     (defun org-xor (a b)
+        "Exclusive or."
+        (if a (not b) b))
+   ,#+END_EXAMPLE
+#+end_example
+
+*** CSS support
+    :PROPERTIES:
+    :DESCRIPTION: Changing the appearance of the output
+    :END:
+{{{cindex(CSS\\\, for HTML export)}}}
+{{{cindex(HTML export\\\, CSS)}}}
+{{{vindex(org-export-html-todo-kwd-class-prefix)}}}
+{{{vindex(org-export-html-tag-class-prefix)}}}
+
+You can also give style information for the exported file. The HTML
+exporter assigns the following special CSS classes to appropriate
+parts of the document---your style specifications may change these, in
+addition to any of the standard classes like for headlines, tables,
+etc.[fn:122]
+
+#+attr_texinfo: :table-type "table" :indic "@code"
+- p.author ::           author information, including email
+- p.date ::             publishing date
+- p.creator ::           creator info, about org mode version
+- .title ::             document title
+- .todo ::              TODO keywords, all not-done states
+- .done ::              the DONE keywords, all states that count as done
+- .WAITING ::           each TODO keyword also uses a class named after itself
+- .timestamp ::         timestamp
+- .timestamp-kwd ::     keyword associated with a timestamp, like SCHEDULED
+- .timestamp-wrapper ::  span around keyword plus timestamp
+- .tag ::               tag in a headline
+- ._HOME ::             each tag uses itself as a class, "@" replaced by "_"
+- .target ::            target for links
+- .linenr ::            the line number in a code example
+- .code-highlighted ::  for highlighting referenced code lines
+- div.outline-N ::      div for outline level N (headline plus text))
+- div.outline-text-N :: extra div for text at outline level N
+- .section-number-N ::  section number in headlines, different for each level
+- div.figure ::         how to format an inlined image
+- pre.src ::            formatted source code
+- pre.example ::         normal example
+- p.verse ::            verse paragraph
+- div.footnotes ::      footnote section headline
+- p.footnote ::         footnote definition paragraph, containing a footnote
+- .footref ::           a footnote reference number (always a <sup>)
+- .footnum ::           footnote number in footnote definition (always <sup>)
+
+
+{{{vindex(org-export-html-style-default)}}}
+{{{vindex(org-export-html-style-include-default)}}}
+{{{vindex(org-export-html-style)}}}
+{{{vindex(org-export-html-extra)}}}
+{{{vindex(org-export-html-style-default)}}}
+
+Each exported file contains a compact default style that defines these
+classes in a basic way.[fn:123]  You may overwrite these
+settings, or add to them by using the variables ~org-export-html-style~
+(for Org-wide settings) and ~org-export-html-style-extra~ (for more
+fine-grained settings, like file-local settings).  To set the latter variable
+individually for each file, you can use a ~#+STYLE:~ line:
+
+{{{cindex(#+STYLE)}}}
+#+begin_example
+   ,#+STYLE: <link rel="stylesheet" type="text/css" href="stylesheet.css" />
+#+end_example
+
+{{{noindent}}} For longer style definitions, you can use several such
+lines. You could also directly write a ~<style>~ ~</style>~ section in
+this way, without referring to an external file.
+
+In order to add styles to a subtree, use the ~:HTML_CONTAINER_CLASS:~
+property to assign a class to the tree. In order to specify CSS styles
+for a particular headline, you can use the id specified in a
+~:CUSTOM_ID:~ property.
+
+#+comment:  FIXME: More about header and footer styles
+#+comment:  FIXME: Talk about links and targets.
+
+*** JavaScript support
+    :PROPERTIES:
+    :DESCRIPTION: Info and folding in a web browser
+    :END:
+{{{cindex(Rose\\\, Sebastian)}}}
+
+Sebastian Rose has written a JavaScript program especially designed to
+enhance the web viewing experience of HTML files created with Org.  This
+program allows you to view large files in two different ways.  The first one
+is an /Info/-like mode where each section is displayed separately and
+navigation can be done with the {{{kbd(n)}}} and {{{kbd(p)}}} keys (and some other keys
+as well, press {{{kbd(?)}}} for an overview of the available keys).  The second
+view type is a /folding/ view much like Org provides inside Emacs.  The
+script is available at [[http://orgmode.org/org-info.js]] and you can find
+the documentation for it at [[http://orgmode.org/worg/code/org-info-js/]].
+We host the script at our site, but if you use it a lot, you might
+not want to be dependent on ~orgmode.org~ and prefer to install a local
+copy on your own web server.
+
+To use the script, you need to make sure that the
+{{{file(org-jsinfo.el)}}} module gets loaded. It should be loaded by
+default, but you can try {{{ksksksk(M-x customize-variable,RET,org-modules,RET)}}} 
+to convince yourself that this is indeed the case. All it then takes to make use of the program
+is adding a single line to the Org file:
+
+{{{cindex(#+INFOJS_OPT)}}}
+#+begin_example
+   ,#+INFOJS_OPT: view:info toc:nil
+#+end_example
+
+{{{noindent}}} If this line is found, the HTML header will
+automatically contain the code needed to invoke the script. Using the
+line above, you can set the following viewing options:
+
+#+attr_texinfo: :table-type "table" :indic "@code"
+- path: ::   
+
+  The path to the script.  The default is to grab the script from
+  [[http://orgmode.org/org-info.js]], but you might want to have
+  a local copy and use a path like {{{samp(../scripts/org-info.js)}}}.
+
+- view: ::   
+
+  Initial view when the website is first shown.  Possible values are:
+  
+  - info ::     Info-like interface with one section per page.
+  - overview :: Folding interface, initially showing only top-level.
+  - content ::  Folding interface, starting with all headlines visible.
+  - showall ::  Folding interface, all headlines and text visible.
+
+- sdepth: :: 
+
+  Maximum headline level that will still become an independent section
+  for info and folding modes. The default is taken from
+  ~org-export-headline-levels~ (= the ~H~ switch in ~#+OPTIONS~). If
+  this is smaller than in ~org-export-headline-levels~, each
+  info/folding section can still contain child headlines.
+
+- toc: ::    
+
+  Should the table of contents /initially/ be visible? Even when ~nil~,
+  you can always get to the "toc" with {{{kbd(i)}}}.
+
+- tdepth: :: 
+
+  The depth of the table of contents. The defaults are taken from the
+  variables ~org-export-headline-levels~ and ~org-export-with-toc~.
+
+- ftoc: ::   
+
+  Does the CSS of the page specify a fixed position for the "toc"? If
+  yes, the toc will never be displayed as a section.
+
+- ltoc: ::   
+
+  Should there be short contents (children) in each section? Make this
+  ~above~ if the section should be above initial text.
+
+- mouse: ::  
+
+  Headings are highlighted when the mouse is over them. Should be
+  {{{samp(underline)}}} (default) or a background color like
+  {{{samp(#cccccc)}}}.
+
+- buttons: :: 
+
+  Should view-toggle buttons be everywhere? When ~nil~ (the default),
+  only one such button will be present.
+
+
+{{{vindex(org-infojs-options)}}}
+{{{vindex(org-export-html-use-infojs)}}}
+
+{{{noindent}}} You can choose default values for these options by
+customizing the variable ~org-infojs-options~. If you always want to
+apply the script to your pages, configure the variable
+~org-export-html-use-infojs~.
+
+** LaTeX and PDF export
+   :PROPERTIES:
+   :DESCRIPTION: Exporting to LaTeX and processing to PDF
+   :END:
+{{{cindex(@LaTeX{} export)}}}
+{{{cindex(PDF export)}}}
+{{{cindex(Guerry\\\, Bastien)}}}
+
+Org mode contains a LaTeX exporter written by Bastien Guerry. With
+further processing, this backend is also used to produce PDF
+output.[fn:124] Since the LaTeX output uses {{{file(hyperref)}}} to
+implement links and cross references, the PDF output file will be
+fully linked. Beware of the fact that your ~org~ file has to be
+properly structured in order to be correctly exported: respect the
+hierarchy of sections.
+
+*** LaTeX/PDF export commands
+    :PROPERTIES:
+    :DESCRIPTION: Invoking export to LaTeX/PDF
+    :END:
+{{{cindex(region\\\, active)}}}
+{{{cindex(active region)}}}
+{{{cindex(transient-mark-mode)}}}
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-e l)}}}, ~org-export-as-latex~ ::
+  {{{kindex(C-c C-e l)}}}
+  {{{cindex(property EXPORT_FILE_NAME)}}}
+
+  Export as a LaTeX file. For an Org file {{{file(myfile.org)}}}, the
+  LaTeX file will be {{{file(myfile.tex)}}}. The file will be
+  overwritten without warning. If there is an active region, only the
+  active region will be exported.[fn:125] If the selected region is a
+  single tree, the tree head will become the document title.[fn:126] If
+  the tree head entry has or inherits an ~EXPORT_FILE_NAME~ property,
+  that name will be used for the export.
+
+- {{{kbd(C-c C-e L)}}}, ~org-export-as-latex-to-buffer~ ::
+  {{{kindex(C-c C-e L)}}}
+
+  Export to a temporary buffer.  Do not create a file.
+
+- {{{kbd(C-c C-e v l/L)}}} ::
+
+  Export only the visible part of the document.
+
+- {{{kbd(M-x org-export-region-as-latex)}}} ::
+
+  Convert the region to LaTeX under the assumption that it was in Org
+  mode syntax before. This is a global command that can be invoked in
+  any buffer.
+
+- {{{kbd(M-x org-replace-region-by-latex)}}} ::
+
+  Replace the active region (assumed to be in Org mode syntax) by
+  LaTeX code.
+
+- {{{kbd(C-c C-e p)}}}, ~org-export-as-pdf~ ::
+  {{{kindex(C-c C-e p)}}}
+
+  Export as LaTeX and then process to PDF.
+
+- {{{kbd(C-c C-e d)}}}, ~org-export-as-pdf-and-open~ ::
+  {{{kindex(C-c C-e d)}}}
+
+  Export as LaTeX and then process to PDF, then open the resulting
+  PDF file.
+
+
+{{{cindex(headline levels\\\, for exporting)}}}
+{{{vindex(org-latex-low-levels)}}}
+
+In the exported version, the first 3 outline levels will become
+headlines, defining a general document structure. Additional levels
+will be exported as description lists. The exporter can ignore them or
+convert them to a custom string depending on ~org-latex-low-levels~.
+
+If you want that transition to occur at a different level, specify it
+with a numeric prefix argument, e.g.:
+
+#+begin_example
+   C-2 C-c C-e l
+#+end_example
+
+{{{noindent}}} The example setting creates two levels of headings and
+exports the rest as list items.
+
+*** Header and sectioning
+    :PROPERTIES:
+    :DESCRIPTION: Setting up the export file structure
+    :TITLE:    Header and sectioning structure
+    :END:
+{{{cindex(@LaTeX{} class)}}}
+{{{cindex(@LaTeX{} sectioning structure)}}}
+{{{cindex(@LaTeX{} header)}}}
+{{{cindex(header\\\, for @LaTeX{} files)}}}
+{{{cindex(sectioning structure\\\, for @LaTeX{} export)}}}
+
+By default, the LaTeX output uses the class ~article~.
+
+{{{vindex(org-export-latex-default-class)}}}
+{{{vindex(org-export-latex-classes)}}}
+{{{vindex(org-export-latex-default-packages-alist)}}}
+{{{vindex(org-export-latex-packages-alist)}}}
+{{{cindex(#+LaTeX_HEADER)}}}
+{{{cindex(#+LaTeX_CLASS)}}}
+{{{cindex(#+LaTeX_CLASS_OPTIONS)}}}
+{{{cindex(property\\\, LaTeX_CLASS)}}}
+{{{cindex(property\\\, LaTeX_CLASS_OPTIONS)}}}
+
+You can change this globally by setting a different value for
+~org-export-latex-default-class~ or locally by adding an option like
+~#+LaTeX_CLASS: myclass~ in your file, or with a ~:LaTeX_CLASS:~
+property that applies when exporting a region containing only this
+(sub)tree. The class must be listed in ~org-export-latex-classes~.
+This variable defines a header template for each class, and allows you
+to define the sectioning structure for each class.[fn:127] You can
+also define your own classes there. ~#+LaTeX_CLASS_OPTIONS~ or a
+~:LaTeX_CLASS_OPTIONS:~ property can specify the options for the
+~\documentclass~ macro. The options to documentclass have to be
+provided, as expected by LaTeX, within square brackets. You can
+also use ~#+LaTeX_HEADER: \usepackage{xyz}~ to add lines to the
+header. See the docstring of ~org-export-latex-classes~ for more
+information. An example is shown below.
+
+#+begin_example
+   ,#+LaTeX_CLASS: article
+   ,#+LaTeX_CLASS_OPTIONS: [a4paper]
+   ,#+LaTeX_HEADER: \usepackage{xyz}
+
+   ,* Headline 1
+     some text
+#+end_example
+
+*** Quoting LaTeX code
+    :PROPERTIES:
+    :DESCRIPTION: Incorporating literal LaTeX code
+    :END:
+
+Embedded LaTeX as described in [[Embedded LaTeX]], will be correctly
+inserted into the LaTeX file. This includes simple macros like
+~\ref{LABEL}~ to create a cross reference to a figure. Furthermore,
+you can add special code that should only be present in LaTeX export
+with the following constructs:
+
+{{{cindex(#+LaTeX)}}}
+{{{cindex(#+BEGIN_LaTeX)}}}
+#+begin_example
+   ,#+LaTeX: Literal LaTeX code for export
+#+end_example
+
+{{{noindent}}} or
+
+{{{cindex(#+BEGIN_LaTeX)}}}
+
+#+begin_example
+   ,#+BEGIN_LaTeX
+   All lines between these markers are exported literally
+   ,#+END_LaTeX
+#+end_example
+
+*** Tables in LaTeX export
+    :PROPERTIES:
+    :DESCRIPTION: Options for exporting tables to LaTeX
+    :END:
+{{{cindex(tables\\\, in @LaTeX{} export)}}}
+
+For LaTeX export of a table, you can specify a label, a caption and
+placement options (see [[Images and tables]]).  You can also use the
+~ATTR_LaTeX~ line to request a ~longtable~ environment for the
+table, so that it may span several pages, or to change the default table
+environment from ~table~ to ~table*~ or to change the default inner
+tabular environment to ~tabularx~ or ~tabulary~.  Finally, you can
+set the alignment string, and (with ~tabularx~ or ~tabulary~) the
+width:
+
+{{{cindex(#+CAPTION)}}}
+{{{cindex(#+LABEL)}}}
+{{{cindex(#+ATTR_LaTeX)}}}
+#+begin_example
+   ,#+CAPTION: A long table
+   ,#+LABEL: tbl:long
+   ,#+ATTR_LaTeX: longtable align=l|lp@{3cm@}r|l
+   | ..... | ..... |
+   | ..... | ..... |
+#+end_example
+
+or to specify a multicolumn table with ~tabulary~:
+
+{{{cindex(#+CAPTION)}}}
+{{{cindex(#+LABEL)}}}
+{{{cindex(#+ATTR_LaTeX)}}}
+#+begin_example
+   ,#+CAPTION: A wide table with tabulary
+   ,#+LABEL: tbl:wide
+   ,#+ATTR_LaTeX: table* tabulary width=\textwidth
+   | ..... | ..... |
+   | ..... | ..... |
+#+end_example
+
+*** Images in LaTeX export
+    :PROPERTIES:
+    :DESCRIPTION: How to insert figures into LaTeX output
+    :END:
+{{{cindex(images\\\, inline in @LaTeX{})}}}
+{{{cindex(inlining images in @LaTeX{})}}}
+
+Images that are linked to without a description part in the link, like
+{{{samp([[file:img.jpg]])}}} or {{{samp([[./img.jpg]])}}} will be inserted
+into the PDF output file resulting from LaTeX processing. Org will
+use an ~\includegraphics~ macro to insert the image. If you have
+specified a caption and/or a label as described in [[Images and tables]],
+the figure will be wrapped into a ~figure~ environment and thus become
+a floating element. You can use an ~#+ATTR_LaTeX:~ line to specify
+various other options. You can ask org to export an image as a float
+without specifying a label or a caption by using the keyword ~float~
+in this line. Various optional arguments to the ~\includegraphics~
+macro can also be specified in this fashion. To modify the placement
+option of the floating environment, add something like
+{{{samp(placement=[h!])}}} to the attributes. It is to be noted this
+option can be used with tables as well.[fn:128]
+
+If you would like to let text flow around the image, add the word
+{{{samp(wrap)}}} to the ~#+ATTR_LaTeX:~ line, which will make the
+figure occupy the left half of the page. To fine-tune, the ~placement~
+field will be the set of additional arguments needed by the
+~wrapfigure~ environment. Note that if you change the size of the
+image, you need to use compatible settings for ~\includegraphics~ and
+~wrapfigure~.
+
+{{{cindex(#+CAPTION)}}}
+{{{cindex(#+LABEL)}}}
+{{{cindex(#+ATTR_LaTeX)}}}
+#+begin_example
+   ,#+CAPTION:    The black-body emission of the disk around HR 4049
+   ,#+LABEL:      fig:SED-HR4049
+   ,#+ATTR_LaTeX: width=5cm,angle=90
+   [[./img/sed-hr4049.pdf]]
+
+   ,#+ATTR_LaTeX: width=0.38\textwidth wrap placement=@{r@}@{0.4\textwidth@}
+   [[./img/hst.png]]
+#+end_example
+
+If you wish to include an image which spans multiple columns in a page, you
+can use the keyword ~multicolumn~ in the ~#+ATTR_LaTeX~ line.  This
+will export the image wrapped in a ~figure*~ environment.
+
+If you need references to a label created in this way, write
+~\ref{fig:SED-HR4049}~ just like in LaTeX.
+
+*** Beamer class export
+    :PROPERTIES:
+    :DESCRIPTION: Turning the file into a presentation
+    :END:
+
+The LaTeX class {{{file(beamer)}}} allows production of high
+quality presentations using LaTeX and pdf processing. Org mode has
+special support for turning an Org mode file or tree into a
+{{{file(beamer)}}} presentation.
+
+When the LaTeX class for the current buffer (as set with ~#+LaTeX_CLASS:
+beamer~) or subtree (set with a ~LaTeX_CLASS~ property) is
+~beamer~, a special export mode will turn the file or tree into a beamer
+presentation.  Any tree with not-too-deep level nesting should in principle be
+exportable as a beamer presentation.  By default, the top-level entries (or
+the first level below the selected subtree heading) will be turned into
+frames, and the outline structure below this level will become itemize lists.
+You can also configure the variable ~org-beamer-frame-level~ to a
+different level---then the hierarchy above frames will produce the sectioning
+structure of the presentation.
+
+A template for useful in-buffer settings or properties can be inserted
+into the buffer with 
+{{{kbd(M-x org-insert-beamer-options-template)}}}. Among other things, this will
+install a column view format which is very handy for editing special
+properties used by beamer.
+
+You can influence the structure of the presentation using the following
+properties:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~BEAMER_env~ ::
+
+  The environment that should be used to format this entry. Valid
+  environments are defined in the constant
+  ~org-beamer-environments-default~, and you can define more in
+  ~org-beamer-environments-extra~. If this property is set, the entry
+  will also get a ~:B_environment:~ tag to make this visible. This tag
+  has no semantic meaning, it is only a visual aid.
+
+- ~BEAMER_envargs~ ::
+
+  The beamer-special arguments that should be used for the environment,
+  like ~[t]~ or ~[<+->]~ of ~<2-3>~. If the ~BEAMER_col~ property is
+  also set, something like ~C[t]~ can be added here as well to set an
+  options argument for the implied ~columns~ environment. ~c[t]~ or
+  ~c<2->~ will set an options for the implied ~column~ environment.
+
+- ~BEAMER_col~ ::
+
+  The width of a column that should start with this entry. If this
+  property is set, the entry will also get a ~:BMCOL:~ property to make
+  this visible. Also this tag is only a visual aid. When this is a plain
+  number, it will be interpreted as a fraction of ~\textwidth~.
+  Otherwise it will be assumed that you have specified the units, like
+  {{{samp(3cm)}}}. The first such property in a frame will start a
+  ~columns~ environment to surround the columns. This environment is
+  closed when an entry has a ~BEAMER_col~ property with value 0 or 1, or
+  automatically at the end of the frame.
+
+- ~BEAMER_extra~ ::
+
+  Additional commands that should be inserted after the environment has
+  been opened. For example, when creating a frame, this can be used to
+  specify transitions.
+
+
+Frames will automatically receive a ~fragile~ option if they contain
+source code that uses the verbatim environment.  Special {{{file(beamer)}}}
+specific code can be inserted using ~#+BEAMER:~ and
+~#+BEGIN_BEAMER~ ... ~#+END_BEAMER~ constructs, similar to other export
+backends, but with the difference that ~#+LaTeX:~ stuff will be included
+in the presentation as well.
+
+Outline nodes with ~BEAMER_env~ property value {{{samp(note)}}} or
+{{{samp(noteNH)}}} will be formatted as beamer notes, i,e, they will be wrapped
+into ~\note{...}~.  The former will include the heading as part of the
+note text, the latter will ignore the heading of that node.  To simplify note
+generation, it is actually enough to mark the note with a /tag/ (either
+~:B_note:~ or ~:B_noteNH:~) instead of creating the
+~BEAMER_env~ property.
+
+You can turn on a special minor mode ~org-beamer-mode~ for editing
+support with the following line:
+
+#+begin_example
+   ,#+STARTUP: beamer
+#+end_example
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-b)}}}, ~org-beamer-select-environment~ ::
+  {{{kindex(C-c C-b)}}}
+
+  In ~org-beamer-mode~, this key offers fast selection of a beamer
+  environment or the ~BEAMER_col~ property.
+
+
+Column view provides a great way to set the environment of a node and
+other important parameters. Make sure you are using a COLUMN format
+that is geared toward this special purpose. The command 
+{{{kbd(M-x org-insert-beamer-options-template)}}} defines such a format.
+
+Here is a simple example Org document that is intended for beamer export.
+
+#+begin_example
+   ,#+LaTeX_CLASS: beamer
+   ,#+TITLE: Example Presentation
+   ,#+AUTHOR: Carsten Dominik
+   ,#+LaTeX_CLASS_OPTIONS: [presentation]
+   ,#+BEAMER_FRAME_LEVEL: 2
+   ,#+BEAMER_HEADER_EXTRA: \usetheme@{Madrid@}\usecolortheme@{default@}
+   ,#+COLUMNS: %35ITEM %10BEAMER_env(Env) %10BEAMER_envargs(Args) %4BEAMER_col(Col) %8BEAMER_extra(Ex)
+
+   ,* This is the first structural section
+
+   ,** Frame 1 \\ with a subtitle
+   ,*** Thanks to Eric Fraga                                      :BMCOL:B_block:
+       :PROPERTIES:
+       :BEAMER_env: block
+       :BEAMER_envargs: C[t]
+       :BEAMER_col: 0.5
+       :END:
+       for the first viable beamer setup in Org
+   ,*** Thanks to everyone else                                   :BMCOL:B_block:
+       :PROPERTIES:
+       :BEAMER_col: 0.5
+       :BEAMER_env: block
+       :BEAMER_envargs: <2->
+       :END:
+       for contributing to the discussion
+   ,**** This will be formatted as a beamer note                  :B_note:
+   ,** Frame 2 \\ where we will not use columns
+   ,*** Request                                                   :B_block:
+       Please test this stuff!
+       :PROPERTIES:
+       :BEAMER_env: block
+       :END:
+#+end_example
+
+For more information, see the documentation on Worg.
+
+** DocBook export
+   :PROPERTIES:
+   :DESCRIPTION: Exporting to DocBook
+   :END:
+{{{cindex(DocBook export)}}}
+{{{cindex(PDF export)}}}
+{{{cindex(Cui\\\, Baoqiu)}}}
+
+Org contains a DocBook exporter written by Baoqiu Cui.  Once an Org file is
+exported to DocBook format, it can be further processed to produce other
+formats, including PDF, HTML, man pages, etc., using many available DocBook
+tools and stylesheets.
+
+Currently DocBook exporter only supports DocBook V5.0.
+
+*** DocBook export commands
+    :PROPERTIES:
+    :DESCRIPTION: How to invoke DocBook export
+    :END:
+{{{cindex(region\\\, active)}}}
+{{{cindex(active region)}}}
+{{{cindex(transient-mark-mode)}}}
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-e D)}}}, ~org-export-as-docbook~ ::
+  {{{kindex(C-c C-e D)}}}
+  {{{cindex(property EXPORT_FILE_NAME)}}}
+
+  Export as a DocBook file. For an Org file, {{{file(myfile.org)}}}, the
+  DocBook XML file will be {{{file(myfile.xml)}}}. The file will be
+  overwritten without warning. If there is an active region, only the
+  region will be exported.[fn:129] If the selected region is a single
+  tree, the tree head will become the document title.[fn:130] If the
+  tree head entry has, or inherits, an ~EXPORT_FILE_NAME~ property, that
+  name will be used for the export.
+
+- {{{kbd(C-c C-e V)}}}, ~org-export-as-docbook-pdf-and-open~ ::
+  {{{kindex(C-c C-e V)}}}
+
+  Export as a DocBook file, process to PDF, then open the resulting PDF
+  file.
+
+  {{{vindex(org-export-docbook-xslt-proc-command)}}}
+  {{{vindex(org-export-docbook-xsl-fo-proc-command)}}}
+
+  Note that, in order to produce PDF output based on an exported DocBook
+  file, you need to have XSLT processor and XSL-FO processor software
+  installed on your system. Check variables
+  ~org-export-docbook-xslt-proc-command~ and
+  ~org-export-docbook-xsl-fo-proc-command~.
+
+  {{{vindex(org-export-docbook-xslt-stylesheet)}}}
+
+  The stylesheet argument ~%s~ in variable
+  ~org-export-docbook-xslt-proc-command~ is replaced by the value of
+  variable ~org-export-docbook-xslt-stylesheet~, which needs to be set by
+  the user.  You can also overrule this global setting on a per-file basis by
+  adding an in-buffer setting ~#+XSLT:~ to the Org file.
+
+- {{{kbd(C-c C-e v D)}}} ::
+  {{{kindex(C-c C-e v D)}}}
+
+  Export only the visible part of the document.
+
+*** Quoting DocBook code
+    :PROPERTIES:
+    :DESCRIPTION: Incorporating DocBook code in Org files
+    :END:
+You can quote DocBook code in Org files and copy it verbatim into exported
+DocBook file with the following constructs:
+
+{{{cindex(#+DOCBOOK)}}}
+{{{cindex(#+BEGIN_DOCBOOK)}}}
+#+begin_example
+   ,#+DOCBOOK: Literal DocBook code for export
+#+end_example
+
+{{{noindent}}} or
+{{{cindex(#+BEGIN_DOCBOOK)}}}
+
+#+begin_example
+   ,#+BEGIN_DOCBOOK
+   All lines between these markers are exported by DocBook exporter
+   literally.
+   ,#+END_DOCBOOK
+#+end_example
+
+For example, you can use the following lines to include a DocBook warning
+admonition.  As to what this warning says, you should pay attention to the
+document context when quoting DocBook code in Org files.  You may make
+exported DocBook XML files invalid by not quoting DocBook code correctly.
+
+#+begin_example
+   ,#+BEGIN_DOCBOOK
+   <warning>
+     <para>You should know what you are doing when quoting DocBook XML code
+     in your Org file.  Invalid DocBook XML may be generated by
+     DocBook exporter if you are not careful!</para>
+   </warning>
+   ,#+END_DOCBOOK
+#+end_example
+
+*** Recursive sections
+    :PROPERTIES:
+    :DESCRIPTION: Recursive sections in DocBook
+    :END:
+{{{cindex(DocBook recursive sections)}}}
+
+DocBook exporter exports Org files as articles using the ~article~
+element in DocBook. Recursive sections, i.e., ~section~ elements, are
+used in exported articles. Top level headlines in Org files are
+exported as top level sections, and lower level headlines are exported
+as nested sections. The entire structure of Org files will be exported
+completely, no matter how many nested levels of headlines there are.
+
+Using recursive sections makes it easy to port and reuse exported
+DocBook code in other DocBook document types like ~book~ or ~set~.
+
+*** Tables in DocBook export
+    :PROPERTIES:
+    :DESCRIPTION: Tables are exported as HTML tables
+    :END:
+{{{cindex(tables\\\, in DocBook export)}}}
+
+Tables in Org files are exported as HTML tables, which have been
+supported since DocBook V4.3.
+
+If a table does not have a caption, an informal table is generated
+using the ~informaltable~ element; otherwise, a formal table will be
+generated using the ~table~ element.
+
+*** Images in DocBook export
+    :PROPERTIES:
+    :DESCRIPTION: How to insert figures into DocBook output
+    :END:
+{{{cindex(images\\\, inline in DocBook)}}}
+{{{cindex(inlining images in DocBook)}}}
+
+Images that are linked to without a description part in the link, like
+{{{samp([[file:img.jpg]])}}} or {{{samp([[./img.jpg]])}}}, will be exported to
+DocBook using ~mediaobject~ elements. Each ~mediaobject~ element
+contains an ~imageobject~ that wraps an ~imagedata~ element. If you
+have specified a caption for an image as described in [[Images and
+tables]], a ~caption~ element will be added in ~mediaobject~. If a label
+is also specified, it will be exported as an ~xml:id~ attribute of the
+~mediaobject~ element.
+
+{{{vindex(org-export-docbook-default-image-attributes)}}}
+
+Image attributes supported by the ~imagedata~ element, like ~align~ or
+~width~, can be specified in two ways: you can either customize
+variable ~org-export-docbook-default-image-attributes~ or use the
+~#+ATTR_DOCBOOK:~ line. Attributes specified in variable
+~org-export-docbook-default-image-attributes~ are applied to all
+inline images in the Org file to be exported (unless they are
+overridden by image attributes specified in ~#+ATTR_DOCBOOK:~ lines).
+
+The ~#+ATTR_DOCBOOK:~ line can be used to specify additional image
+attributes or override default image attributes for individual images.
+If the same attribute appears in both the ~#+ATTR_DOCBOOK:~ line and
+variable ~org-export-docbook-default-image-attributes~, the former
+takes precedence. Here is an example about how image attributes can be
+set:
+
+{{{cindex(#+CAPTION)}}}
+{{{cindex(#+LABEL)}}}
+{{{cindex(#+ATTR_DOCBOOK)}}}
+#+begin_example
+   ,#+CAPTION:    The logo of Org mode
+   ,#+LABEL:      unicorn-svg
+   ,#+ATTR_DOCBOOK: scalefit="1" width="100%" depth="100%"
+   [[./img/org-mode-unicorn.svg]]
+#+end_example
+
+{{{vindex(org-export-docbook-inline-image-extensions)}}}
+
+By default, DocBook exporter recognizes the following image file
+types: {{{file(jpeg)}}}, {{{file(jpg)}}}, {{{file(png)}}},
+{{{file(gif)}}}, and {{{file(svg)}}}. You can customize variable
+~org-export-docbook-inline-image-extensions~ to add more types to this
+list as long as DocBook supports them.
+
+*** Special characters
+    :PROPERTIES:
+    :DESCRIPTION: How to handle special characters
+    :TITLE:    Special characters in DocBook export
+    :END:
+{{{vindex(org-export-docbook-doctype)}}}
+{{{vindex(org-entities)}}}
+
+Special characters that are written in TeX-like syntax, such as
+~\alpha~, ~\Gamma~, and ~\Zeta~, are supported by DocBook exporter.
+These characters are rewritten to XML entities, like ~&alpha;~,
+~&Gamma;~, and ~&Zeta;~, based on the list saved in variable
+~org-entities~. As long as the generated DocBook file includes the
+corresponding entities, these special characters are recognized.
+
+You can customize variable ~org-export-docbook-doctype~ to include the
+entities you need. For example, you can set variable
+~org-export-docbook-doctype~ to the following value to recognize all
+special characters included in XHTML entities:
+
+#+begin_example
+   "<!DOCTYPE article [
+   <!ENTITY % xhtml1-symbol PUBLIC
+   \"-//W3C//ENTITIES Symbol for HTML//EN//XML\"
+   \"http://www.w3.org/2003/entities/2007/xhtml1-symbol.ent\"
+   >
+   %xhtml1-symbol;
+   ]>
+   "
+#+end_example
+
+** OpenDocument Text export
+   :PROPERTIES:
+   :DESCRIPTION: Exporting to OpenDocument Text
+   :END:
+{{{cindex(K\\\, Jambunathan)}}}
+{{{cindex(ODT)}}}
+{{{cindex(OpenDocument)}}}
+{{{cindex(export\\\, OpenDocument)}}}
+{{{cindex(LibreOffice)}}}
+{{{cindex(org-odt.el)}}}
+{{{cindex(org-modules)}}}
+
+Org Mode supports export to OpenDocument Text (ODT) format using the
+{{{file(org-odt.el)}}} module.[fn:131] Documents created by this
+exporter use the {{{cite(OpenDocument-v1.2 specification)}}} and
+are compatible with LibreOffice 3.4.[fn:132]
+
+*** Pre-requisites for ODT export
+    :PROPERTIES:
+    :DESCRIPTION: What packages ODT exporter relies on
+    :END:
+{{{cindex(zip)}}}
+
+The ODT exporter relies on the {{{file(zip)}}} program to create the
+final output. Check the availability of this program before proceeding
+further.
+
+*** ODT export commands
+    :PROPERTIES:
+    :DESCRIPTION: How to invoke ODT export
+    :OPTIONAL_TITLE: Exporting to ODT
+    :END:
+<<x-export-to-odt>>
+
+{{{cindex(region\\\, active)}}}
+{{{cindex(active region)}}}
+{{{cindex(transient-mark-mode)}}}
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-e o)}}}, ~org-export-as-odt~ ::
+  {{{kindex(C-c C-e o)}}}
+  {{{cindex(property EXPORT_FILE_NAME)}}}
+
+  Export as OpenDocument Text file.
+
+  {{{vindex(org-export-odt-preferred-output-format)}}}
+
+  If ~org-export-odt-preferred-output-format~ is specified,
+  automatically convert the exported file to that format. See
+  [[Automatically exporting to other formats]].
+
+  For an Org file {{{file(myfile.org)}}}, the ODT file will be
+  {{{file(myfile.odt)}}}. The file will be overwritten without warning.
+  If there is an active region, only the region will be
+  exported.[fn:133] If the selected region is a single tree, the tree
+  head will become the document title.[fn:134] If the tree head entry
+  has, or inherits, an ~EXPORT_FILE_NAME~ property, that name will be
+  used for the export.
+
+- {{{kbd(C-c C-e O)}}}, ~org-export-as-odt-and-open~ ::
+  {{{kindex(C-c C-e O)}}}
+
+  Export as an OpenDocument Text file and open the resulting file.
+
+  {{{vindex(org-export-odt-preferred-output-format)}}}
+
+  If ~org-export-odt-preferred-output-format~ is specified, open the
+  converted file instead.  See [[x-export-to-other-formats][Automatically exporting to other formats]].
+
+*** Extending ODT export
+    :PROPERTIES:
+    :DESCRIPTION: How to produce ~doc~, ~pdf~ files
+    :END:
+
+The ODT exporter can interface with a variety of document converters
+and supports popular converters out of the box. As a result, you can
+use it to export to formats like {{{samp(doc)}}} or convert a document
+from one format (say {{{samp(csv)}}}) to another format (say
+{{{samp(ods)}}} or {{{samp(xls)}}}).
+
+{{{cindex(@file{unoconv})}}}
+{{{cindex(LibreOffice)}}}
+
+If you have a working installation of LibreOffice, a document
+converter is pre-configured for you and you can use it right away. If
+you would like to use {{{file(unoconv)}}} as your preferred converter,
+customize the variable ~org-export-odt-convert-process~ to point to
+~unoconv~. You can also use your own favorite converter or tweak the
+default settings of the {{{file(LibreOffice)}}} and
+{{{samp(unoconv)}}} converters. See [[Configuring a document converter]].
+
+**** Automatically exporting to other formats
+     :PROPERTIES:
+     :DESCRIPTION: Automatic conversion to doc, docx, etc.
+     :END:
+<<x-export-to-other-formats>>
+
+{{{vindex(org-export-odt-preferred-output-format)}}} 
+
+Very often, you will find yourself exporting to ODT format, only to
+immediately save the exported document to other formats like
+{{{samp(doc)}}}, {{{samp(docx)}}}, {{{samp(rtf)}}}, {{{samp(pdf)}}}
+etc. In such cases, you can specify your preferred output format by
+customizing the variable ~org-export-odt-preferred-output-format~.
+This way, the export commands (see [[x-export-to-odt][Exporting to ODT]])
+can be extended to export to a format that is of immediate interest to
+you.
+
+**** Converting between document formats
+     :PROPERTIES:
+     :DESCRIPTION: Interacting with configured converters
+     :END:
+# <<x-convert-to-other-formats>>
+
+There are many document converters in the wild that support
+conversion to and from various file formats, including, but not
+limited to the ODT format. LibreOffice converter, mentioned above, is
+one such converter. Once a converter is configured, you can interact
+with it using the following command.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(M-x org-export-odt-convert)}}} ::
+  {{{vindex(org-export-odt-convert)}}}
+
+  Convert an existing document from one format to another. With a prefix
+  argument, also open the newly produced file.
+
+*** Applying custom styles
+    :PROPERTIES:
+    :DESCRIPTION: How to apply custom styles to the output
+    :END:
+{{{cindex(styles\\\, custom)}}}
+{{{cindex(template\\\, custom)}}}
+
+The ODT exporter ships with a set of OpenDocument styles 
+(see [[Working with OpenDocument style files]]) that ensure a well-formatted output.
+These factory styles, however, may not cater to your specific tastes.
+To customize the output, you can either modify the above styles files
+directly, or generate the required styles using an application like
+LibreOffice. The latter method is suitable for expert and non-expert
+users alike, and is described here.
+
+Custom styles can be applied in three easy steps:
+
+1. Create a sample {{{file(example.org)}}} file with the below
+   settings and export it to ODT format.
+
+   #+begin_example
+      ,#+OPTIONS: H:10 num:t
+   #+end_example
+
+2. Open the above {{{file(example.odt)}}} using LibreOffice. Use the
+   {{{file(Stylist)}}} to locate the target styles---these typically
+   have the {{{samp(Org)}}} prefix---and modify those to your taste.
+   Save the modified file either as an OpenDocument Text
+   ({{{file(.odt)}}}) or OpenDocument Template ({{{file(.ott)}}})
+   file.
+
+3. Customize the variable ~org-export-odt-styles-file~ and point it to
+   the newly created file. For additional configuration options see
+   [[x-overriding-factory-styles][Overriding factory styles]].
+
+   {{{cindex(#+ODT_STYLES_FILE)}}}
+   {{{vindex(org-export-odt-styles-file)}}}
+
+   If you would like to choose a style on a per-file basis, you can use
+   the ~#+ODT_STYLES_FILE~ option. A typical setting will look like
+   one of these two examples:
+
+   #+begin_example
+      ,#+ODT_STYLES_FILE: "/path/to/example.ott"
+   #+end_example
+
+   or
+
+   #+begin_example
+      ,#+ODT_STYLES_FILE: ("/path/to/file.ott" ("styles.xml" "image/hdr.png"))
+   #+end_example
+
+Although you can use third-party styles and templates for customizing
+your output, this will produce the desired output only if the template
+provides all style names that the {{{samp(ODT)}}} exporter relies
+upon. Unless this condition is met, the output is going to be less
+than satisfactory. It is highly recommended that you only work with
+templates that are directly derived from the factory settings.
+
+*** Links in ODT export
+    :PROPERTIES:
+    :DESCRIPTION: How links will be interpreted and formatted
+    :END:
+{{{cindex(tables\\\, in DocBook export)}}}
+
+ODT exporter creates native cross-references for internal links. It
+creates Internet-style links for all other links.
+
+A link with no description and destined to a regular (un-itemized)
+outline heading is replaced with a cross-reference and section number
+of the heading.
+
+A ~\ref{label}~-style reference to an image, table etc. is replaced
+with a cross-reference and sequence number of the labeled entity. See
+[[Labels and captions in ODT export]].
+
+*** Tables in ODT export
+    :PROPERTIES:
+    :DESCRIPTION: How tables are exported
+    :END:
+
+{{{cindex(tables\\\, in DocBook export)}}}
+
+Export of native Org mode tables (see [[Tables]]) and simple
+{{{file(table.el)}}} tables is supported. However, export of complex
+{{{file(table.el)}}} tables---tables that have column or row
+spans---is not supported. Such tables are stripped from the exported
+document.
+
+By default, a table is exported with top and bottom frames and with
+rules separating row and column groups (see [[Column groups]]).
+Furthermore, all tables are typeset to occupy the same width. If the
+table specifies alignment and relative width for its columns (see
+[[Column width and alignment]]) then these are honored on export.[fn:135]
+
+{{{cindex(#+ATTR_ODT)}}}
+
+You can control the width of the table by specifying ~:rel-width~
+property using an ~#+ATTR_ODT~ line.
+
+For example, consider the following table which makes use of all the
+rules mentioned above.
+
+#+begin_example
+   #+ATTR_ODT: :rel-width 50
+   | Area/Month    |   Jan |   Feb |   Mar |   Sum |
+   |---------------+-------+-------+-------+-------|
+   | /             |     < |       |       |     < |
+   | <l13>         |  <r5> |  <r5> |  <r5> |  <r6> |
+   | North America |     1 |    21 |   926 |   948 |
+   | Middle East   |     6 |    75 |   844 |   925 |
+   | Asia Pacific  |     9 |    27 |   790 |   826 |
+   |---------------+-------+-------+-------+-------|
+   | Sum           |    16 |   123 |  2560 |  2699 |
+#+end_example
+
+On export, the table will occupy 50% of text area. The columns will be
+sized (roughly) in the ratio of 13:5:5:5:6. The first column will be
+left-aligned and rest of the columns will be right-aligned. There will
+be vertical rules after separating the header and last columns from
+other columns. There will be horizontal rules separating the header
+and last rows from other rows.
+
+If you are not satisfied with the above formatting options, you can
+create custom table styles and associate them with a table using the
+~#+ATTR_ODT~ line. See [[Customizing tables in ODT export]].
+
+*** Images in ODT export
+    :PROPERTIES:
+    :DESCRIPTION: How to insert images
+    :END:
+{{{cindex(images\\\, embedding in ODT)}}}
+{{{cindex(embedding images in ODT)}}}
+
+You can embed images within the exported document by providing a link to the
+desired image file with no link description.  For example, to embed
+{{{samp(img.png)}}} do either of the following:
+
+#+begin_example
+   [[file:img.png]]
+#+end_example
+
+#+begin_example
+   [[./img.png]]
+#+end_example
+
+You can create clickable images by providing a link whose description
+is a link to an image file. For example, to embed an image
+{{{file(org-mode-unicorn.png)}}}, which when clicked jumps to
+[[http://Orgmode.org]] website, do the following:
+
+#+begin_example
+   [[http://orgmode.org][./org-mode-unicorn.png]]
+#+end_example
+
+{{{cindex(#+ATTR_ODT)}}}
+
+You can control the size and scale of the embedded images using the
+~#+ATTR_ODT~ attribute.
+
+{{{cindex(identify\\\, ImageMagick)}}}
+{{{vindex(org-export-odt-pixels-per-inch)}}}
+
+The exporter specifies the desired size of the image in the final
+document in units of centimeters. In order to scale the embedded
+images, the exporter queries for pixel dimensions of the images using
+either ImageMagick's {{{file(identify)}}} program, or Emacs'
+`create-image' and `image-size' APIs.[fn:136] The pixel dimensions are
+subsequently converted to centimeters using
+~org-export-odt-pixels-per-inch~. The default value of this variable
+is set to ~display-pixels-per-inch~. You can tweak this variable to
+achieve the best results.
+
+The examples below illustrate the various possibilities.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- Explicitly size the image ::
+
+  To embed {{{file(img.png)}}} as a 10 cm x 10 cm image, do the
+  following:
+
+  #+begin_example
+     #+ATTR_ODT: :width 10 :height 10
+     [[./img.png]]
+  #+end_example
+
+- Scale the image ::
+
+  To embed {{{file(img.png)}}} at half its size, do the following:
+
+  #+begin_example
+     #+ATTR_ODT: :scale 0.5
+     [[./img.png]]
+  #+end_example
+
+- Scale the image to a specific width ::
+
+  To embed {{{file(img.png)}}} with a width of 10 cm while retaining the
+  original height:width ratio, do the following:
+
+  #+begin_example
+     #+ATTR_ODT: :width 10
+     [[./img.png]]
+  #+end_example
+
+- Scale the image to a specific height ::
+
+  To embed {{{file(img.png)}}} with a height of 10 cm while retaining
+  the original height:width ratio, do the following:
+
+  #+begin_example
+     #+ATTR_ODT: :height 10
+     [[./img.png]]
+  #+end_example
+
+{{{cindex(#+ATTR_ODT)}}}
+
+You can control the manner in which an image is anchored by setting
+the ~:anchor~ property of it's ~#+ATTR_ODT~ line. You can specify one
+of the the following three values for the ~:anchor~ property -
+{{{samp("as-char")}}}, {{{samp("paragraph")}}} and {{{samp("page")}}}.
+
+To create an image that is anchored to a page, do the following:
+
+#+begin_example
+   #+ATTR_ODT: :anchor "page"
+   [[./img.png]]
+#+end_example
+
+*** Math formatting in ODT export
+    :PROPERTIES:
+    :DESCRIPTION: How LaTeX fragments are formatted
+    :END:
+
+The ODT exporter has special support for handling math.
+
+**** Working with LaTeX math snippets
+     :PROPERTIES:
+     :DESCRIPTION: How to embed LaTeX math fragments
+     :END:
+
+LaTeX math snippets (see [[LaTeX fragments]]) can be embedded in the ODT
+document in one of the following ways:
+
+{{{cindex(MathML)}}}
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- MathML ::
+
+  This option is activated on a per-file basis with the following option:
+
+  #+begin_example
+     ,#+OPTIONS: LaTeX:t
+  #+end_example
+
+  With this option, LaTeX fragments are first converted into MathML
+  fragments using an external LaTeX-to-MathML converter program.  The
+  resulting MathML fragments are then embedded as an OpenDocument Formula in
+  the exported document.
+
+  {{{vindex(org-latex-to-mathml-convert-command)}}}
+  {{{vindex(org-latex-to-mathml-jar-file)}}}
+
+  You can specify the LaTeX-to-MathML converter by customizing the variables
+  ~org-latex-to-mathml-convert-command~ and
+  ~org-latex-to-mathml-jar-file~.
+
+  If you prefer to use {{{file(MathToWeb)}}} as your converter, you can
+  configure the above variables as shown below.[fn:137]
+
+  #+header: :eval no
+  #+header: :exports code
+  #+begin_src emacs-lisp
+  (setq org-latex-to-mathml-convert-command
+        "java -jar %j -unicode -force -df %o %I"
+        org-latex-to-mathml-jar-file
+        "/path/to/mathtoweb.jar")
+  #+end_src
+
+  You can use the following commands to quickly verify the reliability of
+  the LaTeX-to-MathML converter.
+
+  - {{{kbd(M-x org-export-as-odf)}}} ::
+
+    Convert a LaTeX math snippet to an OpenDocument formula
+    ({{{file(.odf)}}}) file.
+
+  - {{{kbd(M-x org-export-as-odf-and-open)}}} ::
+
+    Convert a LaTeX math snippet to an OpenDocument formula
+    ({{{file(.odf)}}}) file and open the formula file with the
+    system-registered application.
+
+- PNG images ::
+  {{{cindex(dvipng)}}}
+
+  This option is activated on a per-file basis with
+
+  #+begin_example
+     ,#+OPTIONS: LaTeX:dvipng
+  #+end_example
+
+  With this option, LaTeX fragments are processed into PNG images and
+  the resulting images are embedded in the exported document. This
+  method requires that the {{{file(dvipng)}}} program be available on
+  your system.
+
+**** Working with MathML or OpenDocument formula files
+     :PROPERTIES:
+     :DESCRIPTION: How to embed equations in native format
+     :END:
+
+For various reasons, you may find embedding LaTeX math snippets in
+an ODT document less than reliable. In that case, you can embed a math
+equation by linking to its MathML ({{{file(.mml)}}}) source or its
+OpenDocument formula ({{{file(.odf)}}}) file as shown below:
+
+#+begin_example
+   [[./equation.mml]]
+#+end_example
+
+or
+
+#+begin_example
+   [[./equation.odf]]
+#+end_example
+
+*** Labels and captions in ODT export
+    :PROPERTIES:
+    :DESCRIPTION: How captions are rendered
+    :END:
+
+You can label and caption various category of objects---an inline
+image, a table, a LaTeX fragment or a Math formula---using
+~#+LABEL~ and ~#+CAPTION~ lines. See [[Images and tables]]. ODT exporter
+enumerates each labeled or captioned object of a given category
+separately. As a result, each such object is assigned a sequence
+number based on order of its appearance in the Org file.
+
+In the exported document, a user-provided caption is augmented with
+the category and sequence number. Consider the following inline image
+in an Org file:
+
+#+begin_example
+   ,#+CAPTION: Bell curve
+   ,#+LABEL:   fig:SED-HR4049
+   [[./img/a.png]]
+#+end_example
+
+It could be rendered as shown below in the exported document.
+
+#+begin_example
+   Figure 2: Bell curve
+#+end_example
+
+{{{vindex(org-export-odt-category-strings)}}}
+
+You can modify the category component of the caption by customizing
+the variable ~org-export-odt-category-strings~. For example, to tag
+all embedded images with the string {{{samp(Illustration)}}} (instead
+of the default {{{samp(Figure)}}}) use the following setting.
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(setq org-export-odt-category-strings
+      '(("en" "Table" "Illustration" "Equation" "Equation")))
+#+end_src
+
+With this, previous image will be captioned as below in the exported
+document.
+
+#+begin_example
+   Illustration 2: Bell curve
+#+end_example
+
+*** Literal examples in ODT export
+    :PROPERTIES:
+    :DESCRIPTION: How source and example blocks are formatted
+    :END:
+
+Export of literal examples (see [[Literal examples]]) with full
+fontification is supported. Internally, the exporter relies on
+{{{file(htmlfontify.el)}}} to generate all style definitions needed
+for a fancy listing.[fn:138] The auto-generated styles have
+{{{samp(OrgSrc)}}} as prefix and inherit their color from the faces
+used by Emacs ~font-lock~ library for the source language.
+
+{{{vindex(org-export-odt-fontify-srcblocks)}}}
+
+If you prefer to use your own custom styles for fontification, you can
+do so by customizing the variable
+~org-export-odt-create-custom-styles-for-srcblocks~.
+
+{{{vindex(org-export-odt-create-custom-styles-for-srcblocks)}}}
+
+You can turn off fontification of literal examples by customizing the
+variable ~org-export-odt-fontify-srcblocks~.
+
+*** Advanced topics in ODT export
+    :PROPERTIES:
+    :DESCRIPTION: Read this if you are a power user
+    :END:
+
+If you rely heavily on ODT export, you may want to exploit the full
+set of features that the exporter offers. This section describes
+features that would be of interest to power users.
+
+**** Configuring a document converter
+     :PROPERTIES:
+     :DESCRIPTION: How to register a document converter
+     :END:
+{{{cindex(convert)}}}
+{{{cindex(doc\\\, docx\\\, rtf)}}}
+{{{cindex(converter)}}}
+
+The ODT exporter can work with popular converters with little or no
+extra configuration from your side. See [[Extending ODT export]]. If you
+are using a converter that is not supported by default or if you would
+like to tweak the default converter settings, proceed as below.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- Register the converter ::
+
+  {{{vindex(org-export-odt-convert-processes)}}}
+
+  Name your converter and add it to the list of known converters by
+  customizing the variable ~org-export-odt-convert-processes~. Also
+  specify how the converter can be invoked via command-line to effect
+  the conversion.
+
+- Configure its capabilities ::
+
+  {{{vindex(org-export-odt-convert-capabilities)}}}
+  # <<x-odt-converter-capabilities>>
+
+  Specify the set of formats the converter can handle by customizing the
+  variable ~org-export-odt-convert-capabilities~.  Use the default value
+  for this variable as a guide for configuring your converter.  As suggested by
+  the default setting, you can specify the full set of formats supported by the
+  converter and not limit yourself to specifying formats that are related to
+  just the OpenDocument Text format.
+
+- Choose the converter ::
+
+  {{{vindex(org-export-odt-convert-process)}}}
+
+  Select the newly added converter as the preferred one by customizing the
+  variable ~org-export-odt-convert-process~.
+
+**** Working with OpenDocument style files
+     :PROPERTIES:
+     :DESCRIPTION: Explore the internals
+     :END:
+{{{cindex(styles\\\, custom)}}}
+{{{cindex(template\\\, custom)}}}
+
+This section explores the internals of the ODT exporter and the means
+by which it produces styled documents. Read this section if you are
+interested in exploring the automatic and custom OpenDocument styles
+used by the exporter.
+
+# <<x-factory-styles>>
+
+The ODT exporter relies on two files for generating its output.
+These files are bundled with the distribution under the directory pointed to
+by the variable ~org-odt-styles-dir~.  The two files are:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{file(OrgOdtStyles.xml)}}} ::
+  <<x-orgodtstyles-xml>>
+
+  This file contributes to the {{{file(styles.xml)}}} file of the final
+  {{{samp(ODT)}}} document. This file is modified to control outline
+  numbering based on user settings, and To add styles generated by
+  {{{file(htmlfontify.el)}}} for fontification of code blocks.
+
+- {{{file(OrgOdtContentTemplate.xml)}}} ::
+  <<x-orgodtcontenttemplate-xml>>
+
+  This file contributes to the {{{file(content.xml)}}} file of the final
+  {{{samp(ODT)}}} document. The contents of the Org outline are inserted
+  between the ~<office:text>~ and ~</office:text>~
+  elements of this file.
+
+  In addition to serving as a template file for the final
+  {{{file(content.xml)}}}, the file also contains automatic styles for
+  formatting of tables which are referenced by the exporter, and
+  ~<text:sequence-decl>~ ... ~</text:sequence-decl>~
+  elements that control how various entities---tables, images,
+  equations, etc.---are numbered.
+
+
+<<x-overriding-factory-styles>>
+
+The following two variables control the location from which the ODT
+exporter picks up the custom styles and content template files. You
+can customize these variables to override the factory styles used by
+the exporter.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~org-export-odt-styles-file~ ::
+  <<x-org-export-odt-styles-file>>
+
+  Use this variable to specify the {{{file(styles.xml)}}} that will be
+  used in the final output. You can specify one of the following values:
+
+  - A {{{file(styles.xml)}}} file ::
+
+    Use this file instead of the default {{{file(styles.xml)}}}
+
+  - A {{{file(.odt)}}} or {{{file(.ott)}}} file ::
+
+    Use the {{{file(styles.xml)}}} contained in the specified OpenDocument
+    Text or Template file.
+
+  - A {{{file(.odt)}}} or {{{file(.ott)}}} file and a subset of files contained within them ::
+
+    Use the {{{file(styles.xml)}}} contained in the specified OpenDocument
+    Text or Template file. Additionally extract the specified member files
+    and embed those within the final {{{samp(ODT)}}} document.
+
+    Use this option if the {{{file(styles.xml)}}} file references
+    additional files like header and footer images.
+
+  - ~nil~ ::
+
+    Use the default {{{file(styles.xml)}}}
+
+- ~org-export-odt-content-template-file~ ::
+  <<x-org-export-odt-content-template-file>>
+
+  Use this variable to specify the blank {{{file(content.xml)}}} that
+  will be used in the final output.
+
+**** Creating one-off styles
+     :PROPERTIES:
+     :DESCRIPTION: How to produce custom highlighting, etc.
+     :END:
+
+There are times when you would want one-off formatting in the exported
+document. You can achieve this by embedding raw OpenDocument XML in
+the Org file. The use of this feature is better illustrated with
+couple of examples.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- Embedding ODT tags as part of regular text ::
+
+  You can include simple OpenDocument tags by prefixing them with
+  {{{samp(@)}}}. For example, to highlight a region of text do the
+  following:
+
+  #+begin_example
+     @<text:span text:style-name="Highlight">This is a
+     highlighted text@</text:span>.  But this is a
+     regular text.
+  #+end_example
+
+  *Hint:* To see the above example in action, edit your
+  {{{file(styles.xml)}}} (see [[x-orgodtstyles-xml][Factory styles]]) and
+  add a custom {{{samp(Highlight)}}} style as shown below.
+
+  #+begin_example
+     <style:style style:name="Highlight" style:family="text">
+       <style:text-properties fo:background-color="#ff0000"/>
+     </style:style>
+  #+end_example
+
+- Embedding a one-line OpenDocument XML ::
+
+  You can add a simple OpenDocument one-liner using the ~#+ODT:~
+  directive.  For example, to force a page break do the following:
+
+  #+begin_example
+     #+ODT: <text:p text:style-name="PageBreak"/>
+  #+end_example
+
+  *Hint:* To see the above example in action, edit your
+  {{{file(styles.xml)}}} (see [[x-orgodtstyles-xml][Factory styles]]) and
+  add a custom {{{samp(PageBreak)}}} style as shown below.
+
+  #+begin_example
+     <style:style style:name="PageBreak" style:family="paragraph"
+                  style:parent-style-name="Text_20_body">
+       <style:paragraph-properties fo:break-before="page"/>
+     </style:style>
+  #+end_example
+
+- Embedding a block of OpenDocument XML ::
+
+  You can add a large block of OpenDocument XML using the
+  ~#+BEGIN_ODT~ ... ~#+END_ODT~ construct.
+
+  For example, to create a one-off paragraph that uses bold text, do the
+  following:
+
+  #+begin_example
+     #+BEGIN_ODT
+     <text:p text:style-name="Text_20_body_20_bold">
+     This paragraph is specially formatted and uses bold text.
+     </text:p>
+     #+END_ODT
+  #+end_example
+
+**** Customizing tables in ODT export
+     :PROPERTIES:
+     :DESCRIPTION: How to define and use table templates
+     :END:
+{{{cindex(tables\\\, in ODT export)}}}
+{{{cindex(#+ATTR_ODT)}}}
+
+You can override the default formatting of the table by specifying a
+custom table style with the ~#+ATTR_ODT~ line. For a discussion on
+default formatting of tables see [[Tables in ODT export]].
+
+This feature closely mimics the way table templates are defined in the
+OpenDocument-v1.2 specification.[fn:139]
+
+To have a quick preview of this feature, install the following setting and
+export the example table.
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+  (setq org-export-odt-table-styles
+        (append org-export-odt-table-styles
+                '(("TableWithHeaderRowAndColumn" "Custom"
+                   ((use-first-row-styles . t)
+                    (use-first-column-styles . t)))
+                  ("TableWithFirstRowandLastRow" "Custom"
+                   ((use-first-row-styles . t)
+                    (use-last-row-styles . t))))))
+#+end_src
+
+#+begin_example
+   ,#+ATTR_ODT: :style "TableWithHeaderRowAndColumn"
+   | Name  | Phone | Age |
+   | Peter |  1234 |  17 |
+   | Anna  |  4321 |  25 |
+#+end_example
+
+In the above example, you used a template named {{{samp(Custom)}}} and
+installed two table styles with the names
+{{{samp(TableWithHeaderRowAndColumn)}}} and
+{{{samp(TableWithFirstRowandLastRow)}}}. (*Important:* The
+OpenDocument styles needed for producing the above template have been
+pre-defined for you. These styles are available under the section
+marked {{{samp(Custom Table Template)}}} in
+{{{file(OrgOdtContentTemplate.xml)}}} (see
+[[x-orgodtcontenttemplate-xml][Factory styles]]). If you need additional
+templates you have to define these styles yourself.
+
+
+To use this feature proceed as follows:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- Create a table template[fn:140] ::
+
+  A table template is nothing but a set of {{{samp(table-cell)}}} and
+  {{{samp(paragraph)}}} styles for each of the following table cell
+  categories:
+
+    - Body
+    - First column
+    - Last column
+    - First row
+    - Last row
+    - Even row
+    - Odd row
+    - Even column
+    - Odd Column
+
+  The names for the above styles must be chosen based on the name of the
+  table template using a well-defined convention.
+
+  The naming convention is better illustrated with an example. For a
+  table template with the name {{{samp(Custom)}}}, the needed style
+  names are listed in the following table.
+
+  | Table cell type | ~table-cell~ style                     | ~paragraph~ style                           |
+  |-----------------+----------------------------------------+---------------------------------------------|
+  | Body            | {{{samp(CustomTableCell)}}}            | {{{samp(CustomTableParagraph)}}}            |
+  | First column    | {{{samp(CustomFirstColumnTableCell)}}} | {{{samp(CustomFirstColumnTableParagraph)}}} |
+  | Last column     | {{{samp(CustomLastColumnTableCell)}}}  | {{{samp(CustomLastColumnTableParagraph)}}}  |
+  | First row       | {{{samp(CustomFirstRowTableCell)}}}    | {{{samp(CustomFirstRowTableParagraph)}}}    |
+  | Last row        | {{{samp(CustomLastRowTableCell)}}}     | {{{samp(CustomLastRowTableParagraph)}}}     |
+  | Even row        | {{{samp(CustomEvenRowTableCell)}}}     | {{{samp(CustomEvenRowTableParagraph)}}}     |
+  | Odd row         | {{{samp(CustomOddRowTableCell)}}}      | {{{samp(CustomOddRowTableParagraph)}}}      |
+  | Even column     | {{{samp(CustomEvenColumnTableCell)}}}  | {{{samp(CustomEvenColumnTableParagraph)}}}  |
+  | Odd column      | {{{samp(CustomOddColumnTableCell)}}}   | {{{samp(CustomOddColumnTableParagraph)}}}   |
+
+
+  To create a table template with the name {{{samp(Custom)}}}, define
+  the above styles in the ~<office:automatic-styles>~ ...
+  ~</office:automatic-styles>~ element of the content template file (see
+  [[x-orgodtcontenttemplate-xml][Factory styles]]).
+
+- Define a table style[fn:141] ::
+
+  {{{vindex(org-export-odt-table-styles)}}}
+
+  To define a table style, create an entry for the style in the variable
+  ~org-export-odt-table-styles~ and specify the following:
+
+    - the name of the table template created in step (1)
+    - the set of cell styles in that template that are to be activated
+
+
+  For example, the entry below defines two different table styles
+  {{{samp(TableWithHeaderRowAndColumn)}}} and
+  {{{samp(TableWithFirstRowandLastRow)}}} based on the same template
+  {{{samp(Custom)}}}. The styles achieve their intended effect by
+  selectively activating the individual cell styles in that template.
+
+  #+header: :eval no
+  #+header: :exports code
+  #+begin_src emacs-lisp
+  (setq org-export-odt-table-styles
+        (append org-export-odt-table-styles
+                '(("TableWithHeaderRowAndColumn" "Custom"
+                   ((use-first-row-styles . t)
+                    (use-first-column-styles . t)))
+                  ("TableWithFirstRowandLastRow" "Custom"
+                   ((use-first-row-styles . t)
+                    (use-last-row-styles . t))))))
+  #+end_src
+
+- Associate a table with the table style ::
+
+  To do this, specify the table style created in step (2) as part of
+  the ~ATTR_ODT~ line as shown below.
+
+  #+begin_example
+     ,#+ATTR_ODT: :style "TableWithHeaderRowAndColumn"
+     | Name  | Phone | Age |
+     | Peter |  1234 |  17 |
+     | Anna  |  4321 |  25 |
+  #+end_example
+
+**** Validating OpenDocument XML
+     :PROPERTIES:
+     :DESCRIPTION: How to debug corrupt OpenDocument files
+     :END:
+
+Occasionally, you will discover that the document created by the ODT
+exporter cannot be opened by your favorite application. One of the
+common reasons for this is that the {{{file(.odt)}}} file is corrupt.
+In such cases, you may want to validate the document against the
+OpenDocument RELAX NG Compact Syntax (RNC) schema.
+
+For de-compressing the {{{file(.odt)}}} file: [[info:emacs#File%20Archives][info:emacs#File
+Archives]].[fn:142] For general help with validation (and
+schema-sensitive editing) of XML files: [[info:nxml-mode#Introduction]].
+{{{vindex(org-export-odt-schema-dir)}}}
+
+If you have ready access to OpenDocument {{{file(.rnc)}}} files and
+the needed schema-locating rules in a single folder, you can customize
+the variable ~org-export-odt-schema-dir~ to point to that directory.
+The ODT exporter will take care of updating the
+~rng-schema-locating-files~ for you.
+
+** TaskJuggler export
+   :PROPERTIES:
+   :DESCRIPTION: Exporting to TaskJuggler
+   :END:
+{{{cindex(TaskJuggler export)}}}
+{{{cindex(Project management)}}}
+
+[[http://www.taskjuggler.org/][TaskJuggler]] is a project management tool. It provides an optimizing
+scheduler that computes your project time lines and resource
+assignments based on the project outline and the constraints that you
+have provided.
+
+The TaskJuggler exporter is a bit different from other exporters, such
+as the ~HTML~ and LaTeX exporters for example, in that it does not
+export all the nodes of a document or strictly follow the order of the
+nodes in the document.
+
+Instead the TaskJuggler exporter looks for a tree that defines the
+tasks and optionally trees that define the resources and reports for
+this project. It then creates a TaskJuggler file based on these trees
+and the attributes defined in all the nodes.
+
+*** TaskJuggler export commands
+    :PROPERTIES:
+    :DESCRIPTION: Key bindings for TaskJuggler export
+    :END:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-e j)}}}, ~org-export-as-taskjuggler~ ::
+  {{{kindex(C-c C-e j)}}}
+
+  Export as a TaskJuggler file.
+
+- {{{kbd(C-c C-e J)}}}, ~org-export-as-taskjuggler-and-open~ ::
+  {{{kindex(C-c C-e J)}}}
+
+  Export as a TaskJuggler file and then open the file with TaskJugglerUI
+  (only for TaskJugglerUI 2.x).
+
+*** Tasks
+    :PROPERTIES:
+    :DESCRIPTION: Marking tasks for TaskJuggler export
+    :END:
+{{{vindex(org-export-taskjuggler-project-tag)}}}
+
+Create your tasks as you usually do with Org mode. Assign efforts to
+each task using properties (it is easiest to do this in the column
+view). You should end up with something similar to the example by
+Peter Jones in
+[[http://www.contextualdevelopment.com/static/artifacts/articles/2008/project-planning/project-planning.org]].
+Now mark the top node of your tasks with a tag named
+~:taskjuggler_project:~ (or whatever you customized
+~org-export-taskjuggler-project-tag~ to). You are now ready to export
+the project plan with {{{kbd(C-c C-e J)}}} which will export the
+project plan and open a gantt chart in TaskJugglerUI.
+
+*** Resources
+    :PROPERTIES:
+    :DESCRIPTION: Define TaskJuggler resources
+    :END:
+{{{vindex(org-export-taskjuggler-resource-tag)}}}
+
+Next you can define resources and assign those to work on specific
+tasks. You can group your resources hierarchically. Tag the top node
+of the resources with ~:taskjuggler_resource:~ (or whatever you
+customized ~org-export-taskjuggler-resource-tag~ to). You can
+optionally assign an identifier (named {{{samp(resource_id)}}}) to the
+resources (using the standard Org properties commands, see [[Property
+syntax]]) or you can let the exporter generate identifiers automatically
+(the exporter picks the first word of the headline as the identifier
+as long as it is unique---see the documentation of
+~org-taskjuggler-get-unique-id~). Using that identifier you can then
+allocate resources to tasks. This is again done with the
+{{{samp(allocate)}}} property on the tasks. Do this in column view or
+when on the task type 
+{{{ksksksk(C-c C-x p allocate,RET,<resource_id>,RET)}}}.
+
+Once the allocations are done you can again export to TaskJuggler and
+check in the Resource Allocation Graph which person is working on what
+task at what time.
+
+*** Export of properties
+    :PROPERTIES:
+    :DESCRIPTION: Which properties will be exported?
+    :END:
+
+The exporter also takes TODO state information into consideration,
+i.e., if a task is marked as done it will have the corresponding
+attribute in TaskJuggler ({{{samp(complete 100)}}}). Scheduling
+information is also taken into account to set start/end dates for
+tasks.
+
+The exporter will also export any property on a task resource or
+resource node which is known to TaskJuggler, such as
+{{{samp(limits)}}}, {{{samp(vacation)}}}, {{{samp(shift)}}},
+{{{samp(booking)}}}, {{{samp(efficiency)}}}, {{{samp(journalentry)}}},
+{{{samp(rate)}}} for resources or {{{samp(account)}}},
+{{{samp(start)}}}, {{{samp(note)}}}, {{{samp(duration)}}},
+{{{samp(end)}}}, {{{samp(journalentry)}}}, {{{samp(milestone)}}},
+{{{samp(reference)}}}, {{{samp(responsible)}}},
+{{{samp(scheduling)}}}, etc for tasks.
+
+*** Dependencies
+    :PROPERTIES:
+    :DESCRIPTION: How the exporter handles dependencies
+    :END:
+
+The exporter will handle dependencies that are defined in the tasks
+either with the {{{samp(ORDERED)}}} attribute (see [[TODO dependencies]]),
+with the {{{samp(BLOCKER)}}} attribute (see {{{file(org-depend.el)}}})
+or alternatively with a {{{samp(depends)}}} attribute. Both the
+{{{samp(BLOCKER)}}} and the {{{samp(depends)}}} attribute can be
+either {{{samp(previous-sibling)}}} or a reference to an identifier
+(named {{{samp(task_id)}}}) which is defined for another task in the
+project. {{{samp(BLOCKER)}}} and the {{{samp(depends)}}} attribute can
+define multiple dependencies separated by either space or comma. You
+can also specify optional attributes on the dependency by simply
+appending it. The following examples should illustrate this:
+
+#+begin_example
+   ,* Preparation
+   ,  :PROPERTIES:
+   ,  :task_id:  preparation
+   ,  :ORDERED:  t
+   ,  :END:
+   ,* Training material
+   ,  :PROPERTIES:
+   ,  :task_id:  training_material
+   ,  :ORDERED:  t
+   ,  :END:
+   ,** Markup Guidelines
+   ,   :PROPERTIES:
+   ,   :Effort:   2d
+   ,   :END:
+   ,** Workflow Guidelines
+   ,   :PROPERTIES:
+   ,   :Effort:   2d
+   ,   :END:
+   ,* Presentation
+   ,  :PROPERTIES:
+   ,  :Effort:   2d
+   ,  :BLOCKER:  training_material { gapduration 1d } preparation
+   ,  :END:
+#+end_example
+
+*** Reports
+    :PROPERTIES:
+    :DESCRIPTION: Gantt charts, etc.
+    :END:
+{{{vindex(org-export-taskjuggler-default-reports)}}}
+
+TaskJuggler can produce many kinds of reports (e.g., gantt chart,
+resource allocation, etc). The user defines what kind of reports
+should be generated for a project in the TaskJuggler file. By default,
+the exporter will automatically insert some pre-set reports in the
+file. These defaults are defined in
+~org-export-taskjuggler-default-reports~. They can be modified using
+customize along with a number of other options. For a more complete
+list, see 
+{{{ksksksk(M-x customize-group,RET,org-export-taskjuggler,RET)}}}.
+
+Alternately, the user can tag a tree with
+~org-export-taskjuggler-report-tag~, and define reports in sub-nodes,
+similarly to what is done with tasks or resources. The properties used
+for report generation are defined in
+~org-export-taskjuggler-valid-report-attributes~. In addition, a
+special property named {{{samp(report-kind)}}} is used to define the
+kind of report one wants to generate (by default, a
+{{{samp(taskreport)}}}).
+
+For more information and examples see the Org-taskjuggler tutorial at
+[[http://orgmode.org/worg/org-tutorials/org-taskjuggler.html]].
+
+** Freemind export
+   :PROPERTIES:
+   :DESCRIPTION: Exporting to Freemind mind maps
+   :END:
+{{{cindex(Freemind export)}}}
+{{{cindex(mind map)}}}
+
+The Freemind exporter was written by Lennart Borgman.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-e m)}}}, ~org-export-as-freemind~ ::
+  {{{kindex(C-c C-e m)}}}
+
+  Export as a Freemind mind map. For an Org file {{{file(myfile.org)}}},
+  the Freemind file will be {{{file(myfile.mm)}}}.
+
+** XOXO export
+   :PROPERTIES:
+   :DESCRIPTION: Exporting to XOXO
+   :END:
+{{{cindex(XOXO export)}}}
+
+Org mode contains an exporter that produces XOXO-style output.
+Currently, this exporter only handles the general outline structure
+and does not interpret any additional Org mode features.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-e x)}}}, ~org-export-as-xoxo~ ::
+  {{{kindex(C-c C-e x)}}}
+
+  Export as an XOXO file. For an Org file {{{file(myfile.org)}}}, the
+  XOXO file will be {{{file(myfile.html)}}}.
+
+- {{{kbd(C-c C-e v x)}}} ::
+  {{{kindex(C-c C-e v x)}}}
+
+  Export only the visible part of the document.
+
+** iCalendar export
+   :PROPERTIES:
+   :DESCRIPTION: Exporting to iCalendar format
+   :END:
+{{{cindex(iCalendar export)}}}
+
+{{{vindex(org-icalendar-include-todo)}}}
+{{{vindex(org-icalendar-use-deadline)}}}
+{{{vindex(org-icalendar-use-scheduled)}}}
+{{{vindex(org-icalendar-categories)}}}
+{{{vindex(org-icalendar-alarm-time)}}}
+
+Some people use Org mode for keeping track of projects, but still
+prefer a standard calendar application for anniversaries and
+appointments. In this case it can be useful to show deadlines and
+other time-stamped items in Org files in the calendar application. Org
+mode can export calendar information in the standard iCalendar format.
+If you also want to have TODO entries included in the export,
+configure the variable ~org-icalendar-include-todo~. Plain timestamps
+are exported as VEVENT, and TODO items as VTODO. It will also create
+events from deadlines that are in non-TODO items. Deadlines and
+scheduling dates in TODO items will be used to set the start and due
+dates for the TODO entry.[fn:143] As categories, it will use the tags
+locally defined in the heading, and the file/tree category.[fn:144]
+See the variable ~org-icalendar-alarm-time~ for a way to assign alarms
+to entries with a time.
+
+{{{vindex(org-icalendar-store-UID)}}}
+{{{cindex(property\\\, ID)}}}
+
+The iCalendar standard requires each entry to have a globally unique
+identifier (UID). Org creates these identifiers during export. If you
+set the variable ~org-icalendar-store-UID~, the UID will be stored in
+the ~:ID:~ property of the entry and re-used next time you report this
+entry. Since a single entry can give rise to multiple iCalendar
+entries (as a timestamp, a deadline, a scheduled item, and as a TODO
+item), Org adds prefixes to the UID, depending on what triggered the
+inclusion of the entry. In this way the UID remains unique, but a
+synchronization program can still figure out from which entry all the
+different instances originate.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-e i)}}}, ~org-export-icalendar-this-file~ ::
+  {{{kindex(C-c C-e i)}}}
+
+  Create iCalendar entries for the current file and store them in the
+  same directory, using a file extension {{{file(.ics)}}}.
+
+- {{{kbd(C-c C-e I)}}}, ~ org-export-icalendar-all-agenda-files~ ::
+  {{{kindex(C-c C-e I)}}}
+  {{{vindex(org-agenda-files)}}}
+
+  Like {{{kbd(C-c C-e i)}}}, but do this for all files in
+  ~org-agenda-files~. For each of these files, a separate iCalendar file
+  will be written.
+
+- {{{kbd(C-c C-e c)}}}, ~org-export-icalendar-combine-agenda-files~ ::
+  {{{kindex(C-c C-e c)}}}
+  {{{vindex(org-combined-agenda-icalendar-file)}}}
+
+  Create a single large iCalendar file from all files in
+  ~org-agenda-files~ and write it to the file given by
+  ~org-combined-agenda-icalendar-file~.
+
+
+{{{vindex(org-use-property-inheritance)}}}
+{{{vindex(org-icalendar-include-body)}}}
+{{{cindex(property\\\, SUMMARY)}}}
+{{{cindex(property\\\, DESCRIPTION)}}}
+{{{cindex(property\\\, LOCATION)}}}
+
+The export will honor SUMMARY, DESCRIPTION and LOCATION properties if
+the selected entries have them.[fn:145] If not, the summary will be
+derived from the headline, and the description from the body (limited
+to ~org-icalendar-include-body~ characters).
+
+How this calendar is best read and updated, depends on the application
+you are using.  The FAQ covers this issue.
+
+* Publishing
+  :PROPERTIES:
+  :DESCRIPTION: Create a web site of linked Org files
+  :END:
+{{{cindex(publishing)}}}
+{{{cindex(O'Toole\\\, David)}}}
+
+Org includes a publishing management system that allows you to
+configure automatic HTML conversion of /projects/ composed of
+interlinked org files. You can also configure Org to automatically
+upload your exported HTML pages and related attachments, such as
+images and source code files, to a web server.
+
+You can also use Org to convert files into PDF, or even combine HTML
+and PDF conversion so that files are available in both formats on the
+server.
+
+Publishing has been contributed to Org by David O'Toole.
+
+** Configuration
+   :PROPERTIES:
+   :DESCRIPTION: Defining projects
+   :END:
+Publishing needs significant configuration to specify files,
+destination and many other properties of a project.
+
+*** Project alist
+    :PROPERTIES:
+    :DESCRIPTION: The central configuration variable
+    :TITLE:    The variable ~org-publish-project-alist~
+    :END:
+{{{cindex(org-publish-project-alist)}}}
+{{{cindex(projects\\\, for publishing)}}}
+{{{vindex(org-publish-project-alist)}}}
+
+Publishing is configured almost entirely through setting the value of
+one variable, called ~org-publish-project-alist~. Each element of the
+list configures one project, and may be in one of the two following
+forms:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+   ("project-name" :property value :property value ...)
+#+end_src
+
+i.e., a well-formed property list with alternating keys and values,
+or:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+   ("project-name" :components ("project-name" "project-name" ...))
+#+end_src
+
+In both cases, projects are configured by specifying property values.
+A project defines the set of files that will be published, as well as
+the publishing configuration to use when publishing those files. When
+a project takes the second form listed above, the individual members
+of the ~:components~ property are taken to be sub-projects, which
+group together files requiring different publishing options. When you
+publish such a "meta-project," all the components will also be
+published, in the sequence given.
+
+*** Sources and destinations
+    :PROPERTIES:
+    :DESCRIPTION: From here to there
+    :TITLE:    Sources and destinations for files
+    :END:
+{{{cindex(directories\\\, for publishing)}}}
+
+Most properties are optional, but some should always be set. In
+particular, Org needs to know where to look for source files, and
+where to put published files.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~:base-directory~ ::
+ 
+  Directory containing publishing source files
+
+- ~:publishing-directory~ ::
+
+  Directory where output files will be published. You can directly
+  publish to a webserver using a file name syntax appropriate for the
+  Emacs {{{file(tramp)}}} package. Or you can publish to a local
+  directory and use external tools to upload your website 
+  (see [[Uploading files]]).
+
+- ~:preparation-function~ ::
+
+  Function or list of functions to be called before starting the
+  publishing process, for example, to run ~make~ for updating files to
+  be published. The project property list is scoped into this call as
+  the variable ~project-plist~.
+
+- ~:completion-function~ ::
+
+  Function or list of functions called after finishing the publishing
+  process, for example, to change permissions of the resulting files.
+  The project property list is scoped into this call as the variable
+  ~project-plist~.
+
+*** Selecting files
+    :PROPERTIES:
+    :DESCRIPTION: What files are part of the project?
+    :END:
+{{{cindex(files\\\, selecting for publishing)}}}
+
+By default, all files with extension {{{file(.org)}}} in the base directory
+are considered part of the project.  This can be modified by setting the
+following properties:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~:base-extension~ ::
+
+  Extension (without the dot!) of source files. This actually is a
+  regular expression. Set this to the symbol ~any~ if you want to get
+  all files in ~:base-directory~, even without extension.
+
+- ~:exclude~ ::
+
+  Regular expression to match file names that should not be published,
+  even though they have been selected on the basis of their extension.
+
+- ~:include~ ::
+
+  List of files to be included regardless of ~:base-extension~ and
+  ~:exclude~.
+
+- ~:recursive~ ::
+
+  Non-nil means, check base-directory recursively for files to publish.
+
+*** Publishing action
+    :PROPERTIES:
+    :DESCRIPTION: Setting the function doing the publishing
+    :END:
+{{{cindex(action\\\, for publishing)}}}
+
+Publishing means that a file is copied to the destination directory and
+possibly transformed in the process.  The default transformation is to export
+Org files as HTML files, and this is done by the function
+~org-publish-org-to-html~ which calls the HTML exporter (see [[HTML
+export]]).  But you also can publish your content as PDF files using
+~org-publish-org-to-pdf~, or as ~ascii~, ~latin1~ or
+~utf8~ encoded files using the corresponding functions.  If you want to
+publish the Org file itself, but with /archived/, /commented/, and
+/tag-excluded/ trees removed, use ~org-publish-org-to-org~ and set the
+parameters ~:plain-source~ and/or ~:htmlized-source~.  This will
+produce {{{file(file.org)}}} and {{{file(file.org.html)}}} in the publishing
+directory.[fn:146]  Other files like images only need to be copied to the
+publishing destination; for this you may use ~org-publish-attachment~.
+For non-Org files, you always need to specify the publishing function:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~:publishing-function~ ::
+
+  Function executing the publication of a file. This may also be a list
+  of functions, which will all be called in turn.
+
+- ~:plain-source~ ::
+
+  Non-nil means, publish plain source.
+
+- ~:htmlized-source~ ::
+
+  Non-nil means, publish htmlized source.
+
+
+The function must accept three arguments: a property list containing
+at least a ~:publishing-directory~ property, the name of the file to
+be published, and the path to the publishing directory of the output
+file. It should take the specified file, make the necessary
+transformation (if any) and place the result into the destination
+folder.
+
+*** Publishing options
+    :PROPERTIES:
+    :DESCRIPTION: Tweaking HTML/LaTeX export
+    :END:
+{{{cindex(options\\\, for publishing)}}}
+
+The property list can be used to set many export options for the HTML
+and LaTeX exporters.  In most cases, these properties correspond to user
+variables in Org.  The table below lists these properties along
+with the variable they belong to.  See the documentation string for the
+respective variable for details.
+
+{{{vindex(org-export-html-link-up)}}}
+{{{vindex(org-export-html-link-home)}}}
+{{{vindex(org-export-default-language)}}}
+{{{vindex(org-display-custom-times)}}}
+{{{vindex(org-export-headline-levels)}}}
+{{{vindex(org-export-with-section-numbers)}}}
+{{{vindex(org-export-section-number-format)}}}
+{{{vindex(org-export-with-toc)}}}
+{{{vindex(org-export-preserve-breaks)}}}
+{{{vindex(org-export-with-archived-trees)}}}
+{{{vindex(org-export-with-emphasize)}}}
+{{{vindex(org-export-with-sub-superscripts)}}}
+{{{vindex(org-export-with-special-strings)}}}
+{{{vindex(org-export-with-footnotes)}}}
+{{{vindex(org-export-with-drawers)}}}
+{{{vindex(org-export-with-tags)}}}
+{{{vindex(org-export-with-todo-keywords)}}}
+{{{vindex(org-export-with-tasks)}}}
+{{{vindex(org-export-with-done-tasks)}}}
+{{{vindex(org-export-with-priority)}}}
+{{{vindex(org-export-with-TeX-macros)}}}
+{{{vindex(org-export-with-LaTeX-fragments)}}}
+{{{vindex(org-export-skip-text-before-1st-heading)}}}
+{{{vindex(org-export-with-fixed-width)}}}
+{{{vindex(org-export-with-timestamps)}}}
+{{{vindex(org-export-author-info)}}}
+{{{vindex(org-export-email-info)}}}
+{{{vindex(org-export-creator-info)}}}
+{{{vindex(org-export-time-stamp-file)}}}
+{{{vindex(org-export-with-tables)}}}
+{{{vindex(org-export-highlight-first-table-line)}}}
+{{{vindex(org-export-html-style-include-default)}}}
+{{{vindex(org-export-html-style-include-scripts)}}}
+{{{vindex(org-export-html-style)}}}
+{{{vindex(org-export-html-style-extra)}}}
+{{{vindex(org-export-html-link-org-files-as-html)}}}
+{{{vindex(org-export-html-inline-images)}}}
+{{{vindex(org-export-html-extension)}}}
+{{{vindex(org-export-html-table-tag)}}}
+{{{vindex(org-export-html-expand)}}}
+{{{vindex(org-export-html-with-timestamp)}}}
+{{{vindex(org-export-publishing-directory)}}}
+{{{vindex(org-export-html-preamble)}}}
+{{{vindex(org-export-html-postamble)}}}
+{{{vindex(user-full-name)}}}
+{{{vindex(user-mail-address)}}}
+{{{vindex(org-export-select-tags)}}}
+{{{vindex(org-export-exclude-tags)}}}
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~:link-up~ :: ~org-export-html-link-up~
+- ~:link-home~ :: ~org-export-html-link-home~
+- ~:language~ :: ~org-export-default-language~
+- ~:customtime~ :: ~org-display-custom-times~
+- ~:headline-levels~ :: ~org-export-headline-levels~
+- ~:section-numbers~ :: ~org-export-with-section-numbers~
+- ~:section-number-format~ :: ~org-export-section-number-format~
+- ~:table-of-contents~ :: ~org-export-with-toc~
+- ~:preserve-breaks~ :: ~org-export-preserve-breaks~
+- ~:archived-trees~ :: ~org-export-with-archived-trees~
+- ~:emphasize~ :: ~org-export-with-emphasize~
+- ~:sub-superscript~ :: ~org-export-with-sub-superscripts~
+- ~:special-strings~ :: ~org-export-with-special-strings~
+- ~:footnotes~ :: ~org-export-with-footnotes~
+- ~:drawers~ :: ~org-export-with-drawers~
+- ~:tags~ :: ~org-export-with-tags~
+- ~:todo-keywords~ :: ~org-export-with-todo-keywords~
+- ~:tasks~ :: ~org-export-with-tasks~
+- ~:priority~ :: ~org-export-with-priority~
+- ~:TeX-macros~ :: ~org-export-with-TeX-macros~
+- ~:LaTeX-fragments~ :: ~org-export-with-LaTeX-fragments~
+- ~:latex-listings~ :: ~org-export-latex-listings~
+- ~:skip-before-1st-heading~ :: ~org-export-skip-text-before-1st-heading~
+- ~:fixed-width~ :: ~org-export-with-fixed-width~
+- ~:timestamps~ :: ~org-export-with-timestamps~
+- ~:author~ :: ~user-full-name~
+- ~:email~ :: ~user-mail-address~ : ~addr;addr;..~
+- ~:author-info~ :: ~org-export-author-info~
+- ~:email-info~ :: ~org-export-email-info~
+- ~:creator-info~ :: ~org-export-creator-info~
+- ~:tables~ :: ~org-export-with-tables~
+- ~:table-auto-headline~ :: ~org-export-highlight-first-table-line~
+- ~:style-include-default~ :: ~org-export-html-style-include-default~
+- ~:style-include-scripts~ :: ~org-export-html-style-include-scripts~
+- ~:style~ :: ~org-export-html-style~
+- ~:style-extra~ :: ~org-export-html-style-extra~
+- ~:convert-org-links~ :: ~org-export-html-link-org-files-as-html~
+- ~:inline-images~ :: ~org-export-html-inline-images~
+- ~:html-extension~ :: ~org-export-html-extension~
+- ~:html-preamble~ :: ~org-export-html-preamble~
+- ~:html-postamble~ :: ~org-export-html-postamble~
+- ~:xml-declaration~ :: ~org-export-html-xml-declaration~
+- ~:html-table-tag~ :: ~org-export-html-table-tag~
+- ~:expand-quoted-html~ :: ~org-export-html-expand~
+- ~:timestamp~ :: ~org-export-html-with-timestamp~
+- ~:publishing-directory~ :: ~org-export-publishing-directory~
+- ~:select-tags~ :: ~org-export-select-tags~
+- ~:exclude-tags~ :: ~org-export-exclude-tags~
+- ~:latex-image-options~ :: ~org-export-latex-image-default-option~
+
+
+Most of the ~org-export-with-*~ variables have the same effect in both
+HTML and LaTeX exporters, except for ~:TeX-macros~ and
+~:LaTeX-fragments~ options, respectively ~nil~ and ~t~ in the LaTeX
+export. See ~org-export-plist-vars~ to check this list of options.
+
+{{{vindex(org-publish-project-alist)}}}
+
+When a property is given a value in ~org-publish-project-alist~, its
+setting overrides the value of the corresponding user variable (if
+any) during publishing. Options set within a file (see [[Export
+options]]), however, override everything.
+
+*** Publishing links
+    :PROPERTIES:
+    :DESCRIPTION: Which links keep working after publishing?
+    :END:
+{{{cindex(links\\\, publishing)}}}
+
+To create a link from one Org file to another, you would use something
+like ~[[file:foo.org][The foo]]~ or simply ~[[file:foo.org]]~ (see
+[[Hyperlinks]]). When published, this link becomes a link to
+{{{file(foo.html)}}}. In this way, you can interlink the pages of your
+"org web" project and the links will work as expected when you publish
+them to HTML. If you also publish the Org source file and want to link
+to that, use an ~http:~ link instead of a ~file:~ link, because
+~file:~ links are converted to link to the corresponding
+{{{file(html)}}} file.
+
+You may also link to related files, such as images. Provided you are
+careful with relative file names, and provided you have also
+configured Org to upload the related files, these links will work too.
+See [[Complex example]], for an example of this usage.
+
+Sometimes an Org file to be published may contain links that are only
+valid in your production environment, but not in the publishing
+location. In this case, use the following property to define a
+function for checking link validity:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~:link-validation-function~ ::
+  Function to validate links
+
+
+{{{noindent}}} This function must accept two arguments, the file name
+and a directory relative to which the file name is interpreted in the
+production environment. If this function returns ~nil~, then the HTML
+generator will only insert a description into the HTML file, but no
+link. One option for this function is ~org-publish-validate-link~
+which checks if the given file is part of any project in
+~org-publish-project-alist~.
+
+*** Site map
+    :PROPERTIES:
+    :DESCRIPTION: Generating a list of all pages
+    :TITLE:    Generating a sitemap
+    :END:
+{{{cindex(sitemap\\\, of published pages)}}}
+
+The following properties may be used to control publishing of
+a map of files for a given project.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~:auto-sitemap~ ::
+
+  When non-nil, publish a sitemap during ~org-publish-current-project~
+  or ~org-publish-all~.
+
+- ~:sitemap-filename~ ::
+
+  Filename for output of sitemap.  Defaults to {{{file(sitemap.org)}}} (which
+  becomes {{{file(sitemap.html)}}}).
+
+- ~:sitemap-title~ ::
+
+  Title of sitemap page.  Defaults to name of file.
+
+- ~:sitemap-function~ ::
+
+  Plug-in function to use for generation of the sitemap. Defaults to
+  ~org-publish-org-sitemap~, which generates a plain list of links to
+  all files in the project.
+
+- ~:sitemap-sort-folders~ ::
+
+  Where folders should appear in the sitemap. Set this to ~first~
+  (default) or ~last~ to display folders first or last, respectively.
+  Any other value will mix files and folders.
+
+- ~:sitemap-sort-files~ ::
+
+  How the files are sorted in the site map. Set this to ~alphabetically~
+  (default), ~chronologically~ or ~anti-chronologically~.
+  ~chronologically~ sorts the files with older date first while
+  ~anti-chronologically~ sorts the files with newer date first.
+  ~alphabetically~ sorts the files alphabetically. The date of a file is
+  retrieved with ~org-publish-find-date~.
+
+- ~:sitemap-ignore-case~ ::
+
+  Should sorting be case-sensitive?  Default ~nil~.
+
+- ~:sitemap-file-entry-format~ ::
+
+  With this option one can tell how a sitemap's entry is formatted in
+  the sitemap. This is a format string with some escape sequences: ~%t~
+  stands for the title of the file, ~%a~ stands for the author of the
+  file and ~%d~ stands for the date of the file. The date is retrieved
+  with the ~org-publish-find-date~ function and formatted with
+  ~org-publish-sitemap-date-format~. Default ~%t~.
+
+- ~:sitemap-date-format~ ::
+
+  Format string for the ~format-time-string~ function that tells how a
+  sitemap entry's date is to be formatted. This property bypasses
+  ~org-publish-sitemap-date-format~ which defaults to ~%Y-%m-%d~.
+
+- ~:sitemap-sans-extension~ ::
+
+  When non-nil, remove filenames' extensions from the generated sitemap.
+  Useful to have cool URIs (see [[http://www.w3.org/Provider/Style/URI]]).
+  Defaults to ~nil~.
+
+*** Generating an index
+    :PROPERTIES:
+    :DESCRIPTION: An index that reaches across pages
+    :END:
+{{{cindex(index\\\, in a publishing project)}}}
+
+Org mode can generate an index across the files of a publishing project.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~:makeindex~ ::
+
+  When non-nil, generate in index in the file {{{file(theindex.org)}}}
+  and publish it as {{{file(theindex.html)}}}.
+
+
+The file will be created when first publishing a project with the
+~:makeindex~ set. The file only contains a statement
+{{{samp(#+INCLUDE: "theindex.inc")}}}. You can then build around this
+include statement by adding a title, style information, etc.
+
+** Uploading files
+   :PROPERTIES:
+   :DESCRIPTION: How to get files up on the server
+   :END:
+{{{cindex(rsync)}}}
+{{{cindex(unison)}}}
+
+For those people already utilizing third party sync tools such as
+{{{command(rsync)}}} or {{{command(unison)}}}, it might be preferable
+not to use the built in remote publishing facilities of Org mode
+which rely heavily on Tramp. Tramp, while very useful and powerful,
+tends not to be so efficient for multiple file transfer and has been
+known to cause problems under heavy usage.
+
+Specialized synchronization utilities offer several advantages. In
+addition to timestamp comparison, they also do content and
+permissions/attribute checks. For this reason you might prefer to
+publish your web to a local directory (possibly even in place with
+your Org files) and then use {{{file(unison)}}} or {{{file(rsync)}}}
+to do the synchronization with the remote host.
+
+Since Unison (for example) can be configured as to which files to
+transfer to a certain remote destination, it can greatly simplify the
+project publishing definition. Simply keep all files in the correct
+location, process your Org files with ~org-publish~ and let the
+synchronization tool do the rest. You do not need, in this scenario,
+to include attachments such as {{{file(jpg)}}}, {{{file(css)}}} or
+{{{file(gif)}}} files in the project definition since the 3rd party
+tool syncs them.
+
+Publishing to a local directory is also much faster than to a remote
+one, so that you can afford more easily to republish entire projects.
+If you set ~org-publish-use-timestamps-flag~ to ~nil~, you gain the
+main benefit of re-including any changed external files such as source
+example files you might include with ~#+INCLUDE:~. The timestamp
+mechanism in Org is not smart enough to detect if included files have
+been modified.
+
+** Sample configuration
+   :PROPERTIES:
+   :DESCRIPTION: Example projects
+   :END:
+Below we provide two example configurations.  The first one is a simple
+project publishing only a set of Org files.  The second example is
+more complex, with a multi-component project.
+
+*** Simple example
+    :PROPERTIES:
+    :DESCRIPTION: One-component publishing
+    :TITLE:    Example: simple publishing configuration
+    :END:
+This example publishes a set of Org files to the {{{file(public_html)}}}
+directory on the local machine.
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(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\"/>")))
+#+end_src
+
+*** Complex example
+    :PROPERTIES:
+    :DESCRIPTION: A multi-component publishing example
+    :TITLE:    Example: complex publishing configuration
+    :END:
+This more complicated example publishes an entire website, including
+Org files converted to HTML, image files, Emacs Lisp source code, and
+style sheets.  The publishing directory is remote and private files are
+excluded.
+
+To ensure that links are preserved, care should be taken to replicate
+your directory structure on the web server, and to use relative file
+paths. For example, if your Org files are kept in {{{file(~/org)}}}
+and your publishable images in {{{file(~/images)}}}, you would link to
+an image with
+
+#+begin_example
+   file:../images/myimage.png
+#+end_example
+
+On the web server, the relative path to the image should be the
+same.  You can accomplish this by setting up an "images" folder in the
+right place on the web server, and publishing images to it.
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(setq org-publish-project-alist
+      '(("orgfiles"
+          :base-directory "~/org/"
+          :base-extension "org"
+          :publishing-directory "/ssh:user@@host:~/html/notebook/"
+          :publishing-function org-publish-org-to-html
+          :exclude "PrivatePage.org"   ;; regexp
+          :headline-levels 3
+          :section-numbers nil
+          :table-of-contents nil
+          :style "<link rel=\"stylesheet\"
+                  href=\"../other/mystyle.css\" type=\"text/css\"/>"
+          :html-preamble t)
+
+         ("images"
+          :base-directory "~/images/"
+          :base-extension "jpg\\|gif\\|png"
+          :publishing-directory "/ssh:user@@host:~/html/images/"
+          :publishing-function org-publish-attachment)
+
+         ("other"
+          :base-directory "~/other/"
+          :base-extension "css\\|el"
+          :publishing-directory "/ssh:user@@host:~/html/other/"
+          :publishing-function org-publish-attachment)
+         ("website" :components ("orgfiles" "images" "other"))))
+#+end_src
+
+** Triggering publication
+   :PROPERTIES:
+   :DESCRIPTION: Publication commands
+   :END:
+Once properly configured, Org can publish with the following commands:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-e X)}}}, ~org-publish~ ::
+  {{{kindex(C-c C-e X)}}}
+  
+  Prompt for a specific project and publish all files that belong to it.
+
+- {{{kbd(C-c C-e P)}}}, ~org-publish-current-project~ ::
+  {{{kindex(C-c C-e P)}}}
+
+  Publish the project containing the current file.
+
+- {{{kbd(C-c C-e F)}}}, ~org-publish-current-file~ ::
+  {{{kindex(C-c C-e F)}}}
+
+  Publish only the current file.
+
+- {{{kbd(C-c C-e E)}}}, ~org-publish-all~ ::
+  {{{kindex(C-c C-e E)}}}
+
+  Publish every project.
+
+
+{{{vindex(org-publish-use-timestamps-flag)}}}
+
+Org uses timestamps to track when a file has changed. The above
+functions normally only publish changed files. You can override this
+and force publishing of all files by giving a prefix argument to any
+of the commands above, or by customizing the variable
+~org-publish-use-timestamps-flag~. This may be necessary in particular
+if files include other files via ~#+SETUPFILE:~ or ~#+INCLUDE:~.
+
+* Working with source code
+  :PROPERTIES:
+  :DESCRIPTION: Export, evaluate, and tangle code blocks
+  :OPTIONAL_TITLE: Working With Source Code
+  :END:
+{{{cindex(Schulte\\\, Eric)}}}
+{{{cindex(Davison\\\, Dan)}}}
+{{{cindex(source code\\\, working with)}}}
+
+Source code can be included in Org mode documents using a
+{{{samp(src)}}} block, e.g.:
+
+#+begin_example
+   #+BEGIN_SRC emacs-lisp
+     (defun org-xor (a b)
+        "Exclusive or."
+        (if a (not b) b))
+   #+END_SRC
+#+end_example
+
+Org mode provides a number of features for working with live source
+code, including editing of code blocks in their native major-mode,
+evaluation of code blocks, converting code blocks into source files
+(known as "tangling" in literate programming), and exporting code
+blocks and their results in several formats. This functionality was
+contributed by Eric Schulte and Dan Davison, and was originally named
+Org-babel.
+
+The following sections describe Org mode's code block handling facilities.
+
+** Structure of code blocks
+   :PROPERTIES:
+   :DESCRIPTION: Code block syntax described
+   :END:
+{{{cindex(code block\\\, structure)}}}
+{{{cindex(source code\\\, block structure)}}}
+{{{cindex(#+NAME)}}}
+{{{cindex(#+BEGIN_SRC)}}}
+
+Live code blocks can be specified with a {{{samp(src)}}} block or
+inline.[fn:147] The structure of a {{{samp(src)}}} block is shown in
+the following example:
+
+#+begin_example
+   ,#+NAME: <name>
+   ,#+BEGIN_SRC <language> <switches> <header arguments>
+     <body>
+   ,#+END_SRC
+#+end_example
+
+The ~#+NAME:~ line is optional, and can be used to name the code
+block. Live code blocks require that a language be specified on the
+~#+BEGIN_SRC~ line. Switches and header arguments are optional.
+{{{cindex(source code\\\, inline)}}}
+
+Live code blocks can also be specified inline using the following
+syntax:
+
+#+begin_example
+   src_<language>{<body>}
+#+end_example
+
+or
+
+#+begin_example
+   src_<language>[<header arguments>]{<body>}
+#+end_example
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~<#+NAME: name>~ ::
+  {{{cindex(#+NAME)}}}
+
+  This line associates a name with the code block. This is similar to
+  the ~#+TBLNAME: NAME~ lines that can be used to name tables in Org
+  mode files. Referencing the name of a code block makes it possible to
+  evaluate the block from other places in the file, from other files, or
+  from Org mode table formulas (see [[The spreadsheet]]). Names are assumed
+  to be unique and the behavior of Org mode when two or more blocks
+  share the same name is undefined.
+
+- ~<language>~ ::
+  {{{cindex(source code\\\, language)}}}
+
+  The language of the code in the block (see [[Languages]]).
+
+- ~<switches>~ ::
+  {{{cindex(source code\\\, switches)}}}
+
+  Optional switches control code block export (see the discussion of
+  switches in [[Literal examples]]).
+
+- ~<header arguments>~ ::
+  {{{cindex(source code\\\, header arguments)}}}
+
+  Optional header arguments control many aspects of evaluation, export
+  and tangling of code blocks (see [[Header arguments]]). Header arguments
+  can also be set on a per-buffer or per-subtree basis using properties.
+
+- ~<body>~ ::
+
+  Source code in the specified language.
+
+** Editing source code
+   :PROPERTIES:
+   :DESCRIPTION: Language major-mode editing
+   :END:
+{{{cindex(code block\\\, editing)}}}
+{{{cindex(source code\\\, editing)}}}
+{{{kindex(C-c ')}}}
+
+Use {{{kbd(C-c ')}}} to edit the current code block. This brings up a
+language major-mode edit buffer containing the body of the code block.
+Saving this buffer will write the new contents back to the Org buffer.
+Use {{{kbd(C-c ')}}} again to exit.
+
+The ~org-src-mode~ minor mode will be active in the edit buffer. The
+following variables can be used to configure the behavior of the edit
+buffer. See also the customization group ~org-edit-structure~ for
+further configuration options.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~org-src-lang-modes~ ::
+
+  If an Emacs major-mode named ~<lang>-mode~ exists, where
+  ~<lang>~ is the language named in the header line of the code block,
+  then the edit buffer will be placed in that major-mode.  This variable
+  can be used to map arbitrary language names to existing major modes.
+
+- ~org-src-window-setup~ ::
+
+  Controls the way Emacs windows are rearranged when the edit buffer is
+  created.
+
+- ~org-src-preserve-indentation~ ::
+
+  This variable is especially useful for tangling languages such as
+  Python, in which whitespace indentation in the output is meaningful.
+
+- ~org-src-ask-before-returning-to-edit-buffer~ ::
+
+  By default, Org will ask before returning to an open edit buffer.  Set this
+  variable to nil to switch without asking.
+
+
+To turn on native code fontification in the Org mode buffer, configure
+the variable ~org-src-fontify-natively~.
+
+** Exporting code blocks
+   :PROPERTIES:
+   :DESCRIPTION: Export contents and/or results
+   :END:
+{{{cindex(code block\\\, exporting)}}}
+{{{cindex(source code\\\, exporting)}}}
+
+It is possible to export the /code/ of code blocks, the /results/ of
+code block evaluation, /both/ the code and the results of code block
+evaluation, or /none/. For most languages, the default exports code.
+However, for some languages (e.g., ~ditaa~) the default exports the
+results of code block evaluation. For information on exporting code
+block bodies, see [[Literal examples]].
+
+The ~:exports~ header argument can be used to specify export
+behavior with the following arguments:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~:exports code~ ::
+
+  The default in most languages.  The body of the code block is exported, as
+  described in [[Literal examples]].
+
+- ~:exports results~ ::
+
+  The code block will be evaluated and the results will be placed in the
+  Org mode buffer for export, either updating previous results of the
+  code block located anywhere in the buffer or, if no previous results
+  exist, placing the results immediately after the code block. The body
+  of the code block will not be exported.
+
+- ~:exports both~ ::
+
+  Both the code block and its results will be exported.
+
+- ~:exports none~ ::
+
+  Neither the code block nor its results will be exported.
+
+
+It is possible to inhibit the evaluation of code blocks during export.
+Setting the ~org-export-babel-evaluate~ variable to ~nil~ will ensure
+that no code blocks are evaluated as part of the export process. This
+can be useful in situations where potentially untrusted Org mode files
+are exported in an automated fashion, for example when Org mode is
+used as the markup language for a wiki.
+
+** Extracting source code
+   :PROPERTIES:
+   :DESCRIPTION: Create pure source code files
+   :END:
+{{{cindex(tangling)}}}
+{{{cindex(source code\\\, extracting)}}}
+{{{cindex(code block\\\, extracting source code)}}}
+
+Creating pure source code files by extracting code from source blocks
+is referred to as "tangling"---a term adopted from the literate
+programming community. During tangling of code blocks their bodies are
+expanded using ~org-babel-expand-src-block~ which can expand both
+variable and ``noweb'' style references (see [[Noweb reference syntax]]).
+
+*** Header arguments for tangling
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~:tangle no~ ::
+
+  The default.  The code block is not included in the tangled output.
+
+- ~:tangle yes~ ::
+
+  Include the code block in the tangled output. The output file name is
+  the name of the org file with the extension {{{samp(.org)}}} replaced
+  by the extension for the block language.
+
+- ~:tangle filename~ ::
+
+  Include the code block in the tangled output to file {{{samp(filename)}}}.
+
+*** Functions for tangling
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~org-babel-tangle~ ::
+  {{{kindex(C-c C-v t)}}}
+
+  Tangle the current file.  Bound to {{{kbd(C-c C-v t)}}}.
+
+  With a prefix argument only tangle the current code block.
+
+- ~org-babel-tangle-file~ ::
+  {{{kindex(C-c C-v f)}}}
+
+  Choose a file to tangle.  Bound to {{{kbd(C-c C-v f)}}}.
+
+*** Hooks for tangling
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~org-babel-post-tangle-hook~ ::
+
+  This hook is run from within code files tangled by ~org-babel-tangle~.
+  Example applications could include post-processing, compilation, or
+  evaluation of tangled code files.
+
+** Evaluating code blocks
+   :PROPERTIES:
+   :DESCRIPTION: Place results in the Org buffer
+   :END:
+{{{cindex(code block\\\, evaluating)}}}
+{{{cindex(source code\\\, evaluating)}}}
+{{{cindex(#+RESULTS)}}}
+
+Code blocks can be evaluated and the results of evaluation optionally
+placed in the Org mode buffer.[fn:148] The results of evaluation are
+placed following a line that begins by default with ~#+RESULTS~ and
+optionally a cache identifier and/or the name of the evaluated code
+block. The default value of ~#+RESULTS~ can be changed with the
+customizable variable ~org-babel-results-keyword~.
+
+By default, the evaluation facility is only enabled for Lisp code
+blocks specified as ~emacs-lisp~. However, source code blocks in many
+languages can be evaluated within Org mode (see [[Languages]] for a list
+of supported languages and [[Structure of code blocks]] for information on
+the syntax used to define a code block).
+
+{{{kindex(C-c C-c)}}}
+{{{kindex(C-c C-v e)}}}
+
+There are a number of ways to evaluate code blocks. The simplest is to
+press {{{kbd(C-c C-c)}}} or {{{kbd(C-c C-v e)}}} with the point on a
+code block.[fn:149] This will call the ~org-babel-execute-src-block~
+function to evaluate the block and insert its results into the Org
+mode buffer.
+
+{{{cindex(#+CALL)}}}
+
+It is also possible to evaluate named code blocks from anywhere in an
+Org mode buffer or an Org mode table. Live code blocks located in the
+current Org mode buffer or in the ``Library of Babel'' (see [[Library of
+Babel]]) can be executed. Named code blocks can be executed with a
+separate ~#+CALL:~ line or inline within a block of text.
+
+The syntax of the ~#+CALL:~ line is:
+
+#+begin_example
+   ,#+CALL: <name>(<arguments>)
+   ,#+CALL: <name>[<inside header arguments>](<arguments>) <end header arguments>
+#+end_example
+
+The syntax for inline evaluation of named code blocks is:
+
+#+begin_example
+   ... call_<name>(<arguments>) ...
+   ... call_<name>[<inside header arguments>](<arguments>)[<end header arguments>] ...
+#+end_example
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~<name>~ ::
+
+  The name of the code block to be evaluated (see [[Structure of code
+  blocks]]).
+
+- ~<arguments>~ ::
+
+  Arguments specified in this section will be passed to the code block.
+  These arguments use standard function call syntax, rather than header
+  argument syntax. For example, a ~#+CALL:~ line that passes the number
+  four to a code block named ~double~, which declares the header
+  argument ~:var n=2~, would be written as ~#+CALL: double(n=4)~.
+
+- ~<inside header arguments>~ ::
+
+  Inside header arguments are passed through and applied to the named
+  code block. These arguments use header argument syntax rather than
+  standard function call syntax. Inside header arguments affect how the
+  code block is evaluated. For example, ~[:results output]~ will collect
+  the results of everything printed to ~STDOUT~ during execution of the
+  code block.
+
+- ~<end header arguments>~ ::
+
+  End header arguments are applied to the calling instance and do not
+  affect evaluation of the named code block. They affect how the results
+  are incorporated into the Org mode buffer and how the call line is
+  exported. For example, ~:results html~ will insert the results of the
+  call line evaluation in the Org buffer, wrapped in a ~BEGIN_HTML:~
+  block.
+
+
+For more examples of passing header arguments to ~#+CALL:~ lines see
+[[Header arguments in function calls]].
+
+** Library of Babel
+   :PROPERTIES:
+   :DESCRIPTION: Use and contribute to a source code library
+   :END:
+{{{cindex(babel\\\, library of)}}}
+{{{cindex(source code\\\, library)}}}
+{{{cindex(code block\\\, library)}}}
+
+The ``Library of Babel'' consists of code blocks that can be called
+from any Org mode file. Code blocks defined in the ``Library of
+Babel'' can be called remotely as if they were in the current Org mode
+buffer (see [[Evaluating code blocks]] for information on the syntax of
+remote code block evaluation).
+
+
+The central repository of code blocks in the ``Library of Babel'' is
+housed in an Org mode file located in the {{{samp(contrib)}}}
+directory of Org mode.
+
+Users can add code blocks they believe to be generally useful to their
+``Library of Babel.'' The code blocks can be stored in any Org mode
+file and then loaded into the library with ~org-babel-lob-ingest~.
+
+{{{kindex(C-c C-v i)}}}
+
+Code blocks located in any Org mode file can be loaded into the
+``Library of Babel'' with the ~org-babel-lob-ingest~ function, bound
+to {{{kbd(C-c C-v i)}}}.
+
+** Languages
+   :PROPERTIES:
+   :DESCRIPTION: Supported code block languages
+   :END:
+{{{cindex(babel\\\, languages)}}}
+{{{cindex(source code\\\, languages)}}}
+{{{cindex(code block\\\, languages)}}}
+
+Code blocks in the following languages are supported.
+
+#+attr_texinfo: :columns "0.24 0.24 0.04 0.24 0.24"
+| Language   | Identifier   |   | Language       | Identifier   |
+|------------+--------------+---+----------------+--------------|
+| Asymptote  | asymptote    |   | Awk            | awk          |
+| Emacs Calc | calc         |   | C              | C            |
+| C++        | C++          |   | Clojure        | clojure      |
+| CSS        | css          |   | ditaa          | ditaa        |
+| Graphviz   | dot          |   | Emacs Lisp     | emacs-lisp   |
+| gnuplot    | gnuplot      |   | Haskell        | haskell      |
+| Java       | java         |   |                |              |
+| Javascript | js           |   | LaTeX          | latex        |
+| Ledger     | ledger       |   | Lisp           | lisp         |
+| Lilypond   | lilypond     |   | MATLAB         | matlab       |
+| Mscgen     | mscgen       |   | Objective Caml | ocaml        |
+| Octave     | octave       |   | Org mode       | org          |
+| Oz         | oz           |   | Perl           | perl         |
+| Plantuml   | plantuml     |   | Python         | python       |
+| R          | R            |   | Ruby           | ruby         |
+| Sass       | sass         |   | Scheme         | scheme       |
+| GNU Screen | screen       |   | shell          | sh           |
+| SQL        | sql          |   | SQLite         | sqlite       |
+
+
+Language-specific documentation is available for some languages. If
+available, it can be found at
+[[http://orgmode.org/worg/org-contrib/babel/languages.html]].
+
+The variable ~org-babel-load-languages~ controls which languages are
+enabled for evaluation (by default only ~emacs-lisp~ is enabled). This
+variable can be set using the customization interface or by adding
+code like the following example, disables ~emacs-lisp~ evaluation and
+enables evaluation of ~R~ code blocks, to your emacs configuration:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(org-babel-do-load-languages
+ 'org-babel-load-languages
+ '((emacs-lisp . nil)
+   (R . t)))
+#+end_src
+
+It is also possible to enable support for a language by loading the
+related elisp file with ~require~.
+
+{{{noindent}}} The following example adds support for evaluating
+~clojure~ code blocks:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(require 'ob-clojure)
+#+end_src
+
+** Header arguments
+   :PROPERTIES:
+   :DESCRIPTION: Configure code block functionality
+   :END:
+{{{cindex(code block\\\, header arguments)}}}
+{{{cindex(source code\\\, block header arguments)}}}
+
+Code block functionality can be configured with header arguments. This
+section provides an overview of the use of header arguments, and then
+describes each header argument in detail.
+
+*** Using header arguments
+    :PROPERTIES:
+    :DESCRIPTION: Different ways to set header arguments
+    :END:
+
+The values of header arguments can be set in six different ways, each
+more specific (and having higher priority) than the last.
+
+**** System-wide header arguments
+     :PROPERTIES:
+     :DESCRIPTION: Set global default values
+     :END:
+{{{vindex(org-babel-default-header-args)}}}
+
+System-wide values of header arguments can be specified by customizing
+the ~org-babel-default-header-args~ variable:
+
+#+begin_example
+   :session    => "none"
+   :results    => "replace"
+   :exports    => "code"
+   :cache      => "no"
+   :noweb      => "no"
+#+end_example
+
+#+comment: #+begin_example
+#+comment:   org-babel-default-header-args is a variable defined in `org-babel.el'.
+#+comment:   Its value is
+#+comment:   ((:session . "none")
+#+comment:    (:results . "replace")
+#+comment:    (:exports . "code")
+#+comment:    (:cache . "no")
+#+comment:    (:noweb . "no"))
+
+
+#+comment:   Documentation:
+#+comment:   Default arguments to use when evaluating a code block.
+#+comment: #+end_example
+
+For example, the following code could be used to set the default
+value of ~:noweb~ header arguments to ~yes~. This would have the
+effect of expanding ~:noweb~ references by default when evaluating
+source code blocks.
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+  (setq org-babel-default-header-args
+        (cons '(:noweb . "yes")
+              (assq-delete-all :noweb org-babel-default-header-args)))
+#+end_src
+
+**** Language-specific header arguments
+     :PROPERTIES:
+     :DESCRIPTION: Set default values by language
+     :END:
+
+Each language can define its own set of default header arguments. See
+the language-specific documentation available online at
+[[http://orgmode.org/worg/org-contrib/babel]].
+
+**** Buffer-wide header arguments
+     :PROPERTIES:
+     :DESCRIPTION: Set default values for a specific buffer
+     :END:
+
+Buffer-wide header arguments may be specified as properties through
+the use of ~#+PROPERTY:~ lines placed anywhere in an Org mode file
+(see [[Property syntax]]).
+
+For example the following would set ~session~ to ~*R*~, and ~results~
+to ~silent~ for every code block in the buffer, ensuring that all
+execution took place in the same session, and no results would be
+inserted into the buffer.
+
+#+begin_example
+   ,#+PROPERTY: session *R*
+   ,#+PROPERTY: results silent
+#+end_example
+
+**** Header arguments in Org mode properties
+     :PROPERTIES:
+     :DESCRIPTION: Set default values for a buffer or heading
+     :END:
+
+Header arguments are also read from Org mode properties (see [[Property
+syntax]]), which can be set on a buffer-wide or per-heading basis. An
+example of setting a header argument for all code blocks in a buffer
+is as follows:
+
+#+begin_example
+   ,#+PROPERTY: tangle yes
+#+end_example
+
+{{{vindex(org-use-property-inheritance)}}}
+
+When properties are used to set default header arguments, they are
+looked up with inheritance, regardless of the value of
+~org-use-property-inheritance~. In the following example the value of
+the ~:cache~ header argument will default to ~yes~ in all code blocks
+in the subtree rooted at the following heading:
+
+#+begin_example
+   ,* outline header
+   ,:PROPERTIES:
+   ,:cache:    yes
+   ,:END:
+#+end_example
+
+{{{kindex(C-c C-x p)}}}
+{{{vindex(org-babel-default-header-args)}}}
+
+Properties defined in this way override the properties set in
+~org-babel-default-header-args~. It is convenient to use the
+~org-set-property~ function bound to {{{kbd(C-c C-x p)}}} to set
+properties in Org mode documents.
+
+**** Code block specific header arguments
+     :PROPERTIES:
+     :DESCRIPTION: The most common way to set values
+     :END:
+
+The most common way to assign values to header arguments is at the
+code block level. This can be done by listing a sequence of header
+arguments and their values as part of the ~#+BEGIN_SRC~ line.
+Properties set in this way override both the values of
+~org-babel-default-header-args~ and header arguments specified as
+properties. In the following example, the ~:results~ header argument
+is set to ~silent~, meaning the results of execution will not be
+inserted in the buffer, and the ~:exports~ header argument is set to
+~code~, meaning only the body of the code block will be preserved on
+export to HTML or LaTeX.
+
+#+begin_example
+   #+NAME: factorial
+   #+BEGIN_SRC haskell :results silent :exports code :var n=0
+   fac 0 = 1
+   fac n = n * fac (n-1)
+   #+END_SRC
+#+end_example
+
+Similarly, it is possible to set header arguments for inline code blocks:
+
+#+begin_example
+   src_haskell[:exports both]@{fac 5@}
+#+end_example
+
+Code block header arguments can span multiple lines using ~#+HEADER:~
+or ~#+HEADERS:~ lines preceding a code block or nested between the
+~#+NAME:~ line and the ~#+BEGIN_SRC~ line of a named code block.
+
+{{{cindex(#+HEADER:)}}}
+{{{cindex(#+HEADERS:)}}}
+
+This is an example of multi-line header arguments on an un-named code
+block:
+
+#+begin_example
+   ,#+HEADERS: :var data1=1
+   ,#+BEGIN_SRC emacs-lisp :var data2=2
+      (message "data1:%S, data2:%S" data1 data2)
+   ,#+END_SRC
+
+   ,#+RESULTS:
+   : data1:1, data2:2
+#+end_example
+
+This is an example of multi-line header arguments on a named code block:
+
+#+begin_example
+   ,#+NAME: named-block
+   ,#+HEADER: :var data=2
+   ,#+BEGIN_SRC emacs-lisp
+     (message "data:%S" data)
+   ,#+END_SRC
+
+   ,#+RESULTS: named-block
+    : data:2
+#+end_example
+
+**** Header arguments in function calls
+     :PROPERTIES:
+     :DESCRIPTION: The most specific level
+     :END:
+
+At the most specific level, header arguments for ``Library of Babel''
+or ~#+CALL:~ lines can be set as shown in the two examples below. For
+more information on the structure of ~#+CALL:~ lines see [[Evaluating
+code blocks]].
+
+The following example will apply the ~:exports results~ header
+argument to the evaluation of the ~#+CALL:~ line:
+
+#+begin_example
+   ,#+CALL: factorial(n=5) :exports results
+#+end_example
+
+The following example will apply the ~:session special~ header
+argument to the evaluation of the ~factorial~ code block:
+
+#+begin_example
+   ,#+CALL: factorial[:session special](n=5)
+#+end_example
+
+*** Specific header arguments
+    :PROPERTIES:
+    :DESCRIPTION: List of header arguments
+    :END:
+Header arguments consist of an initial colon followed by the name of
+the argument in lowercase letters. Additional header arguments are
+defined on a language-specific basis, see [[Languages]].
+
+The following header arguments are defined:
+
+**** var
+     :PROPERTIES:
+     :DESCRIPTION: Pass arguments to code blocks
+     :END:
+The ~:var~ header argument is used to pass arguments to code blocks.
+The specifics of how arguments are included in a code block vary by
+language; these are addressed in the language-specific documentation.
+However, the syntax used to specify arguments is the same across all
+languages. In every case, variables require a default value when they
+are declared.
+
+The values passed to arguments can either be literal values,
+references, or Emacs Lisp code (see [[Emacs Lisp evaluation of
+variables]]). References include anything in the Org mode file that
+takes a ~#+NAME:~, ~#+TBLNAME:~, or ~#+RESULTS:~ line. This includes
+tables, lists, ~#+BEGIN_EXAMPLE~ blocks, other code blocks, and the
+results of other code blocks.
+
+Argument values can be indexed in a manner similar to arrays (see
+[[Indexable variable values]]).
+
+The following syntax is used to pass arguments to code blocks using the
+~:var~ header argument:
+
+#+begin_example
+   :var name=assign
+#+end_example
+
+The argument, ~assign~, can either be a literal value, such as a
+string {{{samp("string")}}} or a number {{{samp(9)}}}, or a reference
+to a table, a list, a literal example, another code block (with or
+without arguments), or the results of evaluating another code block.
+
+Here are examples of passing values by reference:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- a table named with either ~#+NAME:~ or ~#+TBLNAME:~ ::
+
+  #+begin_example
+     #+TBLNAME: example-table
+     | 1 |
+     | 2 |
+     | 3 |
+     | 4 |
+
+     #+NAME: table-length
+     #+BEGIN_SRC emacs-lisp :var table=example-table
+     (length table)
+     #+END_SRC
+
+     #+RESULTS: table-length
+     : 4
+  #+end_example
+
+- a simple list named with ~#+NAME:~ :: 
+
+  #+begin_example
+     #+NAME: example-list
+       - simple
+         - not
+         - nested
+       - list
+
+     #+BEGIN_SRC emacs-lisp :var x=example-list
+       (print x)
+     #+END_SRC
+
+     #+RESULTS:
+     | simple | list |
+  #+end_example
+
+  Note that nesting is not carried through to the source code block.
+
+- a named code block without arguments, optionally followed by parentheses ::
+
+  #+begin_example
+     #+BEGIN_SRC emacs-lisp :var length=table-length()
+     (* 2 length)
+     #+END_SRC
+
+     #+RESULTS:
+     : 8
+  #+end_example
+
+- a named code block with arguments ::
+
+  #+begin_example
+     #+NAME: double
+     #+BEGIN_SRC emacs-lisp :var input=8
+     (* 2 input)
+     #+END_SRC
+
+     #+RESULTS: double
+     : 16
+
+     #+NAME: squared
+     #+BEGIN_SRC emacs-lisp :var input=double(input=1)
+     (* input input)
+     #+END_SRC
+
+     #+RESULTS: squared
+     : 4
+  #+end_example
+
+- a literal example block ::
+
+  #+begin_example
+     ,#+NAME: literal-example
+     ,#+BEGIN_EXAMPLE
+     A literal example
+     on two lines
+     ,#+END_EXAMPLE
+
+     ,#+NAME: read-literal-example
+     ,#+BEGIN_SRC emacs-lisp :var x=literal-example
+       (concatenate 'string x " for you.")
+     ,#+END_SRC
+
+     ,#+RESULTS: read-literal-example
+      : A literal example
+      : on two lines for you.
+  #+end_example
+
+#+comment: ***** Alternate argument syntax
+<<Alternate argument syntax>>
+
+It is also possible to specify arguments in a potentially more natural
+way using the ~#+NAME:~ line of a code block. As in the following
+example, arguments can be packed inside of parentheses, separated by
+commas, following the source name.
+
+#+begin_example
+   ,#+NAME: double(input=0, x=2)
+   ,#+BEGIN_SRC emacs-lisp
+    (* 2 (+ input x))
+   ,#+END_SRC
+#+end_example
+
+#+comment: ***** Indexable variable values
+<<Indexable variable values>>
+
+It is possible to reference portions of variable values by
+/indexing/ into the variables. Indexes are 0 based with negative
+values counting back from the end. If an index is separated by commas
+then each subsequent section will index into the next deepest nesting
+or dimension of the value. Note that this indexing occurs /before/
+other table related header arguments like ~:hlines~, ~:colnames~, and
+~:rownames~ are applied. The following example assigns the last cell
+of the first row the table ~example-table~ to the variable ~data~:
+
+#+begin_example
+   ,#+NAME: example-table
+   | 1 | a |
+   | 2 | b |
+   | 3 | c |
+   | 4 | d |
+
+   ,#+BEGIN_SRC emacs-lisp :var data=example-table[0,-1]
+     data
+   ,#+END_SRC
+
+   ,#+RESULTS:
+   : a
+#+end_example
+
+Ranges of variable values can be referenced using two integers
+separated by a ~:~, in which case the entire inclusive range is
+referenced. The following example assigns the middle three rows of
+~example-table~ to ~data~.
+
+#+begin_example
+   #+NAME: example-table
+   | 1 | a |
+   | 2 | b |
+   | 3 | c |
+   | 4 | d |
+   | 5 | 3 |
+
+   #+BEGIN_SRC emacs-lisp :var data=example-table[1:3]
+     data
+   #+END_SRC
+
+   #+RESULTS:
+   | 2 | b |
+   | 3 | c |
+   | 4 | d |
+#+end_example
+
+Additionally, an empty index, or the single character ~*~, are both
+interpreted to mean the entire range and as such are equivalent to
+~0:-1~, as shown in the following example in which the entire first
+column is referenced:
+
+#+begin_example
+   #+NAME: example-table
+   | 1 | a |
+   | 2 | b |
+   | 3 | c |
+   | 4 | d |
+
+   #+BEGIN_SRC emacs-lisp :var data=example-table[,0]
+     data
+   #+END_SRC
+
+   #+RESULTS:
+   | 1 | 2 | 3 | 4 |
+#+end_example
+
+It is possible to index into the results of code blocks as well as
+tables. Any number of dimensions can be indexed. Dimensions are
+separated from one another by commas, as shown in the following
+example:
+
+#+begin_example
+   #+NAME: 3D
+   #+BEGIN_SRC emacs-lisp
+     '(((1  2  3)  (4  5  6)  (7  8  9))
+       ((10 11 12) (13 14 15) (16 17 18))
+       ((19 20 21) (22 23 24) (25 26 27)))
+   #+END_SRC
+
+   #+BEGIN_SRC emacs-lisp :var data=3D[1,,1]
+     data
+   #+END_SRC
+
+   #+RESULTS:
+   | 11 | 14 | 17 |
+#+end_example
+
+#+comment: ***** Emacs Lisp evaluation of variables
+<<Emacs Lisp evaluation of variables>>
+
+Emacs lisp code can be used to initialize variable values. When a
+variable value starts with ~(~, ~[~, ~'~ or ~`~ it will be evaluated
+as Emacs Lisp and the result of the evaluation will be assigned as the
+variable value. The following example demonstrates use of this
+evaluation to reliably pass the file-name of the Org mode buffer to a
+code block:[fn:150]
+
+#+begin_example
+   #+BEGIN_SRC sh :var filename=(buffer-file-name) :exports both
+     wc -w $filename
+   #+END_SRC
+#+end_example
+
+Note that values read from tables and lists will not be evaluated as
+Emacs Lisp, as shown in the following example, which contains a Lisp
+list as the sole table element:
+
+#+begin_example
+   #+NAME: table
+   | (a b c) |
+
+   #+HEADERS: :var data=table[0,0]
+   #+BEGIN_SRC perl
+     $data
+   #+END_SRC
+
+   #+RESULTS:
+   : (a b c)
+#+end_example
+
+**** results
+     :PROPERTIES:
+     :DESCRIPTION: Specify the type of results and how they will be collected and handled
+     :END:
+There are three classes of ~:results~ header argument.  Only one option
+per class may be supplied per code block.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- Collection ::
+
+  These header arguments specify how the results should be collected
+  from the code block.
+
+- Type ::
+
+  These header arguments specify what type of result the code block will
+  return---which has implications for how they will be inserted into the
+  Org mode buffer.
+
+- Handling ::
+
+  These header arguments specify how the results of evaluating the code
+  block should be handled.
+
+#+comment: ***** Collection
+<<Collection>>
+
+The following ~:results~ options are mutually exclusive, and specify
+how the results should be collected from the code block.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~value~ ::
+
+  This is the default. The result is the value of the last statement in
+  the code block. This header argument places the evaluation in
+  functional mode. Note that in some languages, e.g., Python, use of
+  this result type requires that a ~return~ statement be included in the
+  body of the source code block.
+
+- ~output~ ::
+
+  The result is the collection of everything printed to STDOUT during
+  the execution of the code block. This header argument places the
+  evaluation in scripting mode.
+
+#+comment: ***** Type
+<<Type>>
+
+The following ~:results~ options are mutually exclusive and specify
+what type of results the code block will return. By default, results
+are inserted as either a table or scalar depending on their value.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~table~, ~vector~ ::
+
+  The results should be interpreted as an Org mode table. If a single
+  value is returned, it will be converted into a table with one row and
+  one column. E.g., ~:results value table~.
+
+- ~scalar~, ~verbatim~ ::
+
+  The results should be interpreted literally---they will not be
+  converted into a table. The results will be inserted into the Org mode
+  buffer as quoted text. E.g., ~:results value verbatim~.
+
+- ~list~ ::
+
+  The results should be interpreted as an Org mode list. If a single
+  scalar value is returned it will be converted into a list with only
+  one element.
+
+- ~file~ ::
+
+  The results will be interpreted as the path to a file, and will be
+  inserted into the Org mode buffer as a file link. E.g., ~:results
+  value file~.
+
+- ~raw~ ::
+
+  The results are interpreted as raw Org mode code and are inserted
+  directly into the buffer. If the results look like a table they will
+  be aligned as such by Org mode. E.g., ~:results value raw~.
+
+- ~org~ ::
+
+  The results are will be enclosed in a ~BEGIN_SRC org~ block. They are
+  not comma-escaped by default but they will be if you hit
+  {{{kbd(TAB)}}} in the block and/or if you export the file. E.g.,
+  ~:results value org~.
+
+- ~html~ ::
+
+  Results are assumed to be HTML and will be enclosed in a ~BEGIN_HTML~
+  block. E.g., ~:results value html~.
+
+- ~latex~ ::
+
+  Results assumed to be LaTeX and are enclosed in a ~BEGIN_LaTeX~
+  block. E.g., ~:results value latex~.
+
+- ~code~ ::
+
+  Result are assumed to be parsable code and are enclosed in a code
+  block. E.g., ~:results value code~.
+
+- ~pp~ ::
+
+  The result is converted to pretty-printed code and is enclosed in a
+  code block. This option currently supports Emacs Lisp, Python, and
+  Ruby. E.g., ~:results value pp~.
+
+- ~drawer~ ::
+
+  The result is wrapped in a RESULTS drawer. This can be useful for
+  inserting ~raw~ or ~org~ syntax results in such a way that their
+  extent is known and they can be automatically removed or replaced.
+
+#+comment: ***** Handling
+<<Handling>>
+The following ~:results~ options indicate what happens with the
+results once they are collected.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~replace~ ::
+
+  The default value. Any existing results will be removed, and the new
+  results will be inserted into the Org mode buffer in their place.
+  E.g., ~:results output replace~.
+
+- ~append~ ::
+
+  If there are pre-existing results of the code block then the new
+  results will be appended to the existing results. Otherwise the new
+  results will be inserted as with ~replace~.
+
+- ~prepend~ ::
+
+  If there are pre-existing results of the code block then the new
+  results will be prepended to the existing results. Otherwise the new
+  results will be inserted as with ~replace~.
+
+- ~silent~ ::
+
+  The results will be echoed in the minibuffer but will not be inserted
+  into the Org mode buffer. E.g., ~:results output silent~.
+
+**** file
+     :PROPERTIES:
+     :DESCRIPTION: Specify a path for file output
+     :END:
+
+The header argument ~:file~ is used to specify an external file in
+which to save code block results. After code block evaluation an Org
+mode style ~[[file:]]~ link (see [[Link format]]) to the file will be inserted
+into the Org mode buffer. Some languages including R, gnuplot, dot,
+and ditaa provide special handling of the ~:file~ header argument,
+automatically wrapping the code block body in the boilerplate code
+required to save output to the specified file. This is often useful
+for saving graphical output of a code block to the specified file.
+
+The argument to ~:file~ should be either a string specifying the path
+to a file, or a list of two strings in which case the first element of
+the list should be the path to a file and the second a description for
+the link.
+
+**** file-desc
+     :PROPERTIES:
+     :DESCRIPTION: Specify a description for file results
+     :END:
+
+The value of the ~:file-desc~ header argument is used to provide a
+description for file code block results which are inserted as Org mode
+links (see [[Link format]]). If the ~:file-desc~ header argument is given
+with no value the link path will be placed in both the ``link'' and
+the ``description'' portion of the Org mode link.
+
+**** dir
+     :PROPERTIES:
+     :DESCRIPTION: Specify the default (possibly remote) directory for code block execution
+     :TITLE:    ~:dir~ and remote execution
+     :END:
+
+While the ~:file~ header argument can be used to specify the path to
+the output file, ~:dir~ specifies the default directory during code
+block execution. If it is absent, then the directory associated with
+the current buffer is used. In other words, supplying ~:dir path~
+temporarily has the same effect as changing the current directory with
+{{{kbd(M-x cd path)}}}, and then not supplying ~:dir~. Under the
+surface, ~:dir~ simply sets the value of the Emacs variable
+~default-directory~.
+
+When using ~:dir~, you should supply a relative path for file output
+(e.g., ~:file myfile.jpg~ or ~:file results/myfile.jpg~) in which
+case that path will be interpreted relative to the default directory.
+
+In other words, if you want your plot to go into a folder called
+{{{file(Work)}}} in your home directory, you could use a code block
+like the following example:
+
+#+begin_example
+   #+BEGIN_SRC R :file myplot.png :dir ~/Work
+   matplot(matrix(rnorm(100), 10), type="l")
+   #+END_SRC
+#+end_example
+
+#+comment: ***** Remote execution
+<<Remote execution>>
+
+A directory on a remote machine can be specified using tramp file
+syntax, in which case the code will be evaluated on the remote
+machine. An example is:
+
+#+begin_example
+   #+BEGIN_SRC R :file plot.png :dir /dand@yakuba.princeton.edu:
+   plot(1:10, main=system("hostname", intern=TRUE))
+   #+END_SRC
+#+end_example
+
+Text results will be returned to the local Org mode buffer as usual,
+and file output will be created on the remote machine with relative
+paths interpreted relative to the remote directory. An Org mode link
+to the remote file will be created.
+
+So, in the above example a plot will be created on the remote machine,
+and a link of the following form will be inserted in the org buffer:
+
+#+begin_example
+   [[file:/scp:dand@yakuba.princeton.edu:/home/dand/plot.png][plot.png]]
+#+end_example
+
+Most of this functionality follows immediately from the fact that
+~:dir~ sets the value of the Emacs variable ~default-directory~,
+thanks to tramp. Those using XEmacs, or GNU Emacs prior to version 23
+may need to install tramp separately in order for these features to
+work correctly.
+
+#+comment: ***** Further points
+<<Further points>>
+Please be aware of these further points:
+
+- If ~:dir~ is used in conjunction with ~:session~, although it will
+  determine the starting directory for a new session as expected, no
+  attempt is currently made to alter the directory associated with an
+  existing session.
+
+- ~:dir~ should typically not be used to create files during export
+  with ~:exports results~ or ~:exports both~.  The reason is that, in
+  order to retain portability of exported material between machines,
+  during export links inserted into the buffer will /not/ be expanded
+  against ~default directory~.  Therefore, if ~default-directory~ is
+  altered using ~:dir~, it is probable that the file will be created
+  in a location to which the link does not point.
+
+**** exports
+     :PROPERTIES:
+     :DESCRIPTION: Export code and/or results
+     :END:
+The ~:exports~ header argument specifies what should be included in HTML
+or LaTeX exports of the Org mode file.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~code~ ::
+
+  The default. The body of code is included into the exported file.
+  E.g., ~:exports code~.
+
+- ~results~ ::
+
+  The result of evaluating the code is included in the exported file.
+  E.g., ~:exports results~.
+
+- ~both~ ::
+
+  Both the code and results are included in the exported file. E.g.,
+  ~:exports both~.
+
+- ~none~ ::
+
+  Nothing is included in the exported file.  E.g., ~:exports none~.
+
+**** tangle
+     :PROPERTIES:
+     :DESCRIPTION: Toggle tangling and specify file name
+     :END:
+
+The ~:tangle~ header argument specifies whether or not the code
+block should be included in tangled extraction of source code files.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~tangle~ ::
+
+  The code block is exported to a source code file named after the full
+  path (including the directory) and file name (w/o extension) of the
+  Org mode file. E.g., ~:tangle yes~.
+
+- ~no~ ::
+
+  The default. The code block is not exported to a source code file.
+  E.g., ~:tangle no~.
+
+- other ::
+
+  Any other string passed to the ~:tangle~ header argument is
+  interpreted as a path (directory and file name relative to the
+  directory of the Org mode file) to which the block will be exported,
+  e.g., ~:tangle path~.
+
+**** mkdirp
+:PROPERTIES:
+:DESCRIPTION: Toggle creation of parent directories of target files during tangling
+:END:
+
+The ~:mkdirp~ header argument can be used to create parent directories
+of tangled files when missing. This can be set to ~yes~ to enable
+directory creation or to ~no~ to inhibit directory creation.
+
+**** comments
+:PROPERTIES:
+:DESCRIPTION: Toggle insertion of comments in tangled code files
+:END:
+
+By default code blocks are tangled to source-code files without any
+insertion of comments beyond those which may already exist in the body
+of the code block. The ~:comments~ header argument can be set as
+follows to control the insertion of extra comments into the tangled
+code file.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~no~ ::
+
+  The default.  No extra comments are inserted during tangling.
+
+- ~link~ ::
+
+  The code block is wrapped in comments which contain pointers back to
+  the original Org file from which the code was tangled.
+
+- ~yes~ ::
+
+  A synonym for ``link'' to maintain backwards compatibility.
+
+- ~org~ ::
+
+  Include text from the Org mode file as a comment.
+
+  The text is picked from the leading context of the tangled code and is
+  limited by the nearest headline or source block as the case may be.
+
+- ~both~ ::
+
+  Turns on both the ``link'' and ``org'' comment options.
+
+- ~noweb~ ::
+
+  Turns on the ``link'' comment option, and additionally wraps expanded
+  noweb references in the code block body in link comments.
+
+**** padline
+:PROPERTIES:
+:DESCRIPTION: Control insertion of padding lines in tangle code files
+:END:
+
+Control in insertion of padding lines around code block bodies in tangled
+code files.  The default value is ~yes~ which results in insertion of
+newlines before and after each tangled code block.  The following arguments
+are accepted:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~yes~ ::
+
+  Insert newlines before and after each code block body in tangled code
+  files.
+
+- ~no~ ::
+
+  Do not insert any newline padding in tangled output.
+
+**** no-expand
+:PROPERTIES:
+:DESCRIPTION: Turn off variable assignment and noweb expansion during tangling
+:END:
+
+By default, code blocks are expanded with ~org-babel-expand-src-block~
+during tangling. This has the effect of assigning values to variables
+specified with ~:var~ (see [[var]]), and of replacing ``noweb'' references
+(see [[Noweb reference syntax]]) with their targets. The ~:no-expand~
+header argument can be used to turn off this behavior.
+
+**** session
+:PROPERTIES:
+:DESCRIPTION: Preserve state of code evaluation
+:END:
+
+The ~:session~ header argument starts a session for an interpreted
+language where state is preserved.
+
+By default, a session is not started.
+
+A string passed to the ~:session~ header argument will give the
+session a name. This makes it possible to run concurrent sessions for
+each interpreted language.
+
+**** noweb
+:PROPERTIES:
+:DESCRIPTION: Toggle expansion of noweb references
+:END:
+
+The ~:noweb~ header argument controls expansion of ``noweb'' syntax
+references (see [[Noweb reference syntax]]) when the code block is
+evaluated, tangled, or exported. The ~:noweb~ header argument can have
+one of the five values: ~no~, ~yes~, ~tangle~, ~no-export~, or
+~strip-export~.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~no~ ::
+
+  The default. ``Noweb'' syntax references in the body of the code block
+  will not be expanded before the code block is evaluated, tangled or
+  exported.
+
+- ~yes~ ::
+
+  ``Noweb'' syntax references in the body of the code block will be
+  expanded before the code block is evaluated, tangled or exported.
+
+- ~tangle~ ::
+
+  ``Noweb'' syntax references in the body of the code block will be
+  expanded before the code block is tangled. However, ``noweb'' syntax
+  references will not be expanded when the code block is evaluated or
+  exported.
+
+- ~no-export~ ::
+
+  ``Noweb'' syntax references in the body of the code block will be
+  expanded before the block is evaluated or tangled. However, ``noweb''
+  syntax references will not be expanded when the code block is
+  exported.
+
+- ~strip-export~ ::
+
+  ``Noweb'' syntax references in the body of the code block will be
+  expanded before the block is evaluated or tangled. However, ``noweb''
+  syntax references will not be removed when the code block is exported.
+
+- ~eval~ ::
+
+  ``Noweb'' syntax references in the body of the code block will only be
+  expanded before the block is evaluated.
+
+#+comment: ***** Noweb prefix lines
+<<Noweb prefix lines>>
+
+Noweb insertions are placed behind the line prefix of the
+~<<reference>>~. Because the ~<<example>>~ noweb reference appears
+behind the SQL comment syntax in the following example, each line of
+the expanded noweb reference will be commented.
+
+This code block:
+
+#+begin_example
+   -- <<example>>
+#+end_example
+
+
+expands to:
+
+#+begin_example
+   -- this is the
+   -- multi-line body of example
+#+end_example
+
+Note that noweb replacement text that does not contain any newlines
+will not be inserted behind the line prefix, so it is always possible
+to use inline noweb references.
+
+**** noweb-ref
+:PROPERTIES:
+:DESCRIPTION: Specify block's noweb reference resolution target
+:END:
+
+When expanding ``noweb'' style references the bodies of all code block
+with /either/ a block name matching the reference name /or/ a
+~:noweb-ref~ header argument matching the reference name will be
+concatenated together to form the replacement text.
+
+By setting this header argument at the sub-tree or file level, simple code
+block concatenation may be achieved.  For example, when tangling the
+following Org mode file, the bodies of code blocks will be concatenated into
+the resulting pure code file.[fn:151]
+
+#+begin_example
+   #+BEGIN_SRC sh :tangle yes :noweb yes :shebang #!/bin/sh
+     <<fullest-disk>>
+   #+END_SRC
+  ,* the mount point of the fullest disk
+     :PROPERTIES:
+     :noweb-ref: fullest-disk
+     :END:
+
+   ,** query all mounted disks
+   #+BEGIN_SRC sh
+     df \
+   #+END_SRC
+
+   ,** strip the header row
+   #+BEGIN_SRC sh
+     |sed '1d' \
+   #+END_SRC
+
+   ,** sort by the percent full
+   #+BEGIN_SRC sh
+     |awk '@{print $5 " " $6@}'|sort -n |tail -1 \
+   #+END_SRC
+
+   ,** extract the mount point
+   #+BEGIN_SRC sh
+     |awk '@{print $2@}'
+   #+END_SRC
+#+end_example
+
+The ~:noweb-sep~ (see [[noweb-sep]]) header argument holds the string used
+to separate accumulate noweb references like those above. By default a
+newline is used.
+
+**** noweb-sep
+:PROPERTIES:
+:DESCRIPTION: String used to separate noweb references
+:END:
+
+The ~:noweb-sep~ header argument holds the string used to separate
+accumulated noweb references (see [[noweb-ref]]). By default a newline is
+used.
+
+**** cache
+:PROPERTIES:
+:DESCRIPTION: Avoid re-evaluating unchanged code blocks
+:END:
+
+The ~:cache~ header argument controls the use of in-buffer caching of
+the results of evaluating code blocks. It can be used to avoid
+re-evaluating unchanged code blocks. Note that the ~:cache~ header
+argument will not attempt to cache results when the ~:session~ header
+argument is used, because the results of the code block execution may
+be stored in the session outside of the Org mode buffer. The ~:cache~
+header argument can have one of two values: ~yes~ or ~no~.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~no~ ::
+
+  The default. No caching takes place, and the code block will be
+  evaluated every time it is called.
+
+- ~yes~ ::
+
+  Every time the code block is run a SHA1 hash of the code and arguments
+  passed to the block will be generated. This hash is packed into the
+  ~#+RESULTS:~ line and will be checked on subsequent executions of the
+  code block. If the code block has not changed since the last time it
+  was evaluated, it will not be re-evaluated.
+
+
+Code block caches notice if the value of a variable argument
+to the code block has changed.  If this is the case, the cache is
+invalidated and the code block is re-run.  In the following example,
+~caller~ will not be re-run unless the results of ~random~ have
+changed since it was last run.
+
+#+begin_example
+   #+NAME: random
+   #+BEGIN_SRC R :cache yes
+   runif(1)
+   #+END_SRC
+
+   #+RESULTS[a2a72cd647ad44515fab62e144796432793d68e1]: random
+   0.4659510825295
+
+   #+NAME: caller
+   #+BEGIN_SRC emacs-lisp :var x=random :cache yes
+   x
+   #+END_SRC
+
+   #+RESULTS[bec9c8724e397d5df3b696502df3ed7892fc4f5f]: caller
+   0.254227238707244
+#+end_example
+
+**** sep
+:PROPERTIES:
+:DESCRIPTION: Delimiter for writing tabular results outside Org
+:END:
+{{{kindex(C-c C-o)}}}
+
+The ~:sep~ header argument can be used to control the delimiter used
+when writing tabular results out to files external to Org mode. This
+is used either when opening tabular results of a code block by calling
+the ~org-open-at-point~ function bound to {{{kbd(C-c C-o)}}} on the
+code block, or when writing code block results to an external file
+(see [[file]]) header argument.
+
+By default, when ~:sep~ is not specified output tables are tab
+delimited.
+
+**** hlines
+:PROPERTIES:
+:DESCRIPTION: Handle horizontal lines in tables
+:END:
+
+Tables are frequently represented with one or more horizontal lines,
+or hlines. The ~:hlines~ argument to a code block accepts the values
+~yes~ or ~no~, with a default value of ~no~.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~no~ ::
+
+  Strips horizontal lines from the input table. In most languages this
+  is the desired effect because an ~hline~ symbol is interpreted as an
+  unbound variable and raises an error. Setting ~:hlines no~ or relying
+  on the default value yields the following results.
+
+  #+begin_example
+     #+TBLNAME: many-cols
+     | a | b | c |
+     |---+---+---|
+     | d | e | f |
+     |---+---+---|
+     | g | h | i |
+
+     #+NAME: echo-table
+     #+BEGIN_SRC python :var tab=many-cols
+       return tab
+     #+END_SRC
+
+     #+RESULTS: echo-table
+     | a | b | c |
+     | d | e | f |
+     | g | h | i |
+  #+end_example
+
+- ~yes~ ::
+
+  Leaves hlines in the table. Setting ~:hlines yes~ has this effect.
+
+  #+begin_example
+     #+TBLNAME: many-cols
+     | a | b | c |
+     |---+---+---|
+     | d | e | f |
+     |---+---+---|
+     | g | h | i |
+
+     #+NAME: echo-table
+     #+BEGIN_SRC python :var tab=many-cols :hlines yes
+       return tab
+     #+END_SRC
+
+     #+RESULTS: echo-table
+     | a | b | c |
+     |---+---+---|
+     | d | e | f |
+     |---+---+---|
+     | g | h | i |
+  #+end_example
+
+**** colnames
+:PROPERTIES:
+:DESCRIPTION: Handle column names in tables
+:END:
+
+The ~:colnames~ header argument accepts the values ~yes~, ~no~, or
+~nil~ for unassigned. The default value is ~nil~. Note that the
+behavior of the ~:colnames~ header argument may differ across
+languages. For example Emacs Lisp code blocks ignore the ~:colnames~
+header argument entirely given the ease with which tables with column
+names may be handled directly in Emacs Lisp.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~nil~ ::
+
+  If an input table looks like it has column names (because its second
+  row is an hline), then the column names will be removed from the table
+  before processing, then reapplied to the results.
+
+  #+begin_example
+     #+TBLNAME: less-cols
+     | a |
+     |---|
+     | b |
+     | c |
+
+     #+NAME: echo-table-again
+     #+BEGIN_SRC python :var tab=less-cols
+       return [[val + '*' for val in row] for row in tab]
+     #+END_SRC
+
+     #+RESULTS: echo-table-again
+     | a  |
+     |----|
+     | b* |
+     | c* |
+  #+end_example
+
+  Please note that column names are not removed before the table is
+  indexed using variable indexing. See [[Indexable variable values]].
+
+- ~no~ ::
+
+  No column name pre-processing takes place
+
+- ~yes~ ::
+
+  Column names are removed and reapplied as with ~nil~ even if the table
+  does not ``look like'' it has column names (i.e., the second row is
+  not an hline).
+
+**** rownames
+:PROPERTIES:
+:DESCRIPTION: Handle row names in tables
+:END:
+
+The ~:rownames~ header argument can take on the values ~yes~
+or ~no~, with a default value of ~no~.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~no~ ::
+
+  No row name pre-processing will take place.
+
+- ~yes~ ::
+
+  The first column of the table is removed from the table before
+  processing, and is then reapplied to the results.
+
+  #+begin_example
+     #+TBLNAME: with-rownames
+     | one | 1 | 2 | 3 | 4 |  5 |
+     | two | 6 | 7 | 8 | 9 | 10 |
+
+     #+NAME: echo-table-once-again
+     #+BEGIN_SRC python :var tab=with-rownames :rownames yes
+       return [[val + 10 for val in row] for row in tab]
+     #+END_SRC
+
+     #+RESULTS: echo-table-once-again
+     | one | 11 | 12 | 13 | 14 | 15 |
+     | two | 16 | 17 | 18 | 19 | 20 |
+  #+end_example
+
+  Please note that row names are not removed before the table is indexed
+  using variable indexing. See [[Indexable variable values]].
+
+**** shebang
+:PROPERTIES:
+:DESCRIPTION: Make tangles files executable
+:END:
+
+Setting the ~:shebang~ header argument to a string value (e.g.,
+{{{samp(:shebang "#!/bin/bash")}}}) causes the string to be inserted as the
+first line of any tangled file holding the code block, and the file
+permissions of the tangled file are set to make it executable.
+
+**** eval
+:PROPERTIES:
+:DESCRIPTION: Limit evaluation of specific code blocks
+:END:
+
+The ~:eval~ header argument can be used to limit the evaluation of
+specific code blocks. The ~:eval~ header argument can be useful for
+protecting against the evaluation of dangerous code blocks or to
+ensure that evaluation will require a query regardless of the value of
+the ~org-confirm-babel-evaluate~ variable. The possible values of
+~:eval~ and their effects are shown below.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~never~ or ~no~ ::
+
+  The code block will not be evaluated under any circumstances.
+
+- ~query~ ::
+
+  Evaluation of the code block will require an affirmative answer to a
+  query.
+
+- ~never-export~ or ~no-export~ ::
+
+  The code block will not be evaluated during export but may still be
+  called interactively.
+
+- ~query-export~ ::
+
+  Evaluation of the code block during export will require an affirmative
+  answer to a query.
+
+
+If this header argument is not set then evaluation is determined by the value
+of the ~org-confirm-babel-evaluate~ variable (see [[Code evaluation
+security]]).
+
+**** wrap
+:PROPERTIES:
+:DESCRIPTION: Mark source block evaluation results
+:END:
+
+The ~:wrap~ header argument is used to mark the results of source
+block evaluation. The header argument can be passed a string that will
+be appended to ~#+BEGIN_~ and ~#+END_~, which will then be used to
+wrap the results. If no string is specified then the results will be
+wrapped in a ~#+BEGIN/END_RESULTS~ block.
+
+** Results of evaluation
+   :PROPERTIES:
+   :DESCRIPTION: How evaluation results are handled
+   :END:
+{{{cindex(code block\\\, results of evaluation)}}}
+{{{cindex(source code\\\, results of evaluation)}}}
+
+The way in which results are handled depends on whether a session is
+invoked, as well as on whether ~:results value~ or ~:results output~
+is used. The following table shows the table possibilities. For a full
+listing of the possible results header arguments, see [[results]].
+
+|                   | *Non-session*            | *Session*                           |
+|-------------------+--------------------------+-------------------------------------|
+| ~:results value~  | value of last expression | value of last expression            |
+| ~:results output~ | contents of STDOUT       | concatenation of interpreter output |
+
+
+Please note that with ~:results value~, the result in both ~:session~
+and non-session is returned to Org mode as a table (a one- or
+two-dimensional vector of strings or numbers) when appropriate.
+
+*** Non-session
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~:results value~ ::
+
+  This is the default. Internally, the value is obtained by wrapping the
+  code in a function definition in the external language, and evaluating
+  that function. Therefore, code should be written as if it were the
+  body of such a function. In particular, note that Python does not
+  automatically return a value from a function unless a ~return~
+  statement is present, and so a {{{samp(return)}}} statement will
+  usually be required in Python.
+
+  This is the only one of the four evaluation contexts in which the code
+  is automatically wrapped in a function definition.
+
+- ~:results output~ ::
+
+  The code is passed to the interpreter as an external process, and the
+  contents of the standard output stream are returned as text.[fn:152]
+
+*** Session
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~:results value~ ::
+
+  The code is passed to an interpreter running as an interactive Emacs
+  inferior process. Only languages which provide tools for interactive
+  evaluation of code have session support, so some language (e.g., C and
+  ditaa) do not support the ~:session~ header argument, and in other
+  languages (e.g., Python and Haskell) which have limitations on the
+  code which may be entered into interactive sessions, those limitations
+  apply to the code in code blocks using the ~:session~ header argument
+  as well.
+
+  Unless the ~:results output~ option is supplied (see below) the result
+  returned is the result of the last evaluation performed by the
+  interpreter.[fn:153]
+
+- ~:results output~ ::
+
+  The code is passed to the interpreter running as an interactive Emacs
+  inferior process. The result returned is the concatenation of the
+  sequence of (text) output from the interactive interpreter. Notice
+  that this is not necessarily the same as what would be sent to
+  ~STDOUT~ if the same code were passed to a non-interactive interpreter
+  running as an external process. Compare the following two
+  examples:
+
+  #+begin_example
+     #+BEGIN_SRC python :results output
+      print "hello"
+      2
+      print "bye"
+     #+END_SRC
+
+     #+RESULTS:
+     : hello
+     : bye
+  #+end_example
+
+  In non-session mode, the `2' is not printed and does not appear.
+
+  #+begin_example
+     #+BEGIN_SRC python :results output :session
+      print "hello"
+      2
+      print "bye"
+     #+END_SRC
+
+     #+RESULTS:
+     : hello
+     : 2
+     : bye
+  #+end_example
+
+  But in ~:session~ mode, the interactive interpreter receives input `2'
+  and prints out its value, `2'. (Indeed, the other print statements are
+  unnecessary here).
+
+** Noweb reference syntax
+   :PROPERTIES:
+   :DESCRIPTION: Literate programming in Org mode
+   :END:
+{{{cindex(code block\\\, noweb reference)}}}
+{{{cindex(syntax\\\, noweb)}}}
+{{{cindex(source code\\\, noweb reference)}}}
+
+The ``noweb'' (see [[http://www.cs.tufts.edu/~nr/noweb/]]) Literate
+Programming system allows named blocks of code to be referenced using
+the familiar Noweb syntax:
+
+#+begin_example
+   <<code-block-name>>
+#+end_example
+
+When a code block is tangled or evaluated, whether or not ``noweb''
+references are expanded depends upon the value of the ~:noweb~ header
+argument. If ~:noweb yes~, then a Noweb reference is expanded before
+evaluation. If ~:noweb no~, the default, then the reference is not
+expanded before evaluation. See the [[noweb-ref]] header argument for a
+more flexible way to resolve noweb references.
+
+It is possible to include the /results/ of a code block rather than
+the body. This is done by appending parenthesis to the code block
+name, which may optionally contain arguments to the code block as
+shown below.
+
+#+begin_example
+   <<code-block-name(optional arguments)>>
+#+end_example
+
+Note that the default value, ~:noweb no~, was chosen to ensure that
+correct code is not broken in a language, such as Ruby, where
+~<<arg>>~ is a syntactically valid construct. If ~<<arg>>~ is not
+syntactically valid in languages that you use, then please consider
+setting the default value.
+
+If noweb tangling is slow in large Org mode files, consider
+setting the ~*org-babel-use-quick-and-dirty-noweb-expansion*~ variable
+to true. This will result in faster noweb reference resolution at the
+expense of not correctly resolving inherited values of the
+~:noweb-ref~ header argument.
+
+** Key bindings and useful functions
+   :PROPERTIES:
+   :DESCRIPTION: Work quickly with code blocks
+   :END:
+{{{cindex(code block\\\, key bindings)}}}
+
+Many common Org mode key sequences are re-bound depending on
+the context.
+
+Within a code block, the following key bindings
+are active:
+{{{kindex(C-c C-c)}}}
+{{{kindex(C-c C-o)}}}
+{{{kindex(C-up)}}}
+{{{kindex(M-down)}}}
+
+#+attr_texinfo: :columns "0.2 0.55"
+| Key binding           | Function                          |
+|-----------------------+-----------------------------------|
+| {{{kbd(C-c C-c)}}}    | ~org-babel-execute-src-block~     |
+| {{{kbd(C-c C-o)}}}    | ~org-babel-open-src-block-result~ |
+| {{{kbdkey(C-,up)}}}   | ~org-babel-load-in-session~       |
+| {{{kbdkey(M-,down)}}} | ~org-babel-pop-to-session~        |
+
+
+In an Org mode buffer, the following key bindings are active:
+
+{{{kindex(C-c C-v p)}}}
+{{{kindex(C-c C-v C-p)}}}
+{{{kindex(C-c C-v n)}}}
+{{{kindex(C-c C-v C-n)}}}
+{{{kindex(C-c C-v e)}}}
+{{{kindex(C-c C-v C-e)}}}
+{{{kindex(C-c C-v o)}}}
+{{{kindex(C-c C-v C-o)}}}
+{{{kindex(C-c C-v v)}}}
+{{{kindex(C-c C-v C-v)}}}
+{{{kindex(C-c C-v u)}}}
+{{{kindex(C-c C-v C-u)}}}
+{{{kindex(C-c C-v g)}}}
+{{{kindex(C-c C-v C-g)}}}
+{{{kindex(C-c C-v r)}}}
+{{{kindex(C-c C-v C-r)}}}
+{{{kindex(C-c C-v b)}}}
+{{{kindex(C-c C-v C-b)}}}
+{{{kindex(C-c C-v s)}}}
+{{{kindex(C-c C-v C-s)}}}
+{{{kindex(C-c C-v d)}}}
+{{{kindex(C-c C-v C-d)}}}
+{{{kindex(C-c C-v t)}}}
+{{{kindex(C-c C-v C-t)}}}
+{{{kindex(C-c C-v f)}}}
+{{{kindex(C-c C-v C-f)}}}
+{{{kindex(C-c C-v c)}}}
+{{{kindex(C-c C-v C-c)}}}
+{{{kindex(C-c C-v j)}}}
+{{{kindex(C-c C-v C-j)}}}
+{{{kindex(C-c C-v l)}}}
+{{{kindex(C-c C-v C-l)}}}
+{{{kindex(C-c C-v i)}}}
+{{{kindex(C-c C-v C-i)}}}
+{{{kindex(C-c C-v I)}}}
+{{{kindex(C-c C-v C-I)}}}
+{{{kindex(C-c C-v z)}}}
+{{{kindex(C-c C-v C-z)}}}
+{{{kindex(C-c C-v a)}}}
+{{{kindex(C-c C-v C-a)}}}
+{{{kindex(C-c C-v h)}}}
+{{{kindex(C-c C-v C-h)}}}
+{{{kindex(C-c C-v x)}}}
+{{{kindex(C-c C-v C-x)}}}
+
+#+attr_texinfo: :columns "0.4 0.6"
+| Key binding                                    | Function                                   |
+|------------------------------------------------+--------------------------------------------|
+| {{{kbd(C-c C-v p)}}} or {{{kbd(C-c C-v C-p)}}} | ~org-babel-previous-src-block~             |
+| {{{kbd(C-c C-v n)}}} or {{{kbd(C-c C-v C-n)}}} | ~org-babel-next-src-block~                 |
+| {{{kbd(C-c C-v e)}}} or {{{kbd(C-c C-v C-e)}}} | ~org-babel-execute-maybe~                  |
+| {{{kbd(C-c C-v o)}}} or {{{kbd(C-c C-v C-o)}}} | ~org-babel-open-src-block-result~          |
+| {{{kbd(C-c C-v v)}}} or {{{kbd(C-c C-v C-v)}}} | ~org-babel-expand-src-block~               |
+| {{{kbd(C-c C-v u)}}} or {{{kbd(C-c C-v C-u)}}} | ~org-babel-goto-src-block-head~            |
+| {{{kbd(C-c C-v g)}}} or {{{kbd(C-c C-v C-g)}}} | ~org-babel-goto-named-src-block~           |
+| {{{kbd(C-c C-v r)}}} or {{{kbd(C-c C-v C-r)}}} | ~org-babel-goto-named-result~              |
+| {{{kbd(C-c C-v b)}}} or {{{kbd(C-c C-v C-b)}}} | ~org-babel-execute-buffer~                 |
+| {{{kbd(C-c C-v s)}}} or {{{kbd(C-c C-v C-s)}}} | ~org-babel-execute-subtree~                |
+| {{{kbd(C-c C-v d)}}} or {{{kbd(C-c C-v C-d)}}} | ~org-babel-demarcate-block~                |
+| {{{kbd(C-c C-v t)}}} or {{{kbd(C-c C-v C-t)}}} | ~org-babel-tangle~                         |
+| {{{kbd(C-c C-v f)}}} or {{{kbd(C-c C-v C-f)}}} | ~org-babel-tangle-file~                    |
+| {{{kbd(C-c C-v c)}}} or {{{kbd(C-c C-v C-c)}}} | ~org-babel-check-src-block~                |
+| {{{kbd(C-c C-v j)}}} or {{{kbd(C-c C-v C-j)}}} | ~org-babel-insert-header-arg~              |
+| {{{kbd(C-c C-v l)}}} or {{{kbd(C-c C-v C-l)}}} | ~org-babel-load-in-session~                |
+| {{{kbd(C-c C-v i)}}} or {{{kbd(C-c C-v C-i)}}} | ~org-babel-lob-ingest~                     |
+| {{{kbd(C-c C-v I)}}} or {{{kbd(C-c C-v C-I)}}} | ~org-babel-view-src-block-info~            |
+| {{{kbd(C-c C-v z)}}} or {{{kbd(C-c C-v C-z)}}} | ~org-babel-switch-to-session-with-code~    |
+| {{{kbd(C-c C-v a)}}} or {{{kbd(C-c C-v C-a)}}} | ~org-babel-sha1-hash~                      |
+| {{{kbd(C-c C-v h)}}} or {{{kbd(C-c C-v C-h)}}} | ~org-babel-describe-bindings~              |
+| {{{kbd(C-c C-v x)}}} or {{{kbd(C-c C-v C-x)}}} | ~org-babel-do-key-sequence-in-edit-buffer~ |
+
+
+#+comment: When possible these keybindings were extended to work when the control key is
+#+comment: kept pressed, resulting in the following additional keybindings.
+
+#+comment: @multitable @columnfractions 0.25 0.75
+#+comment: - {{{kbd(C-c C-v C-a)}}} @tab ~org-babel-sha1-hash~
+#+comment: - {{{kbd(C-c C-v C-b)}}} @tab ~org-babel-execute-buffer~
+#+comment: - {{{kbd(C-c C-v C-f)}}} @tab ~org-babel-tangle-file~
+#+comment: - {{{kbd(C-c C-v C-l)}}} @tab ~org-babel-lob-ingest~
+#+comment: - {{{kbd(C-c C-v C-p)}}} @tab ~org-babel-expand-src-block~
+#+comment: - {{{kbd(C-c C-v C-s)}}} @tab ~org-babel-execute-subtree~
+#+comment: - {{{kbd(C-c C-v C-t)}}} @tab ~org-babel-tangle~
+#+comment: - {{{kbd(C-c C-v C-z)}}} @tab ~org-babel-switch-to-session~
+#+comment: @end multitable
+
+** Batch execution
+   :PROPERTIES:
+   :DESCRIPTION: Call functions from the command line
+   :END:
+{{{cindex(code block\\\, batch execution)}}}
+{{{cindex(source code\\\, batch execution)}}}
+
+It is possible to call functions from the command line.  This shell
+script calls ~org-babel-tangle~ on every one of its arguments.
+
+Be sure to adjust the paths to fit your system.
+
+#+begin_example
+   #!/bin/sh
+   # -*- mode: shell-script -*-
+   #
+   # tangle files with org-mode
+   #
+   DIR=`pwd`
+   FILES=""
+
+   # wrap each argument in the code required to call tangle on it
+   for i in $@; do
+       FILES="$FILES \"$i\""
+   done
+
+   emacs -Q --batch \
+   --eval "(progn
+   (add-to-list 'load-path (expand-file-name \"~/src/org/lisp/\"))
+   (add-to-list 'load-path (expand-file-name \"~/src/org/contrib/lisp/\" t))
+   (require 'org)(require 'org-exp)(require 'ob)(require 'ob-tangle)
+   (mapc (lambda (file)
+          (find-file (expand-file-name file \"$DIR\"))
+          (org-babel-tangle)
+          (kill-buffer)) '($FILES)))" 2>&1 |grep tangled
+#+end_example
+
+* FIXME Miscellaneous
+  :PROPERTIES:
+  :DESCRIPTION: All the rest which did not fit elsewhere
+  :END:
+
+** FIXME Completion
+   :PROPERTIES:
+   :DESCRIPTION: M-TAB knows what you need
+   :END:
+{{{cindex(completion\\\, of @TeX{} symbols)}}}
+{{{cindex(completion\\\, of TODO keywords)}}}
+{{{cindex(completion\\\, of dictionary words)}}}
+{{{cindex(completion\\\, of option keywords)}}}
+{{{cindex(completion\\\, of tags)}}}
+{{{cindex(completion\\\, of property keys)}}}
+{{{cindex(completion\\\, of link abbreviations)}}}
+{{{cindex(@TeX{} symbol completion)}}}
+{{{cindex(TODO keywords completion)}}}
+{{{cindex(dictionary word completion)}}}
+{{{cindex(option keyword completion)}}}
+{{{cindex(tag completion)}}}
+{{{cindex(link abbreviations\\\, completion of)}}}
+
+Emacs would not be Emacs without completion, and Org mode uses it
+whenever it makes sense. If you prefer an iswitchb- or ido-like
+interface for some of the completion prompts, you can specify your
+preference by setting at most one of the variables
+~org-completion-use-iswitchb~ or ~org-completion-use-ido~.
+
+Org supports in-buffer completion. This type of completion does not
+make use of the minibuffer. You simply type a few letters into the
+buffer and use the {{{key(TAB)}}} key to complete text right there.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbdkey(M-,TAB)}}} ::
+  {{{kindex(M-@key{TAB})}}}
+
+  Complete word at point.
+
+  - At the beginning of a headline :: 
+
+    Complete TODO keywords.
+
+  - After {{{kbd(XXX)}}} :: 
+    #+comment: Should be \
+    Complete TeX symbols supported by the exporter.
+
+  - After {{{samp(*)}}} :: 
+
+    Complete headlines in the current buffer so that they can be used in
+    search links like:
+    
+    #+begin_example
+       [[*find this headline]]
+    #+end_example
+
+  - After {{{samp(:)}}} in a headline :: 
+
+    Complete tags. The list of tags is taken from the variable
+    ~org-tag-alist~ (possibly set through the {{{samp(#+TAGS)}}} in-buffer
+    option, see [[Setting tags]]), or it is created dynamically from all tags
+    used in the current buffer.
+
+  - After {{{samp(:)}}} and not in a headline ::
+
+    Complete property keys. The list of keys is constructed dynamically
+    from all keys used in the current buffer.
+
+  - After {{{samp([)}}} ::
+
+    Complete link abbreviations (see [[Link abbreviations]]).
+
+  - After {{{samp(#+)}}} ::
+
+    Complete the special keywords like {{{samp(TYP_TODO)}}} or
+    {{{samp(OPTIONS)}}} which set file-specific options for Org mode. When
+    the option keyword is already complete, pressing {{{kbdkey(M-,TAB)}}}
+    again will insert example settings for this keyword.
+
+  - In the line after {{{samp(#+STARTUP: )}}} ::
+
+    Complete startup keywords, i.e., valid keys for this line.
+
+  - Elsewhere ::
+
+    Complete dictionary words using Ispell.
+
+** Easy templates
+   :PROPERTIES:
+   :DESCRIPTION: Quick insertion of structural elements
+   :END:
+{{{cindex(template insertion)}}}
+{{{cindex(insertion\\\, of templates)}}}
+
+Org mode supports insertion of empty structural elements (like
+~#+BEGIN_SRC~ and ~#+END_SRC~ pairs) with just a few key strokes. This
+is achieved through a native template expansion mechanism. Note that
+Emacs has several other template mechanisms which could be used in a
+similar way, for example {{{file(yasnippet)}}}.
+
+To insert a structural element, type a {{{kbd(<)}}}, followed by a
+template selector and {{{kbdkey(,TAB)}}}. Completion takes effect only
+when the above keystrokes are typed on a line by itself.
+
+The following template selectors are currently supported:
+{{{kindex(s)}}}
+{{{kindex(e)}}}
+{{{kindex(q)}}}
+{{{kindex(v)}}}
+{{{kindex(c)}}}
+{{{kindex(l)}}}
+{{{kindex(L)}}}
+{{{kindex(h)}}}
+{{{kindex(H)}}}
+{{{kindex(a)}}}
+{{{kindex(A)}}}
+{{{kindex(i)}}}
+{{{kindex(I)}}}
+
+#+attr_texinfo: :columns "0.2 0.7"
+| Selector     | Template                              |
+|--------------+---------------------------------------|
+| {{{kbd(a)}}} | ~#+BEGIN_ASCII~ ...~ #+END_ASCII~     |
+| {{{kbd(A)}}} | ~#+ASCII:~                            |
+| {{{kbd(c)}}} | ~#+BEGIN_CENTER~ ... ~#+END_CENTER~   |
+| {{{kbd(e)}}} | ~#+BEGIN_EXAMPLE~ ... ~#+END_EXAMPLE~ |
+| {{{kbd(h)}}} | ~#+BEGIN_HTML~ ... ~#+END_HTML~       |
+| {{{kbd(H)}}} | ~#+HTML:~                             |
+| {{{kbd(i)}}} | ~#+INDEX:~                            |
+| {{{kbd(I)}}} | ~#+INCLUDE:~                          |
+| {{{kbd(l)}}} | ~#+BEGIN_LaTeX~ ... ~#+END_LaTeX~     |
+| {{{kbd(L)}}} | ~#+LaTeX:~                            |
+| {{{kbd(q)}}} | ~#+BEGIN_QUOTE~ ... ~#+END_QUOTE~     |
+| {{{kbd(s)}}} | ~#+BEGIN_SRC~ ... ~#+END_SRC~         |
+| {{{kbd(v)}}} | ~#+BEGIN_VERSE~ ... ~#+END_VERSE~     |
+
+For example, on an empty line, typing "<e" and then pressing TAB, will expand
+into a complete EXAMPLE template.
+
+You can install additional templates by customizing the variable
+~org-structure-template-alist~.  See the docstring of the variable for
+additional details.
+
+** Speed keys
+   :PROPERTIES:
+   :DESCRIPTION: Electric commands at the beginning of a headline
+   :END:
+{{{cindex(speed keys)}}}
+{{{vindex(org-use-speed-commands)}}}
+{{{vindex(org-speed-commands-user)}}}
+
+Single keys can be made to execute commands when the cursor is at the
+beginning of a headline, i.e., before the first star. Configure the
+variable ~org-use-speed-commands~ to activate this feature. There is a
+pre-defined list of commands, and you can add more such commands using
+the variable ~org-speed-commands-user~. Speed keys do not only speed
+up navigation and other commands, but they also provide an alternative
+way to execute commands bound to keys that are not or not easily
+available on a TTY, or on a small mobile device with a limited
+keyboard.
+
+To see which commands are available, activate the feature and press
+{{{kbd(?)}}} with the cursor at the beginning of a headline.
+
+** Code evaluation security
+   :PROPERTIES:
+   :DESCRIPTION: Org mode files evaluate in-line code
+   :TITLE:    Code evaluation and security issues
+   :END:
+
+Org provides tools to work with the code snippets, including
+evaluating them.
+
+Running code on your machine always comes with a security risk. Badly
+written or malicious code can be executed on purpose or by accident.
+Org has default settings that will only evaluate source code if you
+give explicit permission to do so, and as a casual user of these
+features you should leave these precautions intact.
+
+For people who regularly work with source code, the confirmation
+prompts can become annoying, and you might want to turn them off. This
+can be done, but you must be aware of the risks that are involved.
+
+Code evaluation can happen under the following circumstances:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- Source code blocks ::
+
+  Source code blocks can be evaluated during export, or when pressing
+  {{{kbd(C-c C-c)}}} in the block. The most important thing to realize
+  here is that Org mode files which contain code snippets are, in a
+  certain sense, like executable files. So you should accept them and
+  load them into Emacs only from trusted sources---just like you would
+  do with a program you install on your computer.
+
+  Make sure you know what you are doing before customizing the variables
+  that take off the default security brakes.
+
+  - ~org-confirm-babel-evaluate~ ::
+
+    When ~t~ (the default), the user is asked before every code block
+    evaluation. When ~nil~, the user is not asked. When set to a function,
+    it is called with two arguments (language and body of the code block)
+    and should return ~t~ to ask and ~nil~ not to ask.
+
+  For example, here is how to execute "ditaa" code (which is considered
+  safe) without asking:
+
+  #+header: :eval no
+  #+header: :exports code
+  #+begin_src emacs-lisp
+  (defun my-org-confirm-babel-evaluate (lang body)
+    (not (string= lang "ditaa")))  ; don't ask for ditaa
+  (setq org-confirm-babel-evaluate 'my-org-confirm-babel-evaluate)
+  #+end_src
+
+- Following ~shell~ and ~elisp~ links ::
+
+  Org has two link types that can directly evaluate code (see [[External
+  links]]). These links can be problematic because the code to be
+  evaluated is not visible.
+
+  - ~org-confirm-shell-link-function~ ::
+    
+    Function to queries user about shell link execution.
+
+  - ~org-confirm-elisp-link-function~ ::
+
+    Function to query user for Emacs Lisp link execution.
+
+- Formulas in tables ::
+
+  Formulas in tables (see [[The spreadsheet]]) are code that is evaluated
+  either by the /calc/ interpreter, or by the /Emacs Lisp/ interpreter.
+
+** Customization
+   :PROPERTIES:
+   :DESCRIPTION: Adapting Org to your taste
+   :END:
+{{{cindex(customization)}}}
+{{{cindex(options\\\, for customization)}}}
+{{{cindex(variables\\\, for customization)}}}
+
+There are more than 500 variables that can be used to customize Org.
+For the sake of compactness of the manual, I am not describing the
+variables here. A structured overview of customization variables is
+available with {{{kbd(M-x org-customize)}}}. Or select ~Browse Org
+Group~ from the ~Org->Customization~ menu. Many settings can also be
+activated on a per-file basis, by putting special lines into the
+buffer (see [[In-buffer settings]]).
+
+** In-buffer settings
+   :PROPERTIES:
+   :DESCRIPTION: Overview of the #+KEYWORDS
+   :TITLE:    Summary of in-buffer settings
+   :END:
+{{{cindex(in-buffer settings)}}}
+{{{cindex(special keywords)}}}
+
+Org mode uses special lines in the buffer to define settings on a
+per-file basis. These lines start with a {{{samp(#+)}}} followed by a
+keyword, a colon, and then individual words defining a setting.
+Several setting words can be in the same line, but you can also have
+multiple lines for the keyword. While these settings are described
+throughout the manual, here is a summary. After changing any of those
+lines in the buffer, press {{{kbd(C-c C-c)}}} with the cursor still in
+the line to activate the changes immediately. Otherwise they become
+effective only when the file is visited again in a new Emacs session.
+
+{{{vindex(org-archive-location)}}}
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(#+ARCHIVE: %s_done)}}} ::
+
+  This line sets the archive location for the agenda file. It applies to
+  all subsequent lines, until the next {{{samp(#+ARCHIVE)}}} line or the
+  end of the file. The first such line also applies to any entries
+  before it. The corresponding variable is ~org-archive-location~.
+
+- {{{kbd(#+CATEGORY:)}}} ::
+
+  This line sets the category for the agenda file. The category applies
+  to all subsequent lines, until the next {{{samp(#+CATEGORY)}}} line or
+  the end of the file. The first such line also applies to any entries
+  before it.
+
+- {{{kbd(#+COLUMNS: %25ITEM ...)}}} ::
+  {{{cindex(property\\\, COLUMNS)}}}
+
+  Set the default format for columns view. This format applies when
+  columns view is invoked in locations where no ~COLUMNS~ property
+  applies.
+
+- {{{kbd(#+CONSTANTS: name1=value1 ...)}}} ::
+  {{{vindex(org-table-formula-constants)}}}
+  {{{vindex(org-table-formula)}}}
+
+  Set file-local values for constants to be used in table formulas. This
+  line sets the local variable ~org-table-formula-constants-local~. The
+  global version of this variable is ~org-table-formula-constants~.
+
+- {{{kbd(#+FILETAGS: :tag1:tag2:tag3:)}}} ::
+
+  Set tags that can be inherited by any entry in the file, including the
+  top-level entries.
+
+- {{{kbd(#+DRAWERS: NAME1 ...)}}} ::
+  {{{vindex(org-drawers)}}}
+
+  Set the file-local set of additional drawers. The corresponding global
+  variable is ~org-drawers~.
+
+- {{{kbd(#+LINK:  linkword replace)}}} ::
+  {{{vindex(org-link-abbrev-alist)}}}
+
+  These lines (several are allowed) specify link abbreviations. See
+  [[Link abbreviations]]. The corresponding variable is ~org-link-abbrev-alist~.
+
+- {{{kbd(#+PRIORITIES: highest lowest default)}}} ::
+  {{{vindex(org-highest-priority)}}}
+  {{{vindex(org-lowest-priority)}}}
+  {{{vindex(org-default-priority)}}}
+
+  This line sets the limits and the default for the priorities. All
+  three must be either letters A-Z or numbers 0-9. The highest priority
+  must have a lower ASCII number than the lowest priority.
+
+- {{{kbd(#+PROPERTY: Property_Name Value)}}} ::
+
+  This line sets a default inheritance value for entries in the current
+  buffer, most useful for specifying the allowed values of a property.
+
+- {{{kbd(#+SETUPFILE: file)}}} ::
+  {{{cindex(#+SETUPFILE)}}}
+
+  This line defines a file that holds more in-buffer setup. Normally
+  this is entirely ignored. Only when the buffer is parsed for
+  option-setting lines (i.e., when starting Org mode for a file, when
+  pressing {{{kbd(C-c C-c)}}} in a settings line, or when exporting),
+  then the contents of this file are parsed as if they had been included
+  in the buffer. In particular, the file can be any other Org mode file
+  with internal setup. You can visit the file the cursor is in the line
+  with {{{kbd(C-c ')}}}.
+
+- {{{kbd(#+STARTUP:)}}} ::
+  {{{cindex(#+STARTUP:)}}}
+
+  This line sets options to be used at startup of Org mode, when an
+  Org file is being visited.
+
+  The first set of options deals with the initial visibility of the
+  outline tree. The corresponding variable for global default settings
+  is ~org-startup-folded~, with a default value ~t~, which means
+  ~overview~.
+
+  {{{vindex(org-startup-folded)}}}
+  {{{cindex(@code{overview}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{content}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{showall}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{showeverything}\\\, STARTUP keyword)}}}
+
+  #+attr_texinfo: :table-type "table" :indic "@asis"
+  - ~overview~ ::         top-level headlines only
+  - ~content~ ::         all headlines
+  - ~showall~ ::         no folding of any entries
+  - ~showeverything~ ::  show even drawer contents
+
+  {{{vindex(org-startup-indented)}}}
+  {{{cindex(@code{indent}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{noindent}\\\, STARTUP keyword)}}}
+
+  Dynamic virtual indentation is controlled by the variable
+  ~org-startup-indented~.[fn:182]
+
+  #+attr_texinfo: :table-type "table" :indic "@asis"
+  - ~indent~ ::     start with ~org-indent-mode~ turned on
+  - ~noindent~ ::   start with ~org-indent-mode~ turned off
+
+  {{{vindex(org-startup-align-all-tables)}}}
+
+  Then there are options for aligning tables upon visiting a file.  This
+  is useful in files containing narrowed table columns.  The corresponding
+  variable is ~org-startup-align-all-tables~, with a default value
+  ~nil~.
+
+  {{{cindex(@code{align}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{noalign}\\\, STARTUP keyword)}}}
+
+  #+attr_texinfo: :table-type "table" :indic "@asis"
+  - ~align~ ::      align all tables
+  - ~noalign~ ::    don't align tables on startup
+
+  {{{vindex(org-startup-with-inline-images)}}}
+
+  When visiting a file, inline images can be automatically displayed.
+  The corresponding variable is ~org-startup-with-inline-images~, with a
+  default value ~nil~ to avoid delays when visiting a file.
+
+  {{{cindex(@code{inlineimages}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{noinlineimages}\\\, STARTUP keyword)}}}
+
+  #+attr_texinfo: :table-type "table" :indic "@asis"
+  - ~inlineimages~   show inline images
+  - ~noinlineimages~ don't show inline images on startup
+
+  {{{vindex(org-log-done)}}}
+  {{{vindex(org-log-note-clock-out)}}}
+  {{{vindex(org-log-repeat)}}}
+
+  Logging the closing and reopening of TODO items and clock intervals
+  can be configured using these options (see variables ~org-log-done~,
+  ~org-log-note-clock-out~, and ~org-log-repeat~).
+
+  {{{cindex(@code{logdone}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{lognotedone}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{nologdone}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{lognoteclock-out}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{nolognoteclock-out}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{logrepeat}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{lognoterepeat}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{nologrepeat}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{logreschedule}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{lognotereschedule}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{nologreschedule}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{logredeadline}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{lognoteredeadline}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{nologredeadline}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{logrefile}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{lognoterefile}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{nologrefile}\\\, STARTUP keyword)}}}
+
+  #+attr_texinfo: :table-type "table" :indic "@asis"
+  - ~logdone~ ::            record a timestamp when an item is marked DONE
+  - ~lognotedone~ ::        record timestamp and a note when DONE
+  - ~nologdone~ ::          don't record when items are marked DONE
+  - ~logrepeat~ ::          record a time when reinstating a repeating item
+  - ~lognoterepeat~ ::      record a note when reinstating a repeating item
+  - ~nologrepeat~ ::        do not record when reinstating repeating item
+  - ~lognoteclock-out~ ::   record a note when clocking out
+  - ~nolognoteclock-out~ :: don't record a note when clocking out
+  - ~logreschedule~ ::      record a timestamp when scheduling time changes
+  - ~lognotereschedule~ ::  record a note when scheduling time changes
+  - ~nologreschedule~ ::    do not record when a scheduling date changes
+  - ~logredeadline~ ::      record a timestamp when deadline changes
+  - ~lognoteredeadline~ ::  record a note when deadline changes
+  - ~nologredeadline~ ::    do not record when a deadline date changes
+  - ~logrefile~ ::          record a timestamp when refiling
+  - ~lognoterefile~ ::      record a note when refiling
+  - ~nologrefile~ ::        do not record when refiling
+
+  {{{vindex(org-hide-leading-stars)}}}
+  {{{vindex(org-odd-levels-only)}}}
+
+  Here are the options for hiding leading stars in outline headings, and
+  for indenting outlines. The corresponding variables are
+  ~org-hide-leading-stars~ and ~org-odd-levels-only~, both with a
+  default setting ~nil~ (meaning ~showstars~ and ~oddeven~).
+
+  {{{cindex(@code{hidestars}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{showstars}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{odd}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{even}\\\, STARTUP keyword)}}}
+
+  #+attr_texinfo: :table-type "table" :indic "@asis"
+  - ~hidestars~ ::  make all but one of the stars starting a headline invisible.
+  - ~showstars~ ::  show all stars starting a headline
+  - ~indent~ ::     virtual indentation according to outline level
+  - ~noindent~ ::   no virtual indentation according to outline level
+  - ~odd~ ::        allow only odd outline levels (1, 3, ...)
+  - ~oddeven~ ::    allow all outline levels
+
+  {{{vindex(org-put-time-stamp-overlays)}}}
+  {{{vindex(org-time-stamp-overlay-formats)}}}
+
+  To turn on custom format overlays over timestamps (variables
+  ~org-put-time-stamp-overlays~ and ~org-time-stamp-overlay-formats~),
+  use:
+
+  {{{cindex(@code{customtime}\\\, STARTUP keyword)}}}
+     
+  #+attr_texinfo: :table-type "table" :indic "@asis"
+  - ~customtime~ :: overlay custom time format
+
+  {{{vindex(constants-unit-system)}}}
+
+  The following options influence the table spreadsheet (variable
+  ~constants-unit-system~).
+
+  {{{cindex(@code{constcgs}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{constSI}\\\, STARTUP keyword)}}}
+
+  #+attr_texinfo: :table-type "table" :indic "@asis"
+  - ~constcgs~ ::   {{{file(constants.el)}}} should use the c-g-s unit system
+  - ~constSI~ ::    {{{file(constants.el)}}} should use the SI unit system
+  
+  {{{vindex(org-footnote-define-inline)}}}
+  {{{vindex(org-footnote-auto-label)}}}
+  {{{vindex(org-footnote-auto-adjust)}}}
+
+  To influence footnote settings, use the following keywords. The
+  corresponding variables are ~org-footnote-define-inline~,
+  ~org-footnote-auto-label~, and ~org-footnote-auto-adjust~.
+
+  {{{cindex(@code{fninline}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{nofninline}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{fnlocal}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{fnprompt}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{fnauto}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{fnconfirm}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{fnplain}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{fnadjust}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{nofnadjust}\\\, STARTUP keyword)}}}
+
+  #+attr_texinfo: :table-type "table" :indic "@asis"
+  - ~fninline~ ::    define footnotes inline
+  - ~fnnoinline~ ::  define footnotes in separate section
+  - ~fnlocal~ ::     define footnotes near first reference, but not inline
+  - ~fnprompt~ ::    prompt for footnote labels
+  - ~fnauto~ ::      create ~[fn:1]~-like labels automatically (default)
+  - ~fnconfirm~ ::   offer automatic label for editing or confirmation
+  - ~fnplain~ ::     create ~[1]~-like labels automatically
+  - ~fnadjust~ ::    automatically renumber and sort footnotes
+  - ~nofnadjust~ ::  do not renumber and sort automatically
+
+  {{{cindex(org-hide-block-startup)}}}
+
+  To hide blocks on startup, use these keywords. The corresponding
+  variable is ~org-hide-block-startup~.
+
+  {{{cindex(@code{hideblocks}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{nohideblocks}\\\, STARTUP keyword)}}}
+
+  #+attr_texinfo: :table-type "table" :indic "@asis"
+  - ~hideblocks~ ::   Hide all begin/end blocks on startup
+  - ~nohideblocks~ :: Do not hide blocks on startup
+  
+  {{{cindex(org-pretty-entities)}}}
+
+  The display of entities as UTF-8 characters is governed by the
+  variable ~org-pretty-entities~ and the keywords
+
+  {{{cindex(@code{entitiespretty}\\\, STARTUP keyword)}}}
+  {{{cindex(@code{entitiesplain}\\\, STARTUP keyword)}}}
+
+  #+attr_texinfo: :table-type "table" :indic "@asis"
+  - ~entitiespretty~ ::  Show entities as UTF-8 characters where possible
+  - ~entitiesplain~ ::   Leave entities plain
+
+- {{{kbd(#+TAGS:  TAG1(c1) TAG2(c2))}}} ::
+  {{{vindex(org-tag-alist)}}}
+
+  These lines (several such lines are allowed) specify the valid tags in
+  this file, and (potentially) the corresponding /fast tag selection/
+  keys. The corresponding variable is ~org-tag-alist~.
+
+- {{{kbd(#+TBLFM:)}}} ::
+
+  This line contains the formulas for the table directly above the line.
+
+- {{{kbd(#+TITLE:)}}}, {{{kbd(#+AUTHOR:)}}}, {{{kbd(#+EMAIL:)}}}, {{{kbd(#+LANGUAGE:)}}}, {{{kbd(#+TEXT:)}}}, {{{kbd(#+DATE:)}}}, {{{kbd(#+OPTIONS:)}}}, {{{kbd(#+BIND:)}}}, {{{kbd(#+XSLT:)}}}, {{{kbd(#+DESCRIPTION:)}}}, {{{kbd(#+KEYWORDS:)}}}, {{{kbd(#+LaTeX_HEADER:)}}}, {{{kbd(#+STYLE:)}}}, {{{kbd(#+LINK_UP:)}}}, {{{kbd(#+LINK_HOME:)}}}, {{{kbd(#+EXPORT_SELECT_TAGS:)}}}, {{{kbd(#+EXPORT_EXCLUDE_TAGS:)}}}
+
+  These lines provide settings for exporting files.  For more details see
+  [[Export options]].
+
+- {{{kbd(#+TODO:)}}}, {{{kbd(#+SEQ_TODO:)}}}, {{{kbd(#+TYP_TODO:)}}} ::
+  {{{vindex(org-todo-keywords)}}}
+
+  These lines set the TODO keywords and their interpretation in the
+  current file. The corresponding variable is ~org-todo-keywords~.
+
+** The very busy C-c C-c key
+   :PROPERTIES:
+   :DESCRIPTION: When in doubt, press C-c C-c
+   :TITLE:    The very busy C-c C-c key
+   :END:
+{{{kindex(C-c C-c)}}}
+{{{cindex(C-c C-c\\\, overview)}}}
+
+The key {{{kbd(C-c C-c)}}} has many purposes in Org, which are all
+mentioned scattered throughout this manual.  One specific function of
+this key is to add /tags/ to a headline (see [[Tags]]).  In many
+other circumstances it means something like "Hey Org, look
+here and update according to what you see here."  Here is a summary of
+what this means in different contexts.
+
+- If there are highlights in the buffer from the creation of a sparse
+  tree, or from clock display, remove these highlights.
+- If the cursor is in one of the special ~#+KEYWORD~ lines, this
+  triggers scanning the buffer for these lines and updating the
+  information.
+- If the cursor is inside a table, realign the table. This command
+  works even if the automatic table editor has been turned off.
+- If the cursor is on a ~#+TBLFM~ line, re-apply the formulas to the
+  entire table.
+- If the current buffer is a capture buffer, close the note and file
+  it. With a prefix argument, file it, without further interaction, to
+  the default location.
+- If the cursor is on a ~<<<target>>>~, update radio targets and
+  corresponding links in this buffer.
+- If the cursor is in a property line or at the start or end of a
+  property drawer, offer property commands.
+- If the cursor is at a footnote reference, go to the corresponding
+  definition, and vice versa.
+-  If the cursor is on a statistics cookie, update it.
+- If the cursor is in a plain list item with a checkbox, toggle the
+  status of the checkbox.
+- If the cursor is on a numbered item in a plain list, renumber the
+  ordered list.
+- If the cursor is on the ~#+BEGIN~ line of a dynamic block, the block
+  is updated.
+- If the cursor is at a timestamp, fix the day name in the timestamp.
+
+** Clean view
+   :PROPERTIES:
+   :DESCRIPTION: Getting rid of leading stars in the outline
+   :TITLE:    A cleaner outline view
+   :END:
+{{{cindex(hiding leading stars)}}}
+{{{cindex(dynamic indentation)}}}
+{{{cindex(odd-levels-only outlines)}}}
+{{{cindex(clean outline view)}}}
+
+Some people find it noisy and distracting that the Org headlines start
+with a potentially large number of stars, and that text below the
+headlines is not indented. While this is no problem when writing a
+/book-like/ document where the outline headings are really section
+headings, in a more /list-oriented/ outline, indented structure is a
+lot cleaner:
+
+#+begin_example
+   ,* Top level headline             |    * Top level headline
+   ,** Second level                  |      * Second level
+   ,*** 3rd level                    |        * 3rd level
+   some text                        |          some text
+   ,*** 3rd level                    |        * 3rd level
+   more text                        |          more text
+   ,* Another top level headline     |    * Another top level headline
+#+end_example
+
+{{{noindent}}} If you are using at least Emacs 23.2 and version 6.29
+of Org, this kind of view can be achieved dynamically at display time
+using ~org-indent-mode~.[fn:183] In this minor mode, all lines are
+prefixed for display with the necessary amount of space.[fn:154] Also
+headlines are prefixed with additional stars, so that the amount of
+indentation shifts by two spaces per level.[fn:155] All headline stars
+but the last one are made invisible using the ~org-hide~ face---see
+below under {{{samp(2.)}}} for more information on how this
+works.[fn:156] You can turn on ~org-indent-mode~ for all files by
+customizing the variable ~org-startup-indented~, or you can turn it on
+for individual files using
+
+#+begin_example
+   ,#+STARTUP: indent
+#+end_example
+
+If you want a similar effect in an earlier version of Emacs and/or
+Org, or if you want the indentation to be hard space characters so
+that the plain text file looks as similar as possible to the Emacs
+display, Org supports you in the following way:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- Indentation of text below headlines ::
+
+  You may indent text below each headline to make the left boundary line up
+  with the headline, like
+
+  #+begin_example
+     ,*** 3rd level
+         more text, now indented
+  #+end_example
+
+  {{{vindex(org-adapt-indentation)}}}
+
+  Org supports this with paragraph filling, line wrapping, and structure
+  editing,
+  preserving or adapting the indentation as appropriate.[fn:157]
+
+- Hiding leading stars ::
+  {{{vindex(org-hide-leading-stars)}}}
+
+  You can modify the display in such a way that all leading stars become
+  invisible. To do this in a global way, configure the variable
+  ~org-hide-leading-stars~ or change this on a per-file basis with
+
+  #+begin_example
+     ,#+STARTUP: hidestars
+     ,#+STARTUP: showstars
+  #+end_example
+
+  With hidden stars, the tree becomes:
+
+  #+begin_example
+     ,* Top level headline
+     , * Second level
+     ,  * 3rd level
+       ...
+  #+end_example
+
+  {{{vindex(org-hide @r{(face)})}}}
+
+  {{{noindent}}} The leading stars are not truly replaced by whitespace,
+  they are only fontified with the face ~org-hide~ that uses the
+  background color as font color. If you are not using either white or
+  black background, you may have to customize this face to get the
+  wanted effect. Another possibility is to set this font such that the
+  extra stars are /almost/ invisible, for example using the color
+  ~grey90~ on a white background.
+- Odd levels ::
+  {{{vindex(org-odd-levels-only)}}}
+
+  Things become cleaner still if you skip all the even levels and use
+  only odd levels 1, 3, 5, ..., effectively adding two stars to go from
+  one outline level to the next.[fn:158] In this way we get the outline
+  view shown at the beginning of this section. In order to make the
+  structure editing and export commands handle this convention
+  correctly, configure the variable ~org-odd-levels-only~, or set this
+  on a per-file basis with one of the following lines:
+
+  #+begin_example
+     ,#+STARTUP: odd
+     ,#+STARTUP: oddeven
+  #+end_example
+
+  You can convert an Org file from single-star-per-level to the
+  double-star-per-level convention with {{{kbdkey(M-x
+  org-convert-to-odd-levels , RET)}}} in that file. The reverse
+  operation is {{{kbd(M-x org-convert-to-oddeven-levels)}}}.
+
+** TTY keys
+   :PROPERTIES:
+   :DESCRIPTION: Using Org on a tty
+   :TITLE:    Using Org on a tty
+   :END:
+
+Because Org contains a large number of commands, by default many of
+Org's core commands are bound to keys that are generally not
+accessible on a tty, such as the cursor keys ({{{key(left)}}},
+{{{key(right)}}}, {{{key(up)}}}, {{{key(down)}}}), {{{key(TAB)}}} and
+{{{key(RET)}}}, in particular when used together with modifiers like
+{{{key(Meta)}}} and/or {{{key(Shift)}}}. To access these commands on a
+tty when special keys are unavailable, the following alternative
+bindings can be used. The tty bindings below will likely be more
+cumbersome; you may find for some of the bindings below that a
+customized workaround suits you better. For example, changing a
+timestamp is really only fun with {{{kbdkey(S-,cursor)}}} keys,
+whereas on a tty you would rather use {{{kbd(C-c .)}}} to re-insert
+the timestamp.
+
+#+attr_texinfo: :columns "0.2 0.3 0.1 0.4"
+| Default                  | Alternative 1                | Speed key    | Alternative 2             |
+|--------------------------+------------------------------+--------------+---------------------------|
+| {{{kbdkey(S-,TAB)}}}     | {{{kbdspckey(C-u,TAB)}}}     | {{{kbd(C)}}} |                           |
+| {{{kbdkey(M-,left)}}}    | {{{kbd(C-c C-x l)}}}         | {{{kbd(l)}}} | {{{kbdkeys(,Esc,left)}}}  |
+| {{{kbdkey(M-S-,left)}}}  | {{{kbd(C-c C-x L)}}}         | {{{kbd(L)}}} |                           |
+| {{{kbdkey(M-,right)}}}   | {{{kbd(C-c C-x r)}}}         | {{{kbd(r)}}} | {{{kbdkeys(,Esc,right)}}} |
+| {{{kbdkey(M-S-,right)}}} | {{{kbd(C-c C-x R)}}}         | {{{kbd(R)}}} |                           |
+| {{{kbdkey(M-,up)}}}      | {{{kbd(C-c C-x u)}}}         | {{{kbd( )}}} | {{{kbdkeys(,Esc,up)}}}    |
+| {{{kbdkey(M-S-,up)}}}    | {{{kbd(C-c C-x U)}}}         | {{{kbd(U)}}} |                           |
+| {{{kbdkey(M-,down)}}}    | {{{kbd(C-c C-x d)}}}         | {{{kbd( )}}} | {{{kbdkeys(,Esc,down)}}}  |
+| {{{kbdkey(M-S-,down)}}}  | {{{kbd(C-c C-x D)}}}         | {{{kbd(D)}}} |                           |
+| {{{kbdkey(S-,RET)}}}     | {{{kbd(C-c C-x c)}}}         | {{{kbd( )}}} |                           |
+| {{{kbdkey(M-,RET)}}}     | {{{kbd(C-c C-x m)}}}         | {{{kbd( )}}} | {{{kbdkeys(,Esc,RET)}}}   |
+| {{{kbdkey(M-S-,RET)}}}   | {{{kbd(C-c C-x M)}}}         | {{{kbd( )}}} |                           |
+| {{{kbdkey(S-,left)}}}    | {{{kbdspckey(C-c,left)}}}    | {{{kbd( )}}} |                           |
+| {{{kbdkey(S-,right)}}}   | {{{kbdspckey(C-c,right)}}}   | {{{kbd( )}}} |                           |
+| {{{kbdkey(S-,up)}}}      | {{{kbdspckey(C-c,up)}}}      | {{{kbd( )}}} |                           |
+| {{{kbdkey(S-,down)}}}    | {{{kbdspckey(C-c,down)}}}    | {{{kbd( )}}} |                           |
+| {{{kbdkey(C-S-,left)}}}  | {{{kbdscpkey(C-c C-x,left)}}}  | {{{kbd( )}}} |                           |
+| {{{kbdkey(C-S-,right)}}} | {{{kbdspckey(C-c C-x,right)}}} | {{{kbd( )}}} |                           |
+
+** Interaction
+   :PROPERTIES:
+   :DESCRIPTION: Other Emacs packages
+   :TITLE:    Interaction with other packages
+   :END:
+{{{cindex(packages\\\, interaction with other)}}}
+Org lives in the world of GNU Emacs and interacts in various ways
+with other code out there.
+
+*** FIXME Cooperation
+    :PROPERTIES:
+    :DESCRIPTION: Packages Org cooperates with
+    :TITLE:    Packages that Org cooperates with
+    :END:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{file(calc.el)}}} by Dave Gillespie ::
+  {{{cindex(@file{calc.el})}}}
+  {{{cindex(Gillespie\\\, Dave)}}}
+
+  Org uses the Calc package for implementing spreadsheet functionality
+  in its tables (see [[The spreadsheet]]). Org checks for the availability
+  of Calc by looking for the function ~calc-eval~ which will have been
+  autoloaded during setup if Calc has been installed properly. As of
+  Emacs 22, Calc is part of the Emacs distribution. Another possibility
+  for interaction between the two packages is using Calc for embedded
+  calculations. See [[info:calc:Embedded Mode][GNU Emacs Calc Manual]].
+
+- {{{file(constants.el)}}} by Carsten Dominik ::
+  {{{cindex(@file{constants.el})}}}
+  {{{cindex(Dominik\\\, Carsten)}}}
+  {{{vindex(org-table-formula-constants)}}}
+
+  In a table formula (see [[The spreadsheet]]), it is possible to use names
+  for natural constants or units. Instead of defining your own constants
+  in the variable ~org-table-formula-constants~, install the
+  {{{file(constants)}}} package which defines a large number of
+  constants and units, and lets you use unit prefixes like {{{samp(M)}}}
+  for {{{samp(Mega)}}}, etc. You will need version 2.0 of this package,
+  available at [[http://www.astro.uva.nl/~dominik/Tools]]. Org checks for
+  the function ~constants-get~, which has to be autoloaded in your
+  setup. See the installation instructions in the file
+  {{{file(constants.el)}}}.
+
+- {{{file(cdlatex.el)}}} by Carsten Dominik ::
+  {{{cindex(@file{cdlatex.el})}}}
+  {{{cindex(Dominik\\\, Carsten)}}}
+
+  Org mode can make use of the CDLaTeX package to efficiently enter
+  LaTeX fragments into Org files. See [[CDLaTeX mode]].
+
+- {{{file(imenu.el)}}} by Ake Stenhoff and Lars Lindberg ::
+  {{{cindex(@file{imenu.el})}}}
+  {{{cindex(Stenhoff\\\, Ake)}}}
+  {{{cindex(Lindberg\\\, Lars)}}}
+
+  Imenu allows menu access to an index of items in a file.  Org mode
+  supports Imenu---all you need to do to get the index is the following:
+
+  #+begin_src emacs-lisp
+  (add-hook 'org-mode-hook
+            (lambda () (imenu-add-to-menubar "Imenu")))
+  #+end_src
+
+  {{{vindex(org-imenu-depth)}}}
+
+  By default the index is two levels deep---you can modify the depth
+  using the option ~org-imenu-depth~.
+
+- {{{file(remember.el)}}} by John Wiegley ::
+  {{{cindex(@file{remember.el})}}}
+  {{{cindex(Wiegley\\\, John)}}}
+
+  Org used to use this package for capture, but no longer does.
+
+- {{{file(speedbar.el)}}} by Eric M. Ludlam ::
+  {{{cindex(@file{speedbar.el})}}}
+  {{{cindex(Ludlam\\\, Eric M.)}}}
+
+  Speedbar is a package that creates a special frame displaying files and
+  index items in files.  Org mode supports Speedbar and allows you to
+  drill into Org files directly from the Speedbar.  It also allows you to
+  restrict the scope of agenda commands to a file or a subtree by using
+  the command {{{kbd(<)}}} in the Speedbar frame.
+
+- {{{file(table.el)}}} by Takaaki Ota ::
+  {{{kindex(C-c C-c)}}}
+  {{{cindex(table editor\\\, @file{table.el})}}}
+  {{{cindex(@file{table.el})}}}
+  {{{cindex(Ota\\\, Takaaki)}}}
+
+  Complex ASCII tables with automatic line wrapping, column- and row-spanning,
+  and alignment can be created using the Emacs table package by Takaaki Ota
+  ([[http://sourceforge.net/projects/table]], and also part of Emacs 22).
+  Org mode will recognize these tables and export them properly.  Because of
+  interference with other Org mode functionality, you unfortunately cannot edit
+  these tables directly in the buffer.  Instead, you need to use the command
+  {{{kbd(C-c ')}}} to edit them, similar to source code snippets.
+
+  - {{{kbd(C-c ')}}}, ~org-edit-special~ ::
+    {{{kindex(C-c ')}}}
+
+    Edit a {{{file(table.el)}}} table. Works when the cursor is in a
+    table.el table.
+
+  - {{{kbd(C-c XXX)}}}, ~org-table-create-with-table.el~ ::
+    {{{kindex(C-c ~)}}}
+    #+comment: Should be ~
+    Insert a {{{file(table.el)}}} table. If there is already a table at
+    point, this command converts it between the {{{file(table.el)}}}
+    format and the Org mode format. See the documentation string of the
+    command ~org-convert-table~ for the restrictions under which this is
+    possible.
+
+  {{{file(table.el)}}} is part of Emacs since Emacs 22.
+
+- {{{file(footnote.el)}}} by Steven L. Baur ::
+  {{{cindex(@file{footnote.el})}}}
+  {{{cindex(Baur\\\, Steven L.)}}}
+
+  Org mode recognizes numerical footnotes as provided by this package.
+  However, Org mode also has its own footnote support (see [[Creating footnotes]]),
+  which makes using {{{file(footnote.el)}}} unnecessary.
+
+*** Conflicts
+    :PROPERTIES:
+    :DESCRIPTION: Packages that lead to conflicts
+    :OPTIONAL_TITLE:    Packages that lead to conflicts with Org mode
+    :END:
+
+{{{cindex(@code{shift-selection-mode})}}}
+{{{vindex(org-support-shift-select)}}}
+
+In Emacs 23, ~shift-selection-mode~ is on by default, meaning that
+cursor motions combined with the shift key should start or enlarge
+regions. This conflicts with the use of {{{kbdkey(S-,cursor)}}}
+commands in Org to change timestamps, TODO keywords, priorities, and
+item bullet types if the cursor is at such a location. By default,
+{{{kbdkey(S-,cursor)}}} commands outside special contexts don't do
+anything, but you can customize the variable
+~org-support-shift-select~. Org mode then tries to accommodate shift
+selection by using it outside of the special contexts where
+special commands apply, and by extending an existing active
+region even if the cursor moves across a special context.
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{file(CUA.el)}}} by Kim. F. Storm ::
+  {{{cindex(@file{CUA.el})}}}
+  {{{cindex(Storm\\\, Kim. F.)}}}
+  {{{vindex(org-replace-disputed-keys)}}}
+
+  Key bindings in Org conflict with the {{{kbdkey(S-,<cursor>)}}} keys
+  used by CUA mode (as well as ~pc-select-mode~ and ~s-region-mode~) to
+  select and extend the region. In fact, Emacs 23 has this built-in in
+  the form of ~shift-selection-mode~, see previous paragraph. If you are
+  using Emacs 23, you probably don't want to use another package for
+  this purpose. However, if you prefer to leave these keys to a
+  different package while working in Org mode, configure the variable
+  ~org-replace-disputed-keys~. When set, Org will move the following key
+  bindings in Org files, and in the agenda buffer (but not during date
+  selection).
+
+  | S-UP      {{{result}}}  M-p   | S-DOWN     {{{result}}}  M-n   |
+  | S-LEFT    {{{result}}}  M--   | S-RIGHT    {{{result}}}  M-+   |
+  | C-S-LEFT  {{{result}}}  M-S-- | C-S-RIGHT  {{{result}}}  M-S-+ |
+
+  {{{vindex(org-disputed-keys)}}}
+
+  Yes, these are unfortunately more difficult to remember. If you want
+  to have other replacement keys, look at the variable
+  ~org-disputed-keys~.
+
+- {{{file(filladapt.el)}}} by Kyle Jones ::
+  {{{cindex(@file{filladapt.el})}}}
+  {{{cindex(Jones\\\, Kyle)}}}
+
+  Org mode tries to do the right thing when filling paragraphs, list
+  items and other elements. Many users reported they had problems using
+  both {{{file(filladapt.el)}}} and Org mode, so a safe thing to do is
+  to disable it like this:
+
+  #+begin_src emacs-lisp
+  (add-hook 'org-mode-hook 'turn-off-filladapt-mode)
+  #+end_src
+
+- {{{file(yasnippet.el)}}} ::
+  {{{cindex(@file{yasnippet.el})}}}
+
+  The way Org mode binds the {{{key(TAB)}}} key (binding to ~[tab]~
+  instead of ~"\t"~) overrules YASnippet's access to this key. The
+  following code fixed this problem:
+
+  #+begin_src emacs-lisp
+  (add-hook 'org-mode-hook
+            (lambda ()
+              (org-set-local 'yas/trigger-key [tab])
+              (define-key yas/keymap [tab] 'yas/next-field-or-maybe-expand)))
+  #+end_src
+
+  The latest version of yasnippet doesn't play well with Org mode.  If the
+  above code does not fix the conflict, start by defining the following
+  function:
+
+  #+begin_src emacs-lisp
+  (defun yas/org-very-safe-expand ()
+         (let ((yas/fallback-behavior 'return-nil)) (yas/expand)))
+  #+end_src
+
+  Then, tell Org mode what to do with the new function:
+
+  #+begin_src emacs-lisp
+  (add-hook 'org-mode-hook
+            (lambda ()
+                (make-variable-buffer-local 'yas/trigger-key)
+                (setq yas/trigger-key [tab])
+                (add-to-list 'org-tab-first-hook 'yas/org-very-safe-expand)
+                (define-key yas/keymap [tab] 'yas/next-field)))
+  #+end_src
+
+- {{{file(windmove.el)}}} by Hovav Shacham ::
+  {{{cindex(@file{windmove.el})}}}
+  {{{cindex(Shacham\\\, Hovav)}}}
+
+  This package also uses the {{{kbd(S-<cursor>)}}} keys, so everything
+  written in the paragraph above about CUA mode also applies here. If
+  you want make the windmove function active in locations where Org mode
+  does not have special functionality on {{{kbdkey(S-,cursor)}}}, add
+  this to your configuration:
+
+  #+begin_src emacs-lisp
+  ;; Make windmove work in org-mode:
+  (add-hook 'org-shiftup-final-hook 'windmove-up)
+  (add-hook 'org-shiftleft-final-hook 'windmove-left)
+  (add-hook 'org-shiftdown-final-hook 'windmove-down)
+  (add-hook 'org-shiftright-final-hook 'windmove-right)
+  #+end_src
+
+- {{{file(viper.el)}}} by Michael Kifer ::
+  {{{cindex(@file{viper.el})}}}
+  {{{cindex(Kifer\\\, Michael)}}}
+  {{{kindex(C-c /)}}}
+
+  Viper uses {{{kbd(C-c /)}}} and therefore makes this key not access the
+  corresponding Org mode command ~org-sparse-tree~.  You need to find
+  another key for this command, or override the key in
+  ~viper-vi-global-user-map~ with
+
+  #+begin_src emacs-lisp
+  (define-key viper-vi-global-user-map "C-c /" 'org-sparse-tree)
+  #+end_src
+
+** org-crypt
+   :PROPERTIES:
+   :DESCRIPTION: Encrypting Org files
+   :END:
+{{{cindex(@file{org-crypt.el})}}}
+{{{cindex(@code{org-decrypt-entry})}}}
+
+Org-crypt will encrypt the text of an entry, but not the headline, or
+properties. Org-crypt uses the Emacs EasyPG library to encrypt and
+decrypt files.
+
+Any text below a headline that has a {{{samp(:crypt:)}}} tag will
+automatically be encrypted when the file is saved. If you want to use
+a different tag just customize the ~org-crypt-tag-matcher~ setting.
+
+To use org-crypt it is suggested that you have the following in your
+{{{file(.emacs)}}}:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(require 'org-crypt)
+(org-crypt-use-before-save-magic)
+(setq org-tags-exclude-from-inheritance (quote ("crypt")))
+
+(setq org-crypt-key nil)
+  ;; GPG key to use for encryption
+  ;; Either the Key ID or set to nil to use symmetric encryption.
+
+(setq auto-save-default nil)
+  ;; Auto-saving does not cooperate with org-crypt.el: so you need
+  ;; to turn it off if you plan to use org-crypt.el quite often.
+  ;; Otherwise, you'll get an (annoying) message each time you
+  ;; start Org.
+
+  ;; To turn it off only locally, you can insert this:
+  ;;
+  ;; # -*- buffer-auto-save-file-name: nil; -*-
+#+end_src
+
+Excluding the crypt tag from inheritance prevents already encrypted text
+being encrypted again.
+
+* Hacking
+  :PROPERTIES:
+  :DESCRIPTION: How to hack your way around
+  :APPENDIX: Appendix
+  :END:
+{{{cindex(hacking)}}}
+
+This appendix describes some ways a user can extend the functionality
+of Org.
+
+** Hooks
+   :PROPERTIES:
+   :DESCRIPTION: How to reach into Org's internals
+   :END:
+{{{cindex(hooks)}}}
+
+Org has a large number of hook variables that can be used to add
+functionality.  This appendix about hacking is going to illustrate the
+use of some of them.  A complete list of all hooks with documentation is
+maintained by the Worg project and can be found at
+[[http://orgmode.org/worg/org-configs/org-hooks.php]].
+
+** Add-on packages
+   :PROPERTIES:
+   :DESCRIPTION: Available extensions
+   :END:
+{{{cindex(add-on packages)}}}
+
+A large number of add-on packages have been written by various
+authors. These packages are not part of Emacs, but they are
+distributed as contributed packages with the separate release
+available at the Org mode home page at [[http://orgmode.org]]. The
+list of contributed packages, along with documentation about each
+package, is maintained by the Worg project at
+[[http://orgmode.org/worg/org-contrib/]].
+
+** Adding hyperlink types
+   :PROPERTIES:
+   :DESCRIPTION: New custom link types
+   :END:
+{{{cindex(hyperlinks\\\, adding new types)}}}
+
+Org has a large number of hyperlink types built-in (see [[Hyperlinks]]).
+If you would like to add new link types, Org provides an interface for
+doing so. Let's look at an example file, {{{file(org-man.el)}}}, that
+will add support for creating links like:
+
+#+begin_example
+   [[man:printf][The printf manual]]
+#+end_example
+
+to show Unix manual pages inside Emacs:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+;;; org-man.el - Support for links to manpages in Org
+
+(require 'org)
+
+(org-add-link-type "man" 'org-man-open)
+(add-hook 'org-store-link-functions 'org-man-store-link)
+
+(defcustom org-man-command 'man
+  "The Emacs command to be used to display a man page."
+  :group 'org-link
+  :type '(choice (const man) (const woman)))
+
+(defun org-man-open (path)
+  "Visit the manpage on PATH.
+PATH should be a topic that can be thrown at the man command."
+  (funcall org-man-command path))
+
+(defun org-man-store-link ()
+  "Store a link to a manpage."
+  (when (memq major-mode '(Man-mode woman-mode))
+    ;; This is a man page, we do make this link
+    (let* ((page (org-man-get-page-name))
+           (link (concat "man:" page))
+           (description (format "Manpage for %s" page)))
+      (org-store-link-props
+       :type "man"
+       :link link
+       :description description))))
+
+(defun org-man-get-page-name ()
+  "Extract the page name from the buffer name."
+  ;; This works for both `Man-mode' and `woman-mode'.
+  (if (string-match " \\(\\S-+\\)\\*" (buffer-name))
+      (match-string 1 (buffer-name))
+    (error "Cannot create link to this man page")))
+
+(provide 'org-man)
+
+;;; org-man.el ends here
+#+end_src
+
+{{{noindent}}} You would activate this new link type in
+{{{file(.emacs)}}} with:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(require 'org-man)
+#+end_src
+
+{{{noindent}}} Let's go through the file and see what it does.
+{{{vindex(org-store-link-functions)}}}
+
+1. It does ~(require 'org)~ to make sure that {{{file(org.el)}}} has
+   been loaded.
+
+2. The next line calls ~org-add-link-type~ to define a new link type
+   with prefix {{{samp(man)}}}.  The call also contains the name of a
+   function that will be called to follow such a link.
+
+3. The next line adds a function to ~org-store-link-functions~, in
+   order to allow the command {{{kbd(C-c l)}}} to record a useful link
+   in a buffer displaying a man page.
+   
+
+The rest of the file defines the necessary variables and functions.
+First there is a customization variable that determines which Emacs
+command should be used to display man pages. There are two options,
+~man~ and ~woman~. Then the function to follow a link is defined. It
+gets the link path as an argument---in this case the link path is just
+a topic for the manual command. The function calls the value of
+~org-man-command~ to display the man page.
+
+Finally the function ~org-man-store-link~ is defined. When you try to
+store a link with {{{kbd(C-c l)}}}, this function will be called to
+try to make a link. The function must first decide if it is supposed
+to create the link for this buffer type; we do this by checking the
+value of the variable ~major-mode~. If not, the function must exit and
+return the value ~nil~. If yes, the link is created by getting the
+manual topic from the buffer name and prefixing it with the string
+{{{samp(man:)}}}. Then it must call the command ~org-store-link-props~
+and set the ~:type~ and ~:link~ properties. Optionally you can also
+set the ~:description~ property to provide a default for the link
+description when the link is later inserted into an Org buffer with
+{{{kbd(C-c C-l)}}}.
+
+When it makes sense for your new link type, you may also define a
+function ~org-PREFIX-complete-link~ that implements special (e.g.,
+completion) support for inserting such a link with {{{kbd(C-c C-l)}}}.
+Such a function should not accept any arguments, and return the full
+link with prefix.
+
+** Context-sensitive commands
+   :PROPERTIES:
+   :DESCRIPTION: How to add functionality to such commands
+   :END:
+{{{cindex(context-sensitive commands\\\, hooks)}}}
+{{{cindex(add-ons\\\, context-sensitive commands)}}}
+{{{vindex(org-ctrl-c-ctrl-c-hook)}}}
+
+Org has several commands that act differently depending on context.
+The most important example is the {{{kbd(C-c C-c)}}} (see [[The very
+busy C-c C-c key]]). Also the {{{kbd(M-cursor)}}} and
+{{{kbd(M-S-cursor)}}} keys have this property.
+
+Add-ons can tap into this functionality by providing a function that
+detects special context for that add-on and executes functionality
+appropriate for the context. Here is an example from Dan Davison's
+{{{file(org-R.el)}}} which allows you to evaluate commands based on
+the {{{file(R)}}} programming language.[fn:159] For this package,
+special contexts are lines that start with ~#+R:~ or ~#+RR:~.
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(defun org-R-apply-maybe ()
+  "Detect if this is context for org-R and execute R commands."
+  (if (save-excursion
+        (beginning-of-line 1)
+        (looking-at "#\\+RR?:"))
+      (progn (call-interactively 'org-R-apply)
+             t) ;; to signal that we took action
+    nil)) ;; to signal that we did not
+
+(add-hook 'org-ctrl-c-ctrl-c-hook 'org-R-apply-maybe)
+#+end_src
+
+The function first checks if the cursor is in such a line. If that is
+the case, ~org-R-apply~ is called and the function returns ~t~ to
+signal that action was taken, and {{{kbd(C-c C-c)}}} will stop looking
+for other contexts. If the function finds it should do nothing
+locally, it returns ~nil~ so that other, similar functions can have a
+try.
+
+** Tables in arbitrary syntax
+   :PROPERTIES:
+   :DESCRIPTION: Orgtbl for LaTeX and other programs
+   :END:
+{{{cindex(tables\\\, in other modes)}}}
+{{{cindex(lists\\\, in other modes)}}}
+{{{cindex(Orgtbl mode)}}}
+
+Since Orgtbl mode can be used as a minor mode in arbitrary buffers, a
+frequent feature request has been to make it work with native tables
+in specific languages, for example LaTeX. However, this is
+extremely hard to do in a general way, would lead to a customization
+nightmare, and would take away much of the simplicity of the Orgtbl
+mode table editor.
+
+This appendix describes a different approach.  We keep the Orgtbl mode
+table in its native format (the source table), and use a custom
+function to /translate/ the table to the correct syntax, and to
+/install/ it in the right location (the target table).  This puts
+the burden of writing conversion functions on the user, but it allows
+for a very flexible system.
+
+Bastien added the ability to do the same with lists, in Orgstruct
+mode. You can use Org's facilities to edit and structure lists by
+turning ~orgstruct-mode~ on, then locally exporting such lists in
+another format (HTML, LaTeX or Texinfo.)
+
+*** Radio tables
+    :PROPERTIES:
+    :DESCRIPTION: Sending and receiving radio tables
+    :END:
+{{{cindex(radio tables)}}}
+
+To define the location of the target table, you first need to create
+two lines that are comments in the current mode, but contain magic
+words for Orgtbl mode to find. Orgtbl mode will insert the translated
+table between these lines, replacing whatever was there before. For
+example:
+
+#+begin_example
+   /* BEGIN RECEIVE ORGTBL table_name */
+   /* END RECEIVE ORGTBL table_name */
+#+end_example
+
+{{{noindent}}} Just above the source table, we put a special line that
+tells Orgtbl mode how to translate this table and where to install it.
+For example: 
+
+{{{cindex(#+ORGTBL)}}}
+#+begin_example
+   ,#+ORGTBL: SEND table_name translation_function arguments ...
+#+end_example
+
+{{{noindent}}} Here, ~table_name~ is the reference name for the table
+that is also used in the receiver lines. ~translation_function~ is the
+Lisp function that does the translation. Furthermore, the line can
+contain a list of arguments (alternating key and value) at the end.
+The arguments will be passed as a property list to the translation
+function for interpretation. A few standard parameters are already
+recognized and acted upon before the translation function is called:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~:skip N~ ::
+
+  Skip the first N lines of the table. Hlines do count as separate lines
+  for this parameter!
+
+- ~:skipcols (n1 n2 ...)~ ::
+
+  List of columns that should be skipped. If the table has a column with
+  calculation marks, that column is automatically discarded as well.
+  Please note that the translator function sees the table /after/ the
+  removal of these columns, the function never knows that there have
+  been additional columns.
+
+- ~:no-escape t~ ::
+
+  When non-nil, do not escape special characters ~&%#_^~ when exporting
+  the table. The default value is nil.
+
+
+{{{noindent}}} The one problem remaining is how to keep the source
+table in the buffer without disturbing the normal workings of the
+file, for example during compilation of a C file or processing of a
+LaTeX file. There are a number of different solutions:
+
+- The table could be placed in a block comment if that is supported by
+  the language.  For example, in C mode you could wrap the table
+  between {{{samp(/*)}}} and {{{samp(*/)}}} lines.
+
+- Sometimes it is possible to put the table after some kind of END
+  statement, for example ~\bye~ in TeX and ~\end{document}~ in
+  LaTeX.
+
+- You can just comment the table line-by-line whenever you want to
+  process the file, and uncomment it whenever you need to edit the
+  table. This only sounds tedious---the command {{{kbd(M-x
+  orgtbl-toggle-comment)}}} makes this comment-toggling very easy, in
+  particular if you bind it to a key.
+
+*** A LaTeX example
+    :PROPERTIES:
+    :DESCRIPTION: Step by step, almost a tutorial
+    :TITLE:    A LaTeX example of radio tables
+    :END:
+{{{cindex(@LaTeX{}\\\, and Orgtbl mode)}}}
+
+The best way to wrap the source table in LaTeX is to use the
+~comment~ environment provided by {{{file(comment.sty)}}}. It has to
+be activated by placing ~\usepackage{comment}~ into the document
+header. Orgtbl mode can insert a radio table skeleton with the command
+{{{kbd(M-x orgtbl-insert-radio-table)}}}.[fn:160] You will be prompted
+for a table name, let's say we use {{{samp(salesfigures)}}}. You will
+then get the following template:
+
+{{{cindex(#+ORGTBL\\\, SEND)}}}
+#+begin_example
+   % BEGIN RECEIVE ORGTBL salesfigures
+   % END RECEIVE ORGTBL salesfigures
+   \begin{comment}
+   #+ORGTBL: SEND salesfigures orgtbl-to-latex
+   | | |
+   \end{comment}
+#+end_example
+
+{{{vindex(@LaTeX{}-verbatim-environments)}}}
+
+{{{noindent}}} The ~#+ORGTBL: SEND~ line tells Orgtbl mode to use the
+function ~orgtbl-to-latex~ to convert the table into LaTeX and to
+put it into the receiver location with name ~salesfigures~. You may
+now fill in the table---feel free to use the spreadsheet features:[fn:161]
+
+#+begin_example
+   % BEGIN RECEIVE ORGTBL salesfigures
+   % END RECEIVE ORGTBL salesfigures
+   \begin{comment}
+   #+ORGTBL: SEND salesfigures orgtbl-to-latex
+   | Month | Days | Nr sold | per day |
+   |-------+------+---------+---------|
+   | Jan   |   23 |      55 |     2.4 |
+   | Feb   |   21 |      16 |     0.8 |
+   | March |   22 |     278 |    12.6 |
+   #+TBLFM: $4=$3/$2;%.1f
+   % $ (optional extra dollar to keep font-lock happy, see footnote)
+   \end{comment}
+#+end_example
+
+{{{noindent}}} When you are done, press {{{kbd(C-c C-c)}}} in the
+table to get the converted table inserted between the two marker
+lines.
+
+Now let's assume you want to make the table header by hand, because
+you want to control how columns are aligned, etc. In this case we make
+sure that the table translator skips the first 2 lines of the source
+table, and tell the command to work as a splice, i.e., to not
+produce header and footer commands of the target table:
+
+#+begin_example
+   \begin{tabular}{lrrr}
+   Month & \multicolumn{1}{c}{Days} & Nr.\ sold & per day\\
+   % BEGIN RECEIVE ORGTBL salesfigures
+   % END RECEIVE ORGTBL salesfigures
+   \end{tabular}
+   %
+   \begin{comment}
+   #+ORGTBL: SEND salesfigures orgtbl-to-latex :splice t :skip 2
+   | Month | Days | Nr sold | per day |
+   |-------+------+---------+---------|
+   | Jan   |   23 |      55 |     2.4 |
+   | Feb   |   21 |      16 |     0.8 |
+   | March |   22 |     278 |    12.6 |
+   #+TBLFM: $4=$3/$2;%.1f
+   \end{comment}
+#+end_example
+
+The LaTeX translator function ~orgtbl-to-latex~ is already part of
+Orgtbl mode. It uses a ~tabular~ environment to typeset the table and
+marks horizontal lines with ~\hline~. Furthermore, it interprets the
+following parameters (see also see [[Translator functions]]):
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~:splice nil/t~ ::
+
+  When set to ~t~, return only table body lines, don't wrap them into a
+  tabular environment. Default is ~nil~.
+
+- ~:fmt fmt~ ::
+
+  A format to be used to wrap each field, it should contain ~%s~ for the
+  original field value. For example, to wrap each field value in
+  dollars, you could use ~:fmt "$%s$"~. This may also be a property list
+  with column numbers and formats, for example ~:fmt (2 "$%s$" 4
+  "%s\\%%")~. A function of one argument can be used in place of the
+  strings; the function must return a formatted string.
+
+- ~:efmt efmt~ ::
+
+  Use this format to print numbers with exponentials. The format should
+  have ~%s~ twice for inserting mantissa and exponent, for example:
+
+  #+begin_example
+     "%s\\times10^{%s}"
+  #+end_example
+
+  The default is:
+
+  #+begin_example
+     "%s\\,(%s)"
+  #+end_example
+
+  This may also be a property list with column numbers and formats, for
+  example:
+
+  #+begin_example
+     :efmt (2 "$%s\\times10^{%s}$" 4 "$%s\\cdot10^{%s}$")
+  #+end_example
+
+  After ~efmt~ has been applied to a value, ~fmt~ will also be applied.
+  Similar to ~fmt~, functions of two arguments can be supplied instead
+  of strings.
+
+*** Translator functions
+    :PROPERTIES:
+    :DESCRIPTION: Copy and modify
+    :END:
+{{{cindex(HTML\\\, and Orgtbl mode)}}}
+{{{cindex(translator function)}}}
+
+Orgtbl mode has several translator functions built-in: ~orgtbl-to-csv~
+(comma-separated values), ~orgtbl-to-tsv~ (TAB-separated values)
+~orgtbl-to-latex~, ~orgtbl-to-html~, and ~orgtbl-to-texinfo~. Except
+for ~orgtbl-to-html~, these all use a generic translator,
+~orgtbl-to-generic~.[fn:162] For example, ~orgtbl-to-latex~ itself is
+a very short function that computes the column definitions for the
+~tabular~ environment, defines a few field and line separators and
+then hands processing over to the generic translator. Here is the
+entire code:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(defun orgtbl-to-latex (table params)
+  "Convert the Orgtbl mode TABLE to LaTeX."
+  (let* ((alignment (mapconcat (lambda (x) (if x "r" "l"))
+                               org-table-last-alignment ""))
+         (params2
+          (list
+           :tstart (concat "\\begin@{tabular@}@{" alignment "@}")
+           :tend "\\end@{tabular@}"
+           :lstart "" :lend " \\\\" :sep " & "
+           :efmt "%s\\,(%s)" :hline "\\hline")))
+    (orgtbl-to-generic table (org-combine-plists params2 params))))
+#+end_src
+
+As you can see, the properties passed into the function (variable
+~PARAMS~) are combined with the ones newly defined in the function
+(variable ~PARAMS2~). The ones passed into the function (i.e., the
+ones set by the {{{samp(ORGTBL SEND)}}} line) take precedence. So if
+you would like to use the LaTeX translator, but wanted the line
+endings to be ~\\[2mm]~ instead of the default ~\\~, you could just
+overrule the default with:
+
+#+begin_example
+   ,#+ORGTBL: SEND test orgtbl-to-latex :lend " \\\\[2mm]"
+#+end_example
+
+For a new language, you can either write your own converter function
+in analogy with the LaTeX translator, or you can use the generic
+function directly. For example, if you have a language where a table
+is started with {{{samp(!BTBL!)}}}, ended with {{{samp(!ETBL!)}}}, and
+where table lines are started with {{{samp(!BL!)}}}, ended with
+{{{samp(!EL!)}}}, and where the field separator is a TAB, you could
+call the generic translator like this (on a single line!):
+
+#+begin_example
+   ,#+ORGTBL: SEND test orgtbl-to-generic :tstart "!BTBL!" :tend "!ETBL!"
+                                 :lstart "!BL! " :lend " !EL!" :sep "\t"
+#+end_example
+
+{{{noindent}}} Please check the documentation string of the function
+~orgtbl-to-generic~ for a full list of parameters understood by that
+function, and remember that you can pass each of them into
+~orgtbl-to-latex~, ~orgtbl-to-texinfo~, and any other function using
+the generic function.
+
+Of course you can also write a completely new function doing
+complicated things the generic translator cannot do. A translator
+function takes two arguments. The first argument is the table, a list
+of lines, each line either the symbol ~hline~ or a list of fields. The
+second argument is the property list containing all parameters
+specified in the {{{samp(#+ORGTBL: SEND)}}} line. The function must
+return a single string containing the formatted table. If you write a
+generally useful translator, please post it to the [[mailto:emacs-orgmode@gnu.org][mailing list]] so
+that others can benefit from your work.
+
+*** Radio lists
+    :PROPERTIES:
+    :DESCRIPTION: Doing the same for lists
+    :END:
+{{{cindex(radio lists)}}}
+{{{cindex(org-list-insert-radio-list)}}}
+
+Sending and receiving radio lists works exactly the same way as
+sending and receiving radio tables (see [[Radio tables]]). As for radio
+tables, you can insert radio list templates in HTML, LaTeX and
+Texinfo modes by calling ~org-list-insert-radio-list~.
+
+Here are the differences with radio tables:
+
+- Orgstruct mode must be active.
+
+- Use the ~ORGLST~ keyword instead of ~ORGTBL~.
+
+- The available translation functions for radio lists don't take
+  parameters.
+
+- {{{kbd(C-c C-c)}}} will work when pressed on the first item of the
+  list.
+
+
+Here is a LaTeX example.  Let's say that you have this in your
+LaTeX file:
+
+{{{cindex(#+ORGLST)}}}
+#+begin_example
+   % BEGIN RECEIVE ORGLST to-buy
+   % END RECEIVE ORGLST to-buy
+   \begin{comment}
+   #+ORGLST: SEND to-buy org-list-to-latex
+   - a new house
+   - a new computer
+     + a new keyboard
+     + a new mouse
+   - a new life
+   \end{comment}
+#+end_example
+
+Pressing `C-c C-c' on ~a new house~ will insert the converted
+LaTeX list between the two marker lines.
+
+** Dynamic blocks
+   :PROPERTIES:
+   :DESCRIPTION: Automatically filled blocks
+   :END:
+{{{cindex(dynamic blocks)}}}
+
+Org documents can contain /dynamic blocks/. These are specially marked
+regions that are updated by some user-written function. A good example
+for such a block is the clock table inserted by the command 
+{{{kbd(C-c C-x C-r)}}} (see [[Clocking work time]]).
+
+Dynamic blocks are enclosed by a BEGIN-END structure that assigns a
+name to the block and can also specify parameters for the function
+producing the content of the block.
+
+{{{cindex(#+BEGIN:dynamic block)}}}
+#+begin_example
+   ,#+BEGIN: myblock :parameter1 value1 :parameter2 value2 ...
+
+   ,#+END:
+#+end_example
+
+Dynamic blocks are updated with the following commands:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{kbd(C-c C-x C-u)}}}, ~org-dblock-update~ ::
+  {{{kindex(C-c C-x C-u)}}}
+
+  Update dynamic block at point.
+
+- {{{kbd(C-u C-c C-x C-u)}}} ::
+  {{{kindex(C-u C-c C-x C-u)}}}
+
+  Update all dynamic blocks in the current file.
+
+
+Updating a dynamic block means to remove all the text between ~BEGIN~
+and ~END~, parse the ~BEGIN~ line for parameters and then call the
+specific writer function for this block to insert the new content. If
+you want to use the original content in the writer function, you can
+use the extra parameter ~:content~.
+
+For a block with name ~myblock~, the writer function is
+~org-dblock-write:myblock~ with as only parameter a property list
+with the parameters given in the begin line.  Here is a trivial example
+of a block that keeps track of when the block update function was last
+run:
+
+#+begin_example
+   ,#+BEGIN: block-update-time :format "on %m/%d/%Y at %H:%M"
+
+   ,#+END:
+#+end_example
+
+{{{noindent}}} The corresponding block writer function could look like
+this:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(defun org-dblock-write:block-update-time (params)
+   (let ((fmt (or (plist-get params :format) "%d. %m. %Y")))
+     (insert "Last block update at: "
+             (format-time-string fmt (current-time)))))
+#+end_src
+
+If you want to make sure that all dynamic blocks are always
+up-to-date, you could add the function ~org-update-all-dblocks~ to a
+hook, for example ~before-save-hook~. ~org-update-all-dblocks~ is
+written in a way such that it does nothing in buffers that are not in
+~org-mode~.
+
+You can narrow the current buffer to the current dynamic block (like
+any other block) with ~org-narrow-to-block~.
+
+** Special agenda views
+   :PROPERTIES:
+   :DESCRIPTION: Customized views
+   :END:
+{{{cindex(agenda views\\\, user-defined)}}}
+{{{vindex(org-agenda-skip-function)}}}
+{{{vindex(org-agenda-skip-function-global)}}}
+
+Org provides a special hook that can be used to narrow down the
+selection made by these agenda views: ~agenda~, ~todo~, ~alltodo~,
+~tags~, ~tags-todo~, ~tags-tree~. You may specify a function that is
+used at each match to verify if the match should indeed be part of the
+agenda view, and if not, how much should be skipped. You can specify a
+global condition that will be applied to all agenda views, this
+condition would be stored in the variable
+~org-agenda-skip-function-global~. More commonly, such a definition is
+applied only to specific custom searches, using
+~org-agenda-skip-function~.
+
+Let's say you want to produce a list of projects that contain a
+~WAITING~ tag anywhere in the project tree. Let's further assume that
+you have marked all tree headings that define a project with the TODO
+keyword PROJECT. In this case you would run a TODO search for the
+keyword PROJECT, but skip the match unless there is a ~WAITING~ tag
+anywhere in the subtree belonging to the project line.
+
+To achieve this, you must write a function that searches the subtree for
+the tag.  If the tag is found, the function must return ~nil~ to
+indicate that this match should not be skipped.  If there is no such
+tag, return the location of the end of the subtree, to indicate that
+search should continue from there.
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(defun my-skip-unless-waiting ()
+  "Skip trees that are not waiting"
+  (let ((subtree-end (save-excursion (org-end-of-subtree t))))
+    (if (re-search-forward ":waiting:" subtree-end t)
+        nil          ; tag found, do not skip
+      subtree-end))) ; tag not found, continue after end of subtree
+#+end_src
+
+Now you may use this function in an agenda custom command, for example
+like this:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(org-add-agenda-custom-command
+ '("b" todo "PROJECT"
+   ((org-agenda-skip-function 'my-skip-unless-waiting)
+    (org-agenda-overriding-header "Projects waiting for something: "))))
+#+end_src
+
+{{{vindex(org-agenda-overriding-header)}}}
+
+Note that this also binds ~org-agenda-overriding-header~ to get a
+meaningful header in the agenda view.
+
+{{{vindex(org-odd-levels-only)}}}
+{{{vindex(org-agenda-skip-function)}}}
+
+A general way to create custom searches is to base them on a search
+for entries with a certain level limit. If you want to study all
+entries with your custom search function, simply do a search for
+{{{samp(LEVEL>0)}}}, and then use ~org-agenda-skip-function~ to select
+the entries you really want to have.[fn:163]
+
+You may also put a Lisp form into ~org-agenda-skip-function~.  In
+particular, you may use the functions ~org-agenda-skip-entry-if~
+and ~org-agenda-skip-subtree-if~ in this form, for example:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- {{{samp((org-agenda-skip-entry-if 'scheduled))}}} ::
+
+  Skip current entry if it has been scheduled.
+
+- {{{samp((org-agenda-skip-entry-if 'notscheduled))}}} ::
+
+  Skip current entry if it has not been scheduled.
+
+- {{{samp((org-agenda-skip-entry-if 'deadline))}}} ::
+
+  Skip current entry if it has a deadline.
+
+- {{{samp((org-agenda-skip-entry-if 'scheduled 'deadline))}}} ::
+
+  Skip current entry if it has a deadline, or if it is scheduled.
+
+- {{{samp((org-agenda-skip-entry-if 'todo '("TODO" "WAITING")))}}} ::
+
+  Skip current entry if the TODO keyword is TODO or WAITING.
+
+- {{{samp((org-agenda-skip-entry-if 'todo 'done))}}} ::
+
+  Skip current entry if the TODO keyword marks a DONE state.
+
+- {{{samp((org-agenda-skip-entry-if 'timestamp))}}} ::
+
+  Skip current entry if it has any timestamp, may also be deadline or scheduled.
+  <<x-agenda-skip-entry-regexp>>
+
+- {{{samp((org-agenda-skip-entry-if 'regexp "regular expression"))}}} ::
+  
+  Skip current entry if the regular expression matches in the entry.
+
+- {{{samp((org-agenda-skip-entry-if 'notregexp "regular expression"))}}} ::
+
+  Skip current entry unless the regular expression matches.
+
+- {{{samp((org-agenda-skip-subtree-if 'regexp "regular expression"))}}} ::
+
+  Same as above, but check and skip the entire subtree.
+
+
+Therefore we could also have written the search for WAITING projects
+like this, even without defining a special function:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(org-add-agenda-custom-command
+ '("b" todo "PROJECT"
+   ((org-agenda-skip-function '(org-agenda-skip-subtree-if
+                                'regexp ":waiting:"))
+    (org-agenda-overriding-header "Projects waiting for something: "))))
+#+end_src
+
+** Extracting agenda information
+   :PROPERTIES:
+   :DESCRIPTION: Post-processing agenda information
+   :END:
+{{{cindex(agenda\\\, pipe)}}}
+{{{cindex(Scripts\\\, for agenda processing)}}}
+{{{vindex(org-agenda-custom-commands)}}}
+
+Org provides commands to access agenda information for the command
+line in Emacs batch mode. This extracted information can be sent
+directly to a printer, or it can be read by a program that does
+further processing of the data. The first of these commands is the
+function ~org-batch-agenda~, that produces an agenda view and sends it
+as ASCII text to STDOUT. The command takes a single string as
+parameter. If the string has length 1, it is used as a key to one of
+the commands you have configured in ~org-agenda-custom-commands~,
+basically any key you can use after {{{kbd(C-c a)}}}. For example, to
+directly print the current TODO list, you could use:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src sh
+emacs -batch -l ~/.emacs -eval '(org-batch-agenda "t")' | lpr
+#+end_src
+
+If the parameter is a string with 2 or more characters, it is used as
+a tags/TODO match string. For example, to print your local shopping
+list (all items with the tag {{{samp(shop)}}}, but excluding the tag
+{{{samp(NewYork)}}}), you could use:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src sh
+emacs -batch -l ~/.emacs                                      \
+      -eval '(org-batch-agenda "+shop-NewYork")' | lpr
+#+end_src
+
+{{{noindent}}} You may also modify parameters on the fly like this:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src sh
+emacs -batch -l ~/.emacs                                      \
+   -eval '(org-batch-agenda "a"                               \
+            org-agenda-span (quote month)                     \
+            org-agenda-include-diary nil                      \
+            org-agenda-files (quote ("~/org/project.org")))'  \
+   | lpr
+#+end_src
+
+{{{noindent}}} which will produce a 30-day agenda, fully restricted to
+the Org file {{{file(~/org/projects.org)}}}, not even including the
+diary.
+
+If you want to process the agenda data in more sophisticated ways, you
+can use the command ~org-batch-agenda-csv~ to get a comma-separated
+list of values for each agenda item.  Each line in the output will
+contain a number of fields separated by commas.  The fields in a line
+are:
+
+#+attr_texinfo: :table-type "table" :indic "@code"
+- category ::     The category of the item
+- head ::        The headline, without TODO keyword, TAGS and PRIORITY
+- type ::        The type of the agenda entry, can be:
+  - todo ::               selected in TODO match
+  - tagsmatch ::          selected in tags match
+  - diary ::              imported from diary
+  - deadline ::           a deadline
+  - scheduled ::         scheduled
+  - timestamp ::         appointment, selected by timestamp
+  - closed ::            entry was closed on date
+  - upcoming-deadline ::  warning about nearing deadline
+  - past-scheduled ::     forwarded scheduled item
+  - block ::              entry has date block including date
+- todo ::         The TODO keyword, if any
+- tags ::        All tags including inherited ones, separated by colons
+- date ::        The relevant date, like 2007-2-14
+- time ::        The time, like 15:00-16:50
+- extra ::       String with extra planning info
+- priority-l ::   The priority letter if any was given
+- priority-n ::  The computed numerical priority
+
+{{{noindent}}} Time and date will only be given if a timestamp (or
+deadline/scheduled) led to the selection of the item.
+
+A CSV list like this is very easy to use in a post-processing script.
+For example, here is a Perl program that gets the TODO list from
+Emacs/Org and prints all the items, preceded by a checkbox:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src perl
+#!/usr/bin/perl
+
+# define the Emacs command to run
+$cmd = "emacs -batch -l ~/.emacs -eval '(org-batch-agenda-csv \"t\")'";
+
+# run it and capture the output
+$agenda = qx@{$cmd 2>/dev/null@};
+
+# loop over all lines
+foreach $line (split(/\n/,$agenda)) @{
+  # get the individual values
+  ($category,$head,$type,$todo,$tags,$date,$time,$extra,
+   $priority_l,$priority_n) = split(/,/,$line);
+  # process and print
+  print "[ ] $head\n";
+@}
+#+end_src
+
+** Using the property API
+   :PROPERTIES:
+   :DESCRIPTION: Writing programs that use entry properties
+   :END:
+{{{cindex(API\\\, for properties)}}}
+{{{cindex(properties\\\, API)}}}
+
+Here is a description of the functions that can be used to work with
+properties.
+
+{{{defun}}} org-entry-properties &optional pom which
+Get all properties of the entry at point-or-marker POM.
+This includes the TODO keyword, the tags, time strings for deadline,
+scheduled, and clocking, and any additional properties defined in the
+entry.  The return value is an alist.  Keys may occur multiple times
+if the property key was used several times.@*
+POM may also be nil, in which case the current entry is used.
+If WHICH is nil or `all', get all properties.  If WHICH is
+`special' or `standard', only get that subclass.
+{{{enddefun}}}
+
+{{{vindex(org-use-property-inheritance)}}}
+{{{findex(org-insert-property-drawer)}}}
+
+{{{defun}}} org-entry-get pom property &optional inherit
+Get value of PROPERTY for entry at point-or-marker POM.  By default,
+this only looks at properties defined locally in the entry.  If INHERIT
+is non-nil and the entry does not have the property, then also check
+higher levels of the hierarchy.  If INHERIT is the symbol
+~selective~, use inheritance if and only if the setting of
+~org-use-property-inheritance~ selects PROPERTY for inheritance.
+{{{enddefun}}}
+
+{{{defun}}} org-entry-delete pom property
+Delete the property PROPERTY from entry at point-or-marker POM.
+{{{enddefun}}}
+
+{{{defun}}} org-entry-put pom property value
+Set PROPERTY to VALUE for entry at point-or-marker POM.
+{{{enddefun}}}
+
+{{{defun}}} org-buffer-property-keys &optional include-specials
+Get all property keys in the current buffer.
+{{{enddefun}}}
+
+{{{defun}}} org-insert-property-drawer
+Insert a property drawer for the current entry.  Also
+{{{enddefun}}}
+
+{{{defun}}} org-entry-put-multivalued-property pom property &rest values
+Set PROPERTY at point-or-marker POM to VALUES.  VALUES should be a list of
+strings.  They will be concatenated, with spaces as separators.
+{{{enddefun}}}
+
+{{{defun}}} org-entry-get-multivalued-property pom property
+Treat the value of the property PROPERTY as a whitespace-separated list of
+values and return the values as a list of strings.
+{{{enddefun}}}
+
+{{{defun}}} org-entry-add-to-multivalued-property pom property value
+Treat the value of the property PROPERTY as a whitespace-separated list of
+values and make sure that VALUE is in this list.
+{{{enddefun}}}
+
+{{{defun}}} org-entry-remove-from-multivalued-property pom property value
+Treat the value of the property PROPERTY as a whitespace-separated list of
+values and make sure that VALUE is /not/ in this list.
+{{{enddefun}}}
+
+{{{defun}}} org-entry-member-in-multivalued-property pom property value
+Treat the value of the property PROPERTY as a whitespace-separated list of
+values and check if VALUE is in this list.
+{{{enddefun}}}
+
+{{{defopt}}} org-property-allowed-value-functions
+Hook for functions supplying allowed values for a specific property.
+The functions must take a single argument, the name of the property, and
+return a flat list of allowed values.  If {{{samp(:ETC)}}} is one of
+the values, use the values as completion help, but allow also other values
+to be entered.  The functions must return ~nil~ if they are not
+responsible for this property.
+{{{enddefopt}}}
+
+** Using the mapping API
+   :PROPERTIES:
+   :DESCRIPTION: Mapping over all or selected entries
+   :END:
+{{{cindex(API\\\, for mapping)}}}
+{{{cindex(mapping entries\\\, API)}}}
+
+Org has sophisticated mapping capabilities to find all entries satisfying
+certain criteria.  Internally, this functionality is used to produce agenda
+views, but there is also an API that can be used to execute arbitrary
+functions for each or selected entries.  The main entry point for this API
+is:
+
+{{{defun}}} org-map-entries func &optional match scope &rest skip
+Call FUNC at each headline selected by MATCH in SCOPE.
+
+FUNC is a function or a Lisp form.  The function will be called without
+arguments, with the cursor positioned at the beginning of the headline.
+The return values of all calls to the function will be collected and
+returned as a list.
+
+The call to FUNC will be wrapped into a save-excursion form, so FUNC
+does not need to preserve point.  After evaluation, the cursor will be
+moved to the end of the line (presumably of the headline of the
+processed entry) and search continues from there.  Under some
+circumstances, this may not produce the wanted results.  For example,
+if you have removed (e.g., archived) the current (sub)tree it could
+mean that the next entry will be skipped entirely.  In such cases, you
+can specify the position from where search should continue by making
+FUNC set the variable `org-map-continue-from' to the desired buffer
+position.
+
+MATCH is a tags/property/todo match as it is used in the agenda match view.
+Only headlines that are matched by this query will be considered during
+the iteration.  When MATCH is nil or t, all headlines will be
+visited by the iteration.
+
+SCOPE determines the scope of this command.  It can be any of:
+
+#+attr_texinfo: :table-type "table" :indic "@code"
+- nil ::     
+
+  The current buffer, respecting the restriction, if any.
+
+- tree ::    
+
+  The subtree started with the entry at point.
+
+- region ::  
+
+  The entries within the active region, if any.
+
+- file ::    
+
+  The current buffer, without restriction.
+
+- file-with-archives ::
+        
+  The current buffer, and any archives associated with it.
+
+- agenda ::  
+
+  All agenda files.
+
+- agenda-with-archives ::
+        
+  All agenda files with any archive files associated with them.
+
+- (file1 file2 ...) ::
+        
+  If this is a list, all files in the list will be scanned.
+
+
+{{{noindent}}} The remaining args are treated as settings for the
+skipping facilities of the scanner. The following items can be given
+here:
+
+{{{vindex(org-agenda-skip-function)}}}
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- ~archive~ ::   
+
+  Skip trees with the archive tag.
+
+- ~comment~ ::   
+
+  Skip trees with the COMMENT keyword.
+
+- function or Lisp form ::
+
+  Will be used as value for ~org-agenda-skip-function~, so whenever the
+  function returns t, FUNC will not be called for that entry and search
+  will continue from the point where the function leaves it.
+
+{{{enddefun}}}
+
+The function given to that mapping routine can really do anything you like.
+It can use the property API (see [[Using the property API]]) to gather more
+information about the entry, or in order to change metadata in the entry.
+Here are a few functions that might be handy:
+
+{{{defun}}} org-todo &optional arg
+Change the TODO state of the entry.  See the docstring of the functions for
+the many possible values for the argument ARG.
+{{{enddefun}}}
+
+{{{defun}}} org-priority &optional action
+Change the priority of the entry.  See the docstring of this function for the
+possible values for ACTION.
+{{{enddefun}}}
+
+{{{defun}}} org-toggle-tag tag &optional onoff
+Toggle the tag TAG in the current entry.  Setting ONOFF to either ~on~
+or ~off~ will not toggle tag, but ensure that it is either on or off.
+{{{enddefun}}}
+
+{{{defun}}} org-promote
+Promote the current entry.
+{{{enddefun}}}
+
+{{{defun}}} org-demote
+Demote the current entry.
+{{{enddefun}}}
+
+The following simple example will turn all entries in the current file
+with a tag ~TOMORROW~ into TODO entries with the keyword ~UPCOMING~.
+Entries in comment trees and in archive trees will be ignored.
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(org-map-entries
+   '(org-todo "UPCOMING")
+   "+TOMORROW" 'file 'archive 'comment)
+#+end_src
+
+The following example counts the number of entries with TODO keyword
+~WAITING~, in all agenda files.
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(length (org-map-entries t "/+WAITING" 'agenda))
+#+end_src
+
+* MobileOrg
+  :PROPERTIES:
+  :DESCRIPTION: Viewing and capture on a mobile device
+  :APPENDIX:    Appendix
+  :END:
+{{{cindex(iPhone)}}}
+{{{cindex(MobileOrg)}}}
+{{{cindex(Moreland\\\, Richard)}}}
+{{{cindex(Jones\\\, Matt)}}}
+
+MobileOrg is the name of the mobile companion app for Org mode,
+currently available for iOS and for Android. MobileOrg offers
+offline viewing and capture support for an Org mode system rooted on a
+``real'' computer. It does also allow you to record changes to
+existing entries. The [[http://mobileorg.ncogni.to/][iOS implementation]] for the iPhone/iPod
+Touch/iPad series of devices, was developed by Richard Moreland.
+Android users should check out [[http://wiki.github.com/matburt/mobileorg-android/][MobileOrg Android]] by Matt Jones. The
+two implementations are not identical but offer similar features.
+
+This appendix describes the support Org has for creating agenda views
+in a format that can be displayed by MobileOrg, and for integrating
+notes captured and changes made by MobileOrg into the main system.
+
+For changing tags and TODO states in MobileOrg, you should have set up
+the customization variables ~org-todo-keywords~ and ~org-tags-alist~
+to cover all important tags and TODO keywords, even if individual
+files use only part of these. MobileOrg will also offer you states and
+tags set up with in-buffer settings, but it will understand the
+logistics of TODO state /sets/ (see [[Per-file keywords]]) and /mutually
+exclusive/ tags (see [[Setting tags]]) only for those set in these
+variables.
+
+** Setting up the staging area
+   :PROPERTIES:
+   :DESCRIPTION: Where to interact with the mobile device
+   :END:
+
+MobileOrg needs to interact with Emacs through a directory on a
+server. If you are using a public server, you should consider to
+encrypt the files that are uploaded to the server. This can be done
+with Org mode 7.02 and with MobileOrg 1.5 (iPhone version), and you
+need an {{{file(openssl)}}} installation on your system. To turn on
+encryption, set a password in MobileOrg and, on the Emacs side,
+configure the variable ~org-mobile-use-encryption~.[fn:164]
+
+The easiest way to create that directory is to use a free [[http://dropbox.com][Dropbox]]
+account.[fn:165] When MobileOrg first connects to your Dropbox, it
+will create a directory MobileOrg inside the Dropbox. After the
+directory has been created, tell Emacs about it:
+
+#+header: :eval no
+#+header: :exports code
+#+begin_src emacs-lisp
+(setq org-mobile-directory "~/Dropbox/MobileOrg")
+#+end_src
+
+Org mode has commands to put files for MobileOrg into that
+directory, and to read captured notes from there.
+
+** Pushing to MobileOrg
+   :PROPERTIES:
+   :DESCRIPTION: Uploading Org files and agendas
+   :END:
+
+This operation copies all files currently listed in ~org-mobile-files~
+to the directory ~org-mobile-directory~. By default this list contains
+all agenda files (as listed in ~org-agenda-files~), but additional
+files can be included by customizing ~org-mobile-files~. File names
+will be staged with paths relative to ~org-directory~, so all files
+should be inside this directory.[fn:184]
+
+The push operation also creates a special Org file
+{{{file(agendas.org)}}} with all custom agenda view defined by the
+user.[fn:166]
+
+Finally, Org writes the file {{{file(index.org)}}}, containing links
+to all other files. MobileOrg first reads this file from the server,
+and then downloads all agendas and Org files listed in it. To speed up
+the download, MobileOrg will only read files whose checksums have
+changed.[fn:167]
+
+** Pulling from MobileOrg
+   :PROPERTIES:
+   :DESCRIPTION: Integrating captured and flagged items
+   :END:
+
+When MobileOrg synchronizes with the server, it not only pulls the
+Org files for viewing. It also appends captured entries and pointers
+to flagged and changed entries to the file {{{file(mobileorg.org)}}}
+on the server. Org has a /pull/ operation that integrates this
+information into an inbox file and operates on the pointers to flagged
+entries. Here is how it works:
+
+1. Org moves all entries found in {{{file(mobileorg.org)}}} and
+   appends them to the file pointed to by the variable
+   ~org-mobile-inbox-for-pull~.[fn:168] Each captured entry and each
+   editing event will be a top-level entry in the inbox file.
+
+2. After moving the entries, Org will attempt to implement the changes
+   made in MobileOrg. Some changes are applied directly and without
+   user interaction. Examples are all changes to tags, TODO state,
+   headline and body text that can be cleanly applied. Entries that
+   have been flagged for further action will receive a tag
+   ~:FLAGGED:~, so that they can be easily found again. When there is
+   a problem finding an entry or applying the change, the pointer
+   entry will remain in the inbox and will be marked with an error
+   message. You need to later resolve these issues by hand.
+
+3. Org will then generate an agenda view with all flagged entries. The
+   user should then go through these entries and do whatever actions
+   are necessary. If a note has been stored while flagging an entry in
+   MobileOrg, that note will be displayed in the echo area when the
+   cursor is on the corresponding agenda line.
+
+   #+attr_texinfo: :table-type "table" :indic "@asis"
+   - {{{kbd(?)}}} ::
+     {{{kindex(?)}}}
+
+     Pressing {{{kbd(?)}}} in that special agenda will display the full
+     flagging note in another window and also push it onto the kill ring.
+     So you could use {{{kbd(? z C-y C-c C-c)}}} to store that flagging
+     note as a normal note in the entry. Pressing {{{kbd(?)}}} twice in
+     succession will offer to remove the ~:FLAGGED:~ tag along with the
+     recorded flagging note (which is stored in a property). In this way
+     you indicate that the intended processing for this flagged entry is
+     finished.
+
+
+{{{kindex(C-c a ?)}}}
+
+If you are not able to process all flagged entries directly, you can always
+return to this agenda view using {{{kbd(C-c a ?)}}}.[fn:169]
+
+* History and acknowledgments
+  :PROPERTIES:
+  :DESCRIPTION: How Org came into being
+  :OPTIONAL_TITLE: History and Acknowledgments
+  :APPENDIX:    Appendix
+  :END:
+** From Carsten
+
+Org was born in 2003, out of frustration over the user interface of
+the Emacs Outline mode. I was trying to organize my notes and
+projects, and using Emacs seemed to be the natural way to go. However,
+having to remember eleven different commands with two or three keys
+per command, only to hide and show parts of the outline tree, that
+seemed entirely unacceptable to me. Also, when using outlines to take
+notes, I constantly wanted to restructure the tree, organizing it
+parallel to my thoughts and plans. /Visibility cycling/ and /structure
+editing/ were originally implemented in the package
+{{{file(outline-magic.el)}}}, but quickly moved to the more general
+{{{file(org.el)}}}. As this environment became comfortable for project
+planning, the next step was adding /TODO entries/, basic /timestamps/,
+and /table support/. These areas highlighted the two main goals that
+Org still has today: to be a new, outline-based, plain text mode with
+innovative and intuitive editing features, and to incorporate project
+planning functionality directly into a notes file.
+
+Since the first release, literally thousands of emails to me or to the
+[[mailto:emacs-orgmode@gnu.org][mailing list]] have provided a constant stream of bug reports, feedback,
+new ideas, and sometimes patches and add-on code. Many thanks to
+everyone who has helped to improve this package. I am trying to keep
+here a list of the people who had significant influence in shaping one
+or more aspects of Org. The list may not be complete, if I have
+forgotten someone, please accept my apologies and let me know.
+
+Before I get to this list, a few special mentions are in order:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- Bastien Guerry ::
+
+  Bastien has written a large number of extensions to Org (most of them
+  integrated into the core by now), including the LaTeX exporter and
+  the plain list parser. His support during the early days, when he
+  basically acted as co-maintainer, was central to the success of this
+  project. Bastien also invented Worg, helped establishing the Web
+  presence of Org, and sponsored hosting costs for the ~orgmode.org~
+  website.
+
+- Eric Schulte and Dan Davison ::
+
+  Eric and Dan are jointly responsible for the Org-babel system, which
+  turns Org into a multi-language environment for evaluating code and
+  doing literate programming and reproducible research.
+
+- John Wiegley ::
+
+  John has contributed a number of great ideas and patches directly to
+  Org, including the attachment system ({{{file(org-attach.el)}}}),
+  integration with Apple Mail ({{{file(org-mac-message.el)}}}),
+  hierarchical dependencies of TODO items, habit tracking
+  ({{{file(org-habits.el)}}}), and encryption
+  ({{{file(org-crypt.el)}}}). Also, the capture system is really an
+  extended copy of his great {{{file(remember.el)}}}.
+
+- Sebastian Rose ::
+
+  Without Sebastian, the HTML/XHTML publishing of Org would be the
+  pitiful work of an ignorant amateur. Sebastian has pushed this part of
+  Org onto a much higher level. He also wrote {{{file(org-info.js)}}}, a
+  Java script for displaying webpages derived from Org using an
+  Info-like or a folding interface with single-key navigation.
+
+
+{{{noindent}}} See [[List of contributions][below]] for the full list of contributions! Again,
+please let me know what I am missing here!
+
+** From Bastien
+
+I (Bastien) have been maintaining Org since January 2011. This
+appendix would not be complete without adding a few more
+acknowledgements and thanks to Carsten's ones above.
+
+I am first grateful to Carsten for his trust while handing me over the
+maintainership of Org. His support as been great since day one of this
+new adventure, and it helped a lot.
+
+When I took over maintainership, I knew I would have to make Org more
+collaborative than ever, as I would have to rely on people that are
+more knowledgeable than I am on many parts of the code. Here is a list
+of the persons I could rely on, they should really be considered
+co-maintainers, either of the code or the community:
+
+#+attr_texinfo: :table-type "table" :indic "@asis"
+- Eric Schulte ::
+
+  Eric is maintaining the Babel parts of Org. His reactivity here kept
+  me away from worrying about possible bugs here and let me focus on
+  other parts.
+
+- Nicolas Goaziou ::
+
+  Nicolas is maintaining the consistency of the deepest parts of Org.
+  His work on {{{file(org-element.el)}}} and {{{file(org-export.el)}}}
+  has been outstanding, and opened the doors for many new ideas and
+  features.
+
+- Jambunathan K ::
+
+  Jambunathan contributed the ODT exporter, definitly a killer feature
+  of Org mode. He also contributed the new HTML exporter, which is
+  another core feature of Org. Here too, I knew I could rely on him to
+  fix bugs in these areas and to patiently explain the users what was
+  the problems and solutions.
+
+- Achim Gratz ::
+
+  Achim rewrote the building process of Org, turning some /ad hoc/ tools
+  into a flexible and conceptually clean process. He patiently coped
+  with the many hicups that such a change can create for users.
+
+- Nick Dokos ::
+
+  The Org mode mailing list would not be such a nice place without Nick,
+  who patiently helped users so many times. It is impossible to
+  overestimate such a great help, and the list would not be so active
+  without him.
+
+
+I received support from so many users that it is clearly impossible to be
+fair when shortlisting a few of them---but Org's history would not be
+complete if the ones above were not mentioned in this manual.
+
+** List of contributions
+
+- Russel Adams came up with the idea for drawers.
+
+- Thomas Baumann wrote {{{file(org-bbdb.el)}}} and {{{file(org-mhe.el)}}}.
+
+- Christophe Bataillon created the great unicorn logo that we use on
+  the Org mode website.
+
+- Alex Bochannek provided a patch for rounding timestamps.
+
+- Jan Böcker wrote {{{file(org-docview.el)}}}.
+
+- Brad Bozarth showed how to pull RSS feed data into Org mode files.
+
+- Tom Breton wrote {{{file(org-choose.el)}}}.
+
+- Charles Cave's suggestion sparked the implementation of templates
+  for Remember, which are now templates for capture.
+
+- Pavel Chalmoviansky influenced the agenda treatment of items with
+  specified time.
+
+- Gregory Chernov patched support for Lisp forms into table
+  calculations and improved XEmacs compatibility, in particular by
+  porting {{{file(nouline.el)}}} to XEmacs.
+
+- Sacha Chua suggested copying some linking code from Planner.
+
+- Baoqiu Cui contributed the DocBook exporter.
+
+- Eddward DeVilla proposed and tested checkbox statistics.  He also
+  came up with the idea of properties, and that there should be an API
+  for them.
+
+- Nick Dokos tracked down several nasty bugs.
+
+- Kees Dullemond used to edit projects lists directly in HTML and so
+  inspired some of the early development, including HTML export.  He
+  also asked for a way to narrow wide table columns.
+
+- Thomas S. Dye contributed documentation on Worg and helped
+  integrating the Org-Babel documentation into the manual.
+
+-  Christian Egli converted the documentation into Texinfo format,
+   inspired the agenda, patched CSS formatting into the HTML exporter,
+   and wrote {{{file(org-taskjuggler.el)}}}.
+
+- David Emery provided a patch for custom CSS support in exported
+  HTML agendas.
+
+- Nic Ferrier contributed mailcap and XOXO support.
+
+- Miguel A. Figueroa-Villanueva implemented hierarchical checkboxes.
+
+- John Foerch figured out how to make incremental search show
+  context around a match in a hidden outline tree.
+
+- Raimar Finken wrote {{{file(org-git-line.el)}}}.
+
+- Mikael Fornius works as a mailing list moderator.
+
+- Austin Frank works as a mailing list moderator.
+
+- Eric Fraga drove the development of BEAMER export with ideas and
+  testing.
+
+- Barry Gidden did proofreading the manual in preparation for the
+  book publication through Network Theory Ltd.
+
+- Niels Giesen had the idea to automatically archive DONE trees.
+
+- Nicolas Goaziou rewrote much of the plain list code.
+
+- Kai Grossjohann pointed out key-binding conflicts with other packages.
+
+- Brian Gough of Network Theory Ltd publishes the Org mode manual as
+  a book.
+
+- Bernt Hansen has driven much of the support for auto-repeating
+  tasks, task state change logging, and the clocktable. His clear
+  explanations have been critical when we started to adopt the Git
+  version control system.
+
+-  Manuel Hermenegildo has contributed various ideas, small fixes
+   and patches.
+
+- Phil Jackson wrote {{{file(org-irc.el)}}}.
+
+- Scott Jaderholm proposed footnotes, control over whitespace
+  between folded entries, and column view for properties.
+
+- Matt Jones wrote /MobileOrg Android/.
+
+- Tokuya Kameshima wrote {{{file(org-wl.el)}}} and {{{file(org-mew.el)}}}.
+
+- Shidai Liu ("Leo") asked for embedded LaTeX and tested it.  He
+  also provided frequent feedback and some patches.
+
+- Matt Lundin has proposed last-row references for table formulas
+  and named invisible anchors.  He has also worked a lot on the FAQ.
+
+- David Maus wrote {{{file(org-atom.el)}}}, maintains the issues
+  file for Org, and is a prolific contributor on the mailing list with
+  competent replies, small fixes and patches.
+
+- Jason F. McBrayer suggested agenda export to CSV format.
+
+- Max Mikhanosha came up with the idea of refiling.
+
+- Dmitri Minaev sent a patch to set priority limits on a per-file
+  basis.
+
+- Stefan Monnier provided a patch to keep the Emacs-Lisp compiler
+  happy.
+
+- Richard Moreland wrote /MobileOrg/ for the iPhone.
+
+- Rick Moynihan proposed allowing multiple TODO sequences in a file
+  and being able to quickly restrict the agenda to a subtree.
+
+- Todd Neal provided patches for links to Info files and Elisp forms.
+
+- Greg Newman refreshed the unicorn logo into its current form.
+
+- Tim O'Callaghan suggested in-file links, search options for
+  general file links, and TAGS.
+
+- Osamu Okano wrote {{{file(orgcard2ref.pl)}}}, a Perl program to
+  create a text version of the reference card.
+
+- Takeshi Okano translated the manual and David O'Toole's tutorial
+  into Japanese.
+
+- Oliver Oppitz suggested multi-state TODO items.
+
+- Scott Otterson sparked the introduction of descriptive text for
+  links, among other things.
+
+- Pete Phillips helped during the development of the TAGS feature,
+  and provided frequent feedback.
+
+- Martin Pohlack provided the code snippet to bundle character
+  insertion into bundles of 20 for undo.
+
+- T.V. Raman reported bugs and suggested improvements.
+
+- Matthias Rempe (Oelde) provided ideas, Windows support, and
+  quality control.
+
+- Paul Rivier provided the basic implementation of named footnotes.
+  He also acted as mailing list moderator for some time.
+
+- Kevin Rogers contributed code to access VM files on remote hosts.
+
+- Frank Ruell solved the mystery of the ~keymapp nil~ bug, a
+  conflict with {{{file(allout.el)}}}.
+
+- Jason Riedy generalized the send-receive mechanism for Orgtbl
+  tables with extensive patches.
+
+- Philip Rooke created the Org reference card, provided lots of
+  feedback, developed and applied standards to the Org documentation.
+
+- Christian Schlauer proposed angular brackets around links, among
+  other things.
+
+- Paul Sexton wrote {{{file(org-ctags.el)}}}.
+
+- Tom Shannon's {{{file(organizer-mode.el)}}} inspired linking to VM/BBDB/Gnus.
+
+- Ilya Shlyakhter proposed the Archive Sibling, line numbering in
+  literal examples, and remote highlighting for referenced code lines.
+
+- Stathis Sideris wrote the {{{file(ditaa.jar)}}} ASCII to PNG
+  converter that is now packaged into Org's {{{file(contrib)}}}
+  directory.
+
+- Daniel Sinder came up with the idea of internal archiving by
+  locking subtrees.
+
+- Dale Smith proposed link abbreviations.
+
+- James TD Smith has contributed a large number of patches for
+  useful tweaks and features.
+
+- Adam Spiers asked for global linking commands, inspired the link
+  extension system, added support for mairix, and proposed the mapping
+  API.
+
+- Ulf Stegemann created the table to translate special symbols to
+  HTML, LaTeX, UTF-8, Latin-1 and ASCII.
+
+- Andy Stewart contributed code to {{{file(org-w3m.el)}}}, to copy
+  HTML content with links transformation to Org syntax.
+
+- David O'Toole wrote {{{file(org-publish.el)}}} and drafted the
+  manual chapter about publishing.
+
+- Jambunathan K contributed the ODT exporter.
+
+- Sebastien Vauban reported many issues with LaTeX and BEAMER
+  export and enabled source code highlighting in Gnus.
+
+- Stefan Vollmar organized a video-recorded talk at the
+  Max-Planck-Institute for Neurology.  He also inspired the creation
+  of a concept index for HTML export.
+
+- J\"urgen Vollmer contributed code generating the table of contents
+  in HTML output.
+
+- Samuel Wales has provided important feedback and bug reports.
+
+- Chris Wallace provided a patch implementing the {{{samp(QUOTE)}}}
+  keyword.
+
+- David Wainberg suggested archiving, and improvements to the
+  linking system.
+
+- Carsten Wimmer suggested some changes and helped fix a bug in
+  linking to Gnus.
+
+- Roland Winkler requested additional key bindings to make Org work
+  on a tty.
+
+- Piotr Zielinski wrote {{{file(org-mouse.el)}}}, proposed agenda
+  blocks and contributed various ideas and code snippets.
+
+* Concept index
+:PROPERTIES:
+:OPTIONAL_TITLE: Main Index
+:INDEX:    cp
+:DESCRIPTION: Org's concepts and features
+:END:
+
+#+comment: {{{printindex(cp)}}}
+
+* Key index
+  :PROPERTIES:
+  :DESCRIPTION: Key bindings and where they are described
+  :OPTIONAL_TITLE: Key Index
+  :INDEX:    ky
+  :END:
+
+#+comment: {{{printindex(ky)}}}
+
+* Command and function index
+  :PROPERTIES:
+  :DESCRIPTION: Command names and some internal functions
+  :OPTIONAL_TITLE: Command and Function Index
+  :INDEX:    fn
+  :END:
+
+#+comment: {{{printindex(fn)}}}
+
+* Variable index
+  :PROPERTIES:
+  :DESCRIPTION: Variables mentioned in the manual
+  :OPTIONAL_TITLE: Variable Index
+  :INDEX:    vr
+  :END:
+
+This is not a complete index of variables and faces, only the ones
+that are mentioned in the manual. For a more complete list, use
+{{{kbdspckey(M-x org-customize,RET)}}} and then click yourself through
+the tree.
+
+#+comment: {{{printindex(vr)}}}
+
+* Copying
+   :PROPERTIES:
+   :copying:  t
+   :END:
+
+This manual is for Org version {{{value(VERSION)}}}.
+
+Copyright (C) 2004-2013  Free Software Foundation, Inc.
+
+#+BEGIN_QUOTE
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU Manual,''
+and with the Back-Cover Texts as in (a) below.  A copy of the license
+is included in the section entitled ``GNU Free Documentation License.''
+
+(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
+modify this GNU manual.  Buying copies from the FSF supports it in
+developing GNU and promoting software freedom.''
+
+This document is part of a collection distributed under the GNU Free
+Documentation License.  If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
+#+END_QUOTE
+
+* Instructions for use                                             :noexport:
+- [ ] Tangle the makefile, `C-c C-v t'
+- [ ] Execute [[Editing setup][this source code block]]
+- [ ] Asynchronously generate the info file, `C-e i i'
+
+* Improvements and fixes [6/12]                                    :noexport:
+- [X] Jon will fix detailed node listing
+- [X] Jon will fix :INDEX: property
+- [ ] New link type to generate pxref? (asked on ML)
+- [X] New macro for kbdkey that preserves space, e.g., `C-c <RET>'
+- [X] Indent examples one more space to match indentation of footnotes
+- [ ] How to generate @kbd{\}?
+- [ ] How to generate @kbd{~}?
+- [ ] How to include GNU Free Documentation License as Appendix D?
+- [X] Straighten out footnotes
+- [ ] Truncated footnote (asked on ML)
+- [ ] Resolve macros with XXX arguments
+- [X] Get @appendix instead of @chapter?
+
+* Nicolas Goaziou's instructions for v.8                           :noexport:
+
+** Global Changes
+All occurrences of "#+LABEL:" should be replaced with "#+NAME:".
+
+*** TODO Replace #+LABEL with #+NAME
+
+** Chapter 2, Document Structure
+   :PROPERTIES:
+   :CATEGORY: Ch. 2
+   :END:
+In "2. Document Structure", one section could be added about
+cross-referencing, which would point to "Internal links". There, targets
+in comments can be removed. Also most back-ends will turn links to
+targets into proper cross-reference number (see `org-export-get-ordinal'
+docstring for cases handled).
+
+*** TODO Add section about cross-referencing
+
+** Chapter 4, Hyperlinks
+   :PROPERTIES:
+   :CATEGORY: Ch. 4
+   :END:
+"Internal links". There, targets
+in comments can be removed. Also most back-ends will turn links to
+targets into proper cross-reference number (see `org-export-get-ordinal'
+docstring for cases handled).
+
+*** TODO Remove targets in comments
+
+** Chapter 11, Markup for Rich Export
+   :PROPERTIES:
+   :CATEGORY: Ch. 11
+   :END:
+*** Include Keyword
+The "#+INCLUDE:" keyword syntax and effect is slightly different. You
+may want to look at `org-export-expand-include-keyword'.
+
+**** TODO Revise Include keyword
+** Chapter 12, Exporting
+   :PROPERTIES:
+   :CATEGORY: Ch. 12
+   :END:
+*** Export Options
+In "12. Exporting", "Export options" section need an overhaul. See
+`org-export-options-alist' for the default list of export options. Other
+options are back-end specific and should be introduced in their own
+section. Also "#+KEYWORD:" renaming into ":EXPORT_KEYWORD:" property is
+systematic.
+
+**** TODO Overhaul Export options section
+
+**** TODO KEYWORD now EXPORT_KEYWORD
+
+*** Macros
+There should also be a section about macros (and move it out of "11
+Markup for rich export"), general, hard-coded ({{{time(...)}}},
+{{{property(...)}}}, {{{input-file}}} and {{{modification-time(...)}}})
+and specific ({{{date}}}, {{{author}}}, {{{title}}} and {{{email}}}). It
+should be specified that macros are recursive and only apply to one
+line. Therefore, they are appropriate for small replacements. For more
+complex ones, one may use Babel instead.
+
+**** TODO Write macros section
+Subsections: General, Hard-coded, Specific
+
+*** Filters
+There should also be a section about filters used to customize export
+output and another one about `org-export-define-derived-backend' which
+allow someone to tweak a back-end.
+
+**** TODO Write filters section
+
+*** Define derived back-end
+and another one about `org-export-define-derived-backend' which
+allow someone to tweak a back-end.
+
+**** TODO Write derived back-end section
+
+*** Export Snippets
+A section can be added about export snippets, i.e.
+
+  @@ob-latex:\something{...}@@
+
+They are a generalization for @<html> tags.
+
+**** TODO Write export snippets section
+*** Captions
+There may be a section about captions and their syntax. A note should
+specify that export back-ends may or may not respect a caption. On the
+other hand "11.2 Images and Tables" focuses on captions. Since these are
+not specific to Images and Tables, it may be removed.
+
+**** TODO Write captions section
+*** Back-ends
+I would also regroup every back-end into a sub-section to not clutter
+main section.
+
+Other options are back-end specific and should be introduced in their
+own section.
+
+Also most back-ends will turn links to
+targets into proper cross-reference number (see `org-export-get-ordinal'
+docstring for cases handled).
+
+
+**** Old back-ends
+
+"DocBook export" (though texinfo back-end can export to DocBook) and
+"XOXO export" sections can be removed as the back-ends are discontinued.
+There is no equivalent to "Taskjuggler export" yet, so it can be removed
+too.
+
+***** TODO Remove DocBook backend
+
+***** TODO Remove XOXO backend
+
+***** TODO Remove Taskjuggler backend
+
+**** Back-end template
+These are only suggestion. There is also probably many more things to
+do. But I think that the hardest part is to start writing it. If you
+come up with a good organization for e-latex back-end documentation, we
+can use it for other back-ends thereafter.
+
+***** TODO Write back-end template
+
+****** TODO Does back-end turn links to targets?
+
+**** LaTeX Back-end
+About the latex back-end, you know certainly a lot. It should be
+specified that it introduces 3 new keywords, namely "LATEX_CLASS",
+"LATEX_CLASS_OPTIONS" and "LATEX_HEADER". It also introduces
+"BEGIN_LATEX" and "BEGIN_TEX" blocks (the latter being just a synonym
+for the former). It would be worth to add that it handles footnotes in
+item tags and footnotes within footnotes. It also handles booktabs,
+paralist types, automatic babel language selection with #+LANGUAGE: in
+addition to already present features (minted/listings package handling).
+
+***** TODO Write LaTeX back-end
+**** Beamer Back-end
+The BEAMER export back-end deserves, IMO, its own section.
+
+***** TODO Write Beamer back-end
+**** TexInfo Back-end
+> BTW, it would be great to have a texinfo exporter so the Org
+> documentation could be written in Org-mode :)
+
+There is one, albeit barely tested: (require 'org-e-texinfo).
+
+though texinfo back-end can export to DocBook
+
+***** TODO Write texinfo backend
+*** Export dispatcher
+I think that the export dispatcher doesn't deserve its own section. The
+introduction to Export subsystem can talk about "M-x
+org-export-dispatch" (bound to C-c C-e) instead.
+**** TODO Remove export dispatcher section
+
+*** Smart quotes
+There should be a section about smart-quotes too.
+
+**** TODO Add smart quotes section
+
+* Org-mode setup 						   :noexport:
+** Editing setup
+#+name: setup-editing
+#+header: :results silent
+#+header: :noweb yes
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(require 'ox-texinfo)
+(define-key org-mode-map (kbd "C-c e") 'org-export-dispatch)
+(setq org-src-preserve-indentation t)
+(setq org-export-in-background t)
+(setq org-export-async-debug t)
+(setq org-export-async-init-file (expand-file-name "init.el"))
+(setq org-pretty-entities nil)
+(setq org-footnote-auto-adjust nil)
+(setq org-confirm-babel-evaluate nil)
+(org-babel-do-load-languages
+ 'org-babel-load-languages
+ '((emacs-lisp . t)
+   (sh . t)))
+(org-add-link-type
+   "pxref" nil
+   (lambda (path desc format)
+     (cond
+      ((eq format 'html)
+       (format "<span class=\"pxref\">%s</span>" path))
+      ((eq format 'latex)
+       (format "\\ref{%s}" path))
+      ((eq format 'texinfo)
+       (format "@pxref{%s,%s}" path desc)))))
+(add-to-list 'org-export-snippet-translation-alist
+             '("info" . "texinfo"))
+#+end_src
+
+** init.el file
+This source code block requires paths to your Org mode installation.
+Modify accordingly.
+
+#+name: emacs-init
+#+header: :tangle init.el
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(setq load-path (cons "~/.emacs.d/src/org-mode/lisp" load-path))
+; (setq load-path (cons "~/.emacs.d/src/org-mode/contrib/lisp" load-path))
+(require 'ox-texinfo)
+(setq org-src-preserve-indentation t)
+(setq org-confirm-babel-evaluate nil)
+(setq org-footnote-auto-adjust nil)
+(org-babel-do-load-languages
+ 'org-babel-load-languages
+ '((emacs-lisp . t)
+   (makefile . t)
+   (sh . t)))
+(add-to-list 'org-export-snippet-translation-alist
+             '("info" . "texinfo"))
+#+end_src
+
+** Texi -> Org helpers                                             :noexport:
+This section contains source code blocks that help translate from
+=texinfo= to =Org=.
+
+#+name: tsd-helpers
+#+header: :noweb yes
+#+header: :eval no-export
+#+begin_src emacs-lisp
+<<tsd-index-to-macro>>
+<<tsd-samp-to-macro>>
+<<tsd-kbdkey-to-macro>>
+<<tsd-kbd-to-macro>>
+<<tsd-key-to-macro>>
+<<tsd-command-to-macro>>
+<<tsd-file-to-macro>>
+<<tsd-noindent>>
+<<tsd-example-block-begin>>
+<<tsd-example-block-end>>
+<<tsd-table-begin>>
+<<tsd-table-end>>
+<<tsd-pxref>>
+<<tsd-xref>>
+<<tsd-ref>>
+<<tsd-orgcmd>>
+<<tsd-orgkey>>
+<<tsd-code-to-markup>>
+<<tsd-emph-to-markup>>
+<<tsd-i-to-markup>>
+<<tsd-lisp-begin>>
+<<tsd-lisp-end>>
+#+end_src
+
+#+results: tsd-helpers
+: tsd-lisp-end
+
+#+name: tsd-index-to-macro
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(defun tsd-index-to-macro ()
+  "Make macros out of @[cpfvk]index commands.  Doesn't handle commas."
+  (interactive)
+  (query-replace-regexp "@\\([cpfvk]\\)index\\ \\(.*\\)$" "{{{\\1index(\\2)}}}" nil))
+#+end_src
+
+#+name: tsd-samp-to-macro
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(defun tsd-samp-to-macro ()
+  "Make macros out of @samp commands."
+  (interactive)
+  (query-replace-regexp "@samp{\\([^}]*\\)}" "{{{samp(\\1)}}}" nil))
+#+end_src
+
+#+name: tsd-kbdkey-to-macro
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(defun tsd-kbdkey-to-macro ()
+  "Make macros out of @kbd,@key commands."
+  (interactive)
+  (query-replace-regexp "@kbd{\\([^@]*\\)@key{\\([^}]*\\)}}" "{{{kbdkey(\\1,\\2)}}}" nil))
+#+end_src
+
+#+name: tsd-kbd-to-macro
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(defun tsd-kbd-to-macro ()
+  "Make macros out of @kbd commands."
+  (interactive)
+  (query-replace-regexp "@kbd{\\([^}]*\\)}" "{{{kbd(\\1)}}}" nil))
+#+end_src
+
+#+name: tsd-key-to-macro
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(defun tsd-key-to-macro ()
+  "Make macros out of @key commands."
+  (interactive)
+  (query-replace-regexp "@key{\\([^}]*\\)}" "{{{key(\\1)}}}" nil))
+#+end_src
+
+#+name: tsd-command-to-macro
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(defun tsd-command-to-macro ()
+  "Make macros out of @command commands."
+  (interactive)
+  (query-replace-regexp "@command{\\([^}]*\\)}" "{{{command(\\1)}}}" nil))
+#+end_src
+
+#+name: tsd-file-to-macro
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(defun tsd-file-to-macro ()
+  "Make macros out of @file commands."
+  (interactive)
+  (query-replace-regexp "@file{\\([^}]*\\)}" "{{{file(\\1)}}}" nil))
+#+end_src
+
+#+name: tsd-noindent
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(defun tsd-noindent ()
+  "Make macros out of @noindent commands."
+  (interactive)
+  (query-replace "@noindent" "{{{noindent}}}" t))
+#+end_src
+
+#+name: tsd-example-block-begin
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(defun tsd-example-block-begin ()
+  "Convert example blocks."
+  (interactive)
+  (query-replace "@example" "#+begin_example" t))
+#+end_src
+
+#+name: tsd-example-block-end
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(defun tsd-example-block-end ()
+  "Convert example blocks."
+  (interactive)
+  (query-replace "@end example" "#+end_example" nil))
+#+end_src
+
+#+name: tsd-table-begin
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(defun tsd-table-begin ()
+  "Convert table blocks."
+  (interactive)
+  (query-replace-regexp "@table\\ \\([@a-z]*\\)" "#+attr_texinfo: :table-type \"table\" :indic \"\\1\"" t))
+#+end_src
+
+#+name: tsd-table-end
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(defun tsd-table-end ()
+  "Convert table blocks."
+  (interactive)
+  (query-replace "@end table" "" nil))
+#+end_src
+
+#+name: tsd-pxref
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(defun tsd-pxref ()
+  "Convert @pxref to links."
+  (interactive)
+  (query-replace-regexp "@pxref{\\([^}]*\\)}" "see \[\[\\1\]\]" nil))
+#+end_src
+
+#+name: tsd-xref
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(defun tsd-xref ()
+  "Convert @xref to links."
+  (interactive)
+  (query-replace-regexp "@xref{\\([^}]*\\)}" "See \[\[\\1\]\]" nil))
+#+end_src
+
+#+name: tsd-ref
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(defun tsd-ref ()
+  "Convert @ref to links."
+  (interactive)
+  (query-replace-regexp "@ref{\\([^}]*\\)}" "\[\[\\1\]\]" nil))
+#+end_src
+
+#+name: tsd-orgcmd
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(defun tsd-orgcmd ()
+  "Convert @orgcmd to list entry."
+  (interactive)
+  (query-replace-regexp "@orgcmd{\\([^,]*\\),\\([^}]*\\)}" "- {{{kbd(\\1)}}}, ~\\2~ ::" nil))
+#+end_src
+
+#+name: tsd-orgkey
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(defun tsd-orgkey ()
+  "Convert @orgkey to list entry."
+  (interactive)
+  (query-replace-regexp "@orgkey{\\([^}]*\\)}" "- {{{kbd(\\1)}}} ::" nil))
+#+end_src
+
+#+name: tsd-code-to-markup
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(defun tsd-code-to-markup ()
+  "Convert @code to markup."
+  (interactive)
+  (query-replace-regexp "@code{\\([^}]*\\)}" "~\\1~" nil))
+#+end_src
+
+#+name: tsd-emph-to-markup
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(defun tsd-emph-to-markup ()
+  "Convert @emph to markup."
+  (interactive)
+  (query-replace-regexp "@emph{\\([^}]*\\)}" "/\\1/" nil))
+#+end_src
+
+#+name: tsd-i-to-markup
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(defun tsd-i-to-markup ()
+  "Convert @i to markup."
+  (interactive)
+  (query-replace-regexp "@i{\\([^}]*\\)}" "/\\1/" nil))
+#+end_src
+
+#+name: tsd-b-to-markup
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(defun tsd-b-to-markup ()
+  "Convert @b to markup."
+  (interactive)
+  (query-replace-regexp "@b{\\([^}]*\\)}" "*\\1*" nil))
+#+end_src
+
+#+name: tsd-lisp-begin
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(defun tsd-lisp-begin ()
+  "Convert @lisp blocks."
+  (interactive)
+  (query-replace "@lisp" "#+begin_src emacs-lisp" t))
+#+end_src
+
+#+name: tsd-lisp-end
+#+header: :results silent
+#+header: :eval no-export
+#+begin_src emacs-lisp
+(defun tsd-lisp-end ()
+  "Convert @lisp blocks."
+  (interactive)
+  (query-replace "@end lisp" "#+end_src" nil))
+#+end_src
+
+* Footnotes
+
+[fn:1] The iCalendar file will contain TODO and agenda items only.
+
+[fn:2] If your Emacs distribution does not come with Org,
+the function ~org-version~ will not be defined.
+
+[fn:3] The ~master~ branch is where development takes place.
+
+[fn:4] The output from install-info (if any) is system dependent. In
+particular, Debian and its derivatives use two different versions of
+install-info. You may safely ignore the message:
+#+begin_example
+   This is not dpkg install-info anymore, but GNU install-info
+   See the man page for ginstall-info for command line arguments
+#+end_example
+returned by install-info.
+
+[fn:5] If you don't use font-lock globally, turn it on in an Org
+buffer with ~(add-hook 'org-mode-hook 'turn-on-font-lock)~.
+
+[fn:6] Please consider subscribing to the mailing list in order to
+minimize the work the mailing list moderators have to do.
+
+[fn:7] Easy templates insert lowercase keywords and Babel dynamically
+inserts ~#+results~.
+
+[fn:8] See the variables ~org-special-ctrl-a/e~, ~org-special-ctrl-k~,
+and ~org-ctrl-k-protect-subtree~ to configure special behavior of
+{{{kbd(C-a)}}}, {{{kbd(C-e)}}}, and {{{kbd(C-k)}}} in headlines. Note
+also that clocking only works with headings indented less than 30
+stars.
+
+[fn:9] See the option ~org-cycle-global-at-bob~.
+
+[fn:10] The indirect buffer will contain the entire buffer, but will
+be narrowed to the current tree. Editing the indirect buffer will also
+change the original buffer, but without affecting visibility in that
+buffer. For more information about indirect buffers,
+[[info:emacs:Indirect Buffers][GNU Emacs Manual]].
+
+[fn:11] If you do not want the line to be split, customize the
+variable ~org-M-RET-may-split-line~.
+
+[fn:12] See also the variables ~org-show-hierarchy-above~,
+~org-show-following-heading~, ~org-show-siblings~, and
+~org-show-entry-below~ for detailed control on how much context is
+shown around each match.
+
+[fn:13] This depends on the option ~org-remove-highlights-with-change~.
+
+[fn:14] This does not work under XEmacs, because XEmacs uses selective
+display for outlining, not text properties.
+
+[fn:15] When using ~*~ as a bullet, lines must be indented or they will
+be seen as top-level headlines.  Also, when you are hiding leading
+stars to get a clean outline view, plain list items starting with a
+star may be hard to distinguish from true headlines.  In short: even
+though ~*~ is supported, it may be better to not use it for plain list
+items.
+
+[fn:16] You can filter out any of them by configuring
+~org-plain-list-ordered-item-terminator~.
+
+[fn:17] If there's a checkbox in the item, the cookie must be put
+_before_ the checkbox.  If you have activated alphabetical lists, you
+can also use counters like ~[@b]~.
+
+[fn:18] Org only changes the filling settings for Emacs. For XEmacs,
+you should use Kyle E. Jones' {{{file(filladapt.el)}}}.
+
+[fn:19] If you do not want the item to be split, customize the
+variable ~org-M-RET-may-split-line~.
+
+[fn:20] If you want to cycle around items that way, you may customize
+~org-list-use-circular-motion~.
+
+[fn:21] See ~org-list-use-circular-motion~ for a cyclic behavior.
+
+[fn:24] Centering does not work inside Emacs, but it does have an
+effect when exporting to HTML.
+
+[fn:26] For backward compatibility you can also use special names like
+~$LR5~ and ~$LR12~ to refer in a stable way to the fifth and twelfth
+field in the last row of the table. However, this syntax is
+deprecated, it should not be used for new documents. Use ~@>$~
+instead.
+
+[fn:25] Org will understand references typed by the user as
+{{{samp(B4)}}}, but it will not use this syntax when offering a
+formula for editing. You can customize this behavior using the
+variable ~org-table-use-standard-references~.
+
+[fn:22] To insert a vertical bar into a table field, use ~\vert~ or,
+inside a word ~abc\vert{}def~.
+
+[fn:23] This feature does not work on XEmacs.
+
+[fn:27] The computation time scales as O(N^2) because table FOO is
+parsed for each field to be copied.
+
+[fn:28] The {{{file(calc)}}} package has the non-standard
+convention that ~/~ has lower precedence than ~*~, so that ~a/b*c~ is
+interpreted as ~a/(b*c)~.
+
+[fn:29] The ~printf~ reformatting is limited in precision because the
+value passed to it is converted into an ~integer~ or ~double~. The
+~integer~ is limited in size by truncating the signed value to 32
+bits. The ~double~ is limited in precision to 64 bits overall which
+leaves approximately 16 significant decimal digits.
+
+[fn:30] Such names must start with an alphabetic character and use
+only alphanumeric/underscore characters.
+
+[fn:31] Note that text before the first headline is usually not
+exported, so the first such target should be after the first headline,
+or in the line directly before the first headline.
+
+[fn:32] To insert a link targeting a headline, in-buffer completion
+can be used. Just type a star followed by a few optional letters into
+the buffer and press {{{kbdkey(M-,TAB)}}}. All headlines in the
+current buffer will be offered as completions.
+
+[fn:33] The actual behavior of the search will depend on the value of
+the variable ~org-link-search-must-match-exact-headline~. If its value
+is ~nil~, then a fuzzy text search will be done. If it is ~t~, then
+only the exact headline will be matched. If the value is
+{{{samp('query-to-create)}}}, then an exact headline will be searched;
+if it is not found, then the user will be queried to create it.
+
+[fn:34] If the headline contains a timestamp, it will be removed from
+the link and result in a wrong link -- you should avoid putting a
+timestamp in the headline.
+
+[fn:35] Note that you don't have to use this command to insert a link.
+Links in Org are plain text, and you can type or paste them straight
+into the buffer. By using this command, the links are automatically
+enclosed in double brackets, and you will be asked for the optional
+descriptive text.
+
+[fn:36] After insertion of a stored link, the link will be removed
+from the list of stored links. To keep it in the list later use, use a
+triple {{{kbd(C-u)}}} prefix argument to {{{kbd(C-c C-l)}}}, or
+configure the option ~org-keep-stored-link-after-insertion~.
+
+[fn:37] This works by calling a special function
+~org-PREFIX-complete-link~.
+
+[fn:38] See the variable ~org-display-internal-link-with-indirect-buffer~.
+
+[fn:44] Check also the variable ~org-fast-tag-selection-include-todo~,
+it allows you to change the TODO state through the tags interface
+([[Setting tags]]), in case you like to mingle the two concepts. Note that
+this means you need to come up with unique keys across both sets of
+keywords.
+
+[fn:39] For backward compatibility, line numbers can also follow a
+single colon.
+
+[fn:40] Of course, you can make a document that contains only long
+lists of TODO items, but this is not required.
+
+[fn:41] Changing the variable ~org-todo-keywords~ only becomes
+effective after restarting Org mode in a buffer.
+
+[fn:42] This is also true for the {{{kbd(t)}}} command in the timeline
+and agenda buffers.
+
+[fn:43] All characters are allowed except ~@^!~, which have a special
+meaning here.
+
+[fn:45] Org mode parses these lines only when Org mode is activated
+after visiting a file. {{{kbd(C-c C-c)}}} with the cursor in a line
+starting with {{{samp(#+)}}} is simply restarting Org mode for the
+current buffer.
+
+[fn:46] The corresponding in-buffer setting is: ~#+STARTUP: logdone~.
+
+[fn:47] The corresponding in-buffer setting is: ~#+STARTUP: lognotedone~.
+
+[fn:48] See the variable ~org-log-states-order-reversed~.
+
+[fn:54] {{{kbd(C-u C-c C-c)}}} on the /first/ item of a list with no
+checkbox will add checkboxes to the rest of the list.
+
+[fn:49] It is possible that Org mode will record two timestamps when
+you are using both ~org-log-done~ and state change logging. However,
+it will never prompt for two notes---if you have configured both, the
+state change recording note will take precedence and cancel the
+{{{samp(Closing Note)}}}.
+
+[fn:50] See also the option ~org-priority-start-cycle-with-default~.
+
+[fn:51] To keep subtasks out of the global TODO list, see the
+~org-agenda-todo-list-sublevels~.
+
+[fn:52] With the exception of description lists. But you can allow it
+by modifying ~org-list-automatic-rules~ accordingly.
+
+[fn:53] Set the variable ~org-hierarchical-checkbox-statistics~ if you
+want such cookies to count all checkboxes below the cookie, not just
+those belonging to direct children.
+
+[fn:55] As with all these in-buffer settings, pressing 
+{{{kbd(C-c C-c)}}} activates any changes in the line.
+
+[fn:56] This is only true if the search does not involve more complex
+tests including properties (see [[Property searches]]).
+
+[fn:57] Keys will automatically be assigned to tags that have no
+configured keys.
+
+[fn:58] Please note that the COLUMNS definition must be on a single
+line---it is wrapped here only because of formatting constraints.
+
+[fn:59] Contributed packages are not part of Emacs, but are
+distributed with the main distribution of Org (visit
+[[http://orgmode.org]]).
+
+[fn:60] The Org date format is inspired by the standard ISO 8601
+date/time format. To use an alternative format, see [[Custom time
+format]]. The day name is optional when you type the date yourself.
+However, any dates inserted or modified by Org will add that day name,
+for reading convenience.
+
+[fn:61] When working with the standard diary sexp functions, you need
+to be very careful with the order of the arguments. That order depends
+evilly on the variable ~calendar-date-style~ (or, for older Emacs
+versions, ~european-calendar-style~). For example, to specify a date
+December 12, 2005, the call might look like ~(diary-date 12 1 2005)~
+or ~(diary-date 1 12 2005)~ or ~(diary-date 2005 12 1)~, depending on
+the settings. This has been the source of much confusion. Org mode
+users can resort to special versions of these functions like
+~org-date~ or ~org-anniversary~. These work just like the
+corresponding ~diary-~ functions, but with stable ISO order of
+arguments (year, month, day) wherever applicable, independent of the
+value of ~calendar-date-style~.
+
+[fn:62] See the variable ~org-read-date-prefer-future~. You may
+set that variable to the symbol ~time~ to even make a time before now
+shift the date to tomorrow.
+
+[fn:63] If you don't need/want the calendar, configure the variable
+~org-popup-calendar-for-date-prompt~.
+
+[fn:64] If you find this distracting, turn off the display with
+~org-read-date-display-live~.
+
+[fn:65] It will still be listed on that date after it has been marked
+DONE. If you don't like this, set the variable
+~org-agenda-skip-scheduled-if-done~.
+
+[fn:66] The {{{samp(SCHEDULED)}}} and {{{samp(DEADLINE)}}} dates are
+inserted on the line right below the headline. Don't put any text
+between this line and the headline.
+
+[fn:67] Note the corresponding ~#+STARTUP~ keywords ~logredeadline~,
+~lognoteredeadline~, and ~nologredeadline~.
+
+[fn:68] Note the corresponding ~#+STARTUP~ keywords ~logreschedule~,
+~lognotereschedule~, and ~nologreschedule~.
+
+[fn:69] In fact, the target state is taken from, in this sequence, the
+~REPEAT_TO_STATE~ property or the variable ~org-todo-repeat-to-state~.
+If neither of these is specified, the target state defaults to the
+first state of the TODO state sequence.
+
+[fn:70] You can change this using the option ~org-log-repeat~, or the
+~#+STARTUP~ options ~logrepeat~, ~lognoterepeat~, and ~nologrepeat~.
+With ~lognoterepeat~, you will also be prompted for a note.
+
+[fn:71] Clocking only works if all headings are indented with less
+than 30 stars. This is a hardcoded limitation of ~lmax~ in
+~org-clock-sum~.
+
+[fn:72] To resume the clock under the assumption that you have worked
+on this task while outside Emacs, use ~(setq org-clock-persist t)~.
+
+[fn:73] To add an effort estimate ``on the fly'', hook a function
+doing this to ~org-clock-in-prepare-hook~.
+
+[fn:74] The last reset of the task is recorded by the ~LAST_REPEAT~
+property.
+
+[fn:75] See also the variable ~org-clock-modeline-total~.
+
+[fn:76] The corresponding in-buffer setting is: 
+~#+STARTUP: lognoteclock-out~.
+
+[fn:77] Language terms can be set through the variable
+~org-clock-clocktable-language-setup~.
+
+[fn:78] Note that all parameters must be specified in a single
+line---the line is broken here only to fit it into the manual.
+
+[fn:79] On computers using Mac OS X, idleness is based on actual user
+idleness, not just Emacs' idle time. For X11, you can install a
+utility program {{{file(x11idle.c)}}}, available in the
+~contrib/scripts~ directory of the Org git distribution, to get the
+same general treatment of idleness. On other systems, idle time refers
+to Emacs idle time only.
+
+[fn:80] You may change the property being used with the variable
+~org-effort-property~.
+
+[fn:86] Note the corresponding ~#+STARTUP~ keywords ~logrefile~,
+~lognoterefile~, and ~nologrefile~.
+
+[fn:81] Please select your own key, {{{kbd(C-c c)}}} is only a
+suggestion.
+
+[fn:82] If you need one of these sequences literally, escape the
+{{{kbd(%)}}} with a backslash.
+
+[fn:83] If you define your own link types (see [[Adding hyperlink
+types]]), any property you store with ~org-store-link-props~ can be
+accessed in capture templates in a similar way.
+
+[fn:84] This will always be the other, not the user.  See the variable
+~org-from-is-user-regexp~.
+
+[fn:85] If you move entries or Org files from one directory to
+another, you may want to configure ~org-attach-directory~ to contain
+an absolute path.
+
+[fn:87] For backward compatibility, the following also works: If there
+are several such lines in a file, each specifies the archive location
+for the text below it. The first such line also applies to any text
+before its definition. However, using this method is /strongly/
+deprecated as it is incompatible with the outline structure of the
+document. The correct method for setting multiple archive locations in
+a buffer is using properties.
+
+[fn:94] Only tags filtering will be respected here, effort filtering
+is ignored.
+
+[fn:88] When using the dispatcher, pressing {{{kbd(<)}}} before
+selecting a command will actually limit the command to the current
+file, and ignore ~org-agenda-files~ until the next dispatcher command.
+
+[fn:89] For backward compatibility, you can also press {{{kbd(1)}}} to
+restrict to the current buffer.
+
+[fn:90] For backward compatibility, you can also press {{{kbd(0)}}} to
+restrict to the current region/subtree.
+
+[fn:91] For backward compatibility, the universal prefix
+{{{kbd(C-u)}}} causes all TODO entries to be listed before the agenda.
+This feature is deprecated, use the dedicated TODO list, or a block
+agenda instead (see [[Block agenda]]).
+
+[fn:92] But see [[x-agenda-skip-entry-regexp][skipping entries based on regexp]].
+
+[fn:93] For backward compatibility, the following also works: if
+there are several such lines in a file, each specifies the category
+for the text below it. The first category also applies to any text
+before the first CATEGORY line. However, using this method is
+/strongly/ deprecated as it is incompatible with the outline structure
+of the document. The correct method for setting multiple categories in
+a buffer is using a property.
+
+[fn:95] Custom commands can preset a filter by binding the variable
+~org-agenda-tag-filter-preset~ as an option. This filter will then be
+applied to the view and persist as a basic filter through refreshes
+and more secondary filtering. The filter is a global property of the
+entire agenda view---in a block agenda, you should only set this in
+the global options section, not in the section of an individual block.
+
+[fn:96] You can also create persistent custom functions through
+~org-agenda-bulk-custom-functions~.
+
+[fn:97] The Emacs diary file is parsed for the agenda when
+~org-agenda-include-diary~ is set.
+
+[fn:98] You can provide a description for a prefix key by inserting a
+cons cell with the prefix and the description.
+
+[fn:99] For HTML you need to install Hrvoje Niksic's
+{{{file(htmlize.el)}}}. To create PDF output, the ghostscript
+{{{file(ps2pdf)}}} utility must be installed on the system. Selecting
+a PDF file will also create the postscript file.
+
+[fn:100] If you want to store standard views like the weekly agenda or
+the global TODO list as well, you need to define custom commands for
+them in order to be able to specify file names.
+
+[fn:101] Quoting depends on the system you use, please check the FAQ
+for examples.
+
+[fn:102] This works automatically for the HTML backend (it requires
+version 1.34 of the {{{file(htmlize.el)}}} package, which is
+distributed with Org). Fontified code chunks in LaTeX can be
+achieved using either the listings package or the [[http://code.google.com/p/minted][minted]] package.
+Refer to ~org-export-latex-listings~ documentation for details.
+
+[fn:103] Code in {{{samp(src)}}} blocks may also be evaluated either
+interactively or on export. See see [[Working with source code]] for more
+information on evaluating code blocks.
+
+[fn:104] Adding ~-k~ to ~-n -r~ will /keep/ the labels in the source
+code while using line numbers for the links, which might be useful to
+explain those in an Org mode example code.
+
+[fn:105] Upon exit, lines starting with {{{samp(*)}}}, {{{samp(\,*)}}},
+{{{samp(#+)}}} and {{{samp(\,#+)}}} will get a comma prepended, to keep
+them from being interpreted by Org as outline nodes or special syntax.
+These commas will be stripped for editing with {{{kbd(C-c ')}}}, and
+also for export.
+
+[fn:106] You may select a different-mode with the variable
+~org-edit-fixed-width-region-mode~.
+
+[fn:107] LaTeX is a macro system based on Donald E. Knuth's TeX
+system. Many of the features described here as LaTeX are really
+from TeX, but for simplicity I am blurring this distinction.
+
+[fn:108] You can turn this on by default by setting the variable
+~org-pretty-entities~, or on a per-file base with the ~#+STARTUP~
+option ~entitiespretty~.
+
+[fn:109] If you plan to use this regularly or on pages with
+significant page views, you should install {{{file(MathJax)}}} on your
+own server in order to limit the load of our server.
+
+[fn:110] For this to work you need to be on a system with a working
+LaTeX installation. You also need the {{{file(dvipng)}}} program or
+the {{{file(convert)}}}, respectively available at
+[[http://sourceforge.net/projects/dvipng/]] and from the
+{{{file(ImageMagick)}}} suite. The LaTeX header that will be used
+when processing a fragment can be configured with the variable
+~org-format-latex-header~.
+
+[fn:111] When {{{file(MathJax)}}} is used, only the environment
+recognized by {{{file(MathJax)}}} will be processed. When
+{{{file(dvipng)}}} is used to create images, any LaTeX environments
+will be handled.
+
+[fn:112] Org mode has a method to test if the cursor is inside such a
+fragment, see the documentation of the function
+~org-inside-LaTeX-fragment-p~.
+
+[fn:113] The variable ~org-export-date-timestamp-format~ defines how
+this timestamp will be exported.
+
+[fn:114] If you want to configure many options this way, you can use
+several ~#+OPTIONS~ lines.
+
+[fn:115] To make this behavior the default, customize the variable
+~org-export-run-in-background~.
+
+[fn:116] This requires ~transient-mark-mode~ be turned on.
+
+[fn:117] To select the current subtree, use {{{kbd(C-c @)}}}.
+
+[fn:118] This requires ~transient-mark-mode~ be turned on.
+
+[fn:119] To select the current subtree, use {{{kbd(C-c @)}}}.
+
+[fn:120] But see the variable ~org-export-html-inline-images~.
+
+[fn:121] If you plan to use this regularly or on pages with
+significant page views, you should install MathJax on your own server
+in order to limit the load of our server. Installation instructions
+can be found on the MathJax website, see
+[[http://www.mathjax.org/resources/docs/?installation.html]].
+
+[fn:122] If the classes on TODO keywords and tags lead to conflicts,
+use the variables ~org-export-html-todo-kwd-class-prefix~ and
+~org-export-html-tag-class-prefix~ to make them unique.
+
+[fn:123] This style is defined in the constant
+~org-export-html-style-default~, which you should not modify. To turn
+inclusion of these defaults off, customize
+~org-export-html-style-include-default~.
+
+[fn:124] The default LaTeX output is designed for processing with
+~pdftex~ or LaTeX. It includes packages that are not compatible
+with ~xetex~ and possibly ~luatex~. See the variables
+~org-export-latex-default-packages-alist~ and
+~org-export-latex-packages-alist~.
+
+[fn:125] This requires ~transient-mark-mode~ be turned on.
+
+[fn:126] To select the current subtree, use {{{kbd(C-c @)}}}.
+
+[fn:127] Into which the values of
+~org-export-latex-default-packages-alist~ and
+~org-export-latex-packages-alist~ are spliced.
+
+[fn:128] One can also take advantage of this option to pass other,
+unrelated options into the figure or table environment. For an example
+see the section ``Exporting org files'' in
+[[http://orgmode.org/worg/org-hacks.html]].
+
+[fn:129] This requires ~transient-mark-mode~ to be turned on.
+
+[fn:130] To select the current subtree, use {{{kbd(C-c @)}}}.
+
+[fn:131] ODT export was added in Org mode version 7.8.
+
+[fn:132] See [[http://docs.oasis-open.org/office/v1.2/OpenDocument-v1.2.html][Open Document Format for Office Applications (OpenDocument)
+Version 1.2]].
+
+[fn:133] This requires ~transient-mark-mode~ to be turned on.
+
+[fn:134] To select the current subtree, use {{{kbd(C-c @)}}}.
+
+[fn:135] The column widths are interpreted as weighted ratios with the
+default weight being 1.
+
+[fn:136] Use of {{{file(ImageMagick)}}} is only desirable. However, if
+you routinely produce documents that have large images or you export
+your Org files that has images using a Emacs batch script, then the
+use of {{{file(ImageMagick)}}} is mandatory.
+
+[fn:137] See [[http://www.mathtoweb.com/cgi-bin/mathtoweb_home.pl][MathToWeb]].
+
+[fn:138] Your {{{file(htmlfontify.el)}}} library must at least be at
+Emacs 24.1 levels for fontification to be turned on.
+
+[fn:139] See [[http://docs.oasis-open.org/office/v1.2/OpenDocument-v1.2.html][OpenDocument-v1.2 Specification]].
+
+[fn:140] See the ~<table:table-template>~ element of the
+OpenDocument-v1.2 specification.
+
+[fn:141] See the attributes ~table:template-name~,
+~table:use-first-row-styles~, ~table:use-last-row-styles~,
+~table:use-first-column-styles~, ~table:use-last-column-styles~,
+~table:use-banding-rows-styles~, and ~table:use-banding-column-styles~
+of the ~<table:table>~ element in the OpenDocument-v1.2 specification.
+
+[fn:142] Note that {{{file(.odt)}}} files are {{{samp(zip)}}}
+archives.
+
+[fn:143] See the variables ~org-icalendar-use-deadline~ and
+~org-icalendar-use-scheduled~.
+
+[fn:144] To add inherited tags or the TODO state, configure the
+variable ~org-icalendar-categories~.
+
+[fn:145] The LOCATION property can be inherited from higher in the
+hierarchy if you configure ~org-use-property-inheritance~ accordingly.
+
+[fn:146] The files {{{file(file-source.org)}}} and
+{{{file(file-source.org.html)}}} if source and publishing directories
+are equal. Note that with this kind of setup, you need to add
+~:exclude "-source\\.org"~ to the project definition in
+~org-publish-project-alist~ to prevent the published source files from
+being considered as new org files the next time the project is
+published.
+
+[fn:147] Note that {{{samp(src)}}} blocks may be inserted using Org
+mode's [[Easy templates]] system.
+
+[fn:148] Whenever code is evaluated there is a potential for that code
+to do harm. Org mode provides safeguards to ensure that code is only
+evaluated after explicit confirmation from the user. For information
+on these safeguards (and on how to disable them) see [[Code evaluation
+security]].
+
+[fn:149] The ~org-babel-no-eval-on-ctrl-c-ctrl-c~ variable can be used
+to remove code evaluation from the {{{kbd(C-c C-c)}}} key binding.
+
+[fn:150] Note that evaluation of header arguments is guaranteed to
+take place in the original Org mode file, while there is no such
+guarantee for evaluation of the code block body.
+
+[fn:151] The example requires that property inheritance be turned on
+for the ~noweb-ref~ property, see [[Property inheritance]].
+
+[fn:152] In certain languages this also contains the error output
+stream; this is an area for future work.
+
+[fn:153] The last evaluation performed by the interpreter is obtained
+in a language-specific manner: the value of the variable ~_~ in Python
+and Ruby, and the value of ~.Last.value~ in R.
+
+[fn:161] If the {{{samp(#+TBLFM)}}} line contains an odd number of
+dollar characters, this may cause problems with font-lock in LaTeX
+mode. As shown in the example you can fix this by adding an extra line
+inside the ~comment~ environment that is used to balance the dollar
+expressions. If you are using AUCTeX with the font-latex library, a
+much better solution is to add the ~comment~ environment to the
+variable ~LaTeX-verbatim-environments~.
+
+[fn:162] The HTML translator uses the same code that produces tables
+during HTML export.
+
+[fn:154] Note that ~org-indent-mode~ also sets the ~wrap-prefix~
+property, such that ~visual-line-mode~ (or purely setting ~word-wrap~)
+wraps long lines (including headlines) correctly indented.
+
+[fn:155] See the variable ~org-indent-indentation-per-level~.
+
+[fn:156] Turning on ~org-indent-mode~ sets ~org-hide-leading-stars~ to
+~t~ and ~org-adapt-indentation~ to ~nil~.
+
+[fn:157] See also the variable ~org-adapt-indentation~.
+
+[fn:158] When you need to specify a level for a property search or
+refile targets, ~LEVEL=2~ will correspond to 3 stars, etc.
+
+[fn:159] The {{{file(org-R.el)}}} package has been replaced by the
+Org mode functionality described in [[Working with source code]] and is
+now obsolete.
+
+[fn:160] By default this works only for LaTeX, HTML, and Texinfo.
+Configure the variable ~orgtbl-radio-tables~ to install templates for
+other modes.
+
+[fn:163] Note that, when using ~org-odd-levels-only~, a level number
+corresponds to order in the hierarchy, not to the number of stars.
+
+[fn:164] If you can safely store the password in your Emacs setup, you
+might also want to configure `org-mobile-encryption-password'.  Please
+read the docstring of that variable.  Note that encryption will apply
+only to the contents of the `.org' files.  The file names themselves
+will remain visible.
+
+[fn:165] If you cannot use Dropbox, or if your version of MobileOrg
+does not support it, you can use a webdav server. For more
+information, check out the documentation of MobileOrg and also this
+[[http://orgmode.org/worg/org-faq.html#mobileorg_webdav][FAQ entry]].
+
+[fn:166] While creating the agendas, Org mode will force ID properties
+on all referenced entries, so that these entries can be uniquely
+identified if /MobileOrg/ flags them for further action. If you do not
+want to get these properties in so many entries, you can set the
+variable ~org-mobile-force-id-on-agenda-items~ to ~nil~. Org mode will
+then rely on outline paths, in the hope that these will be unique
+enough.
+
+[fn:167] Checksums are stored automatically in the file
+{{{file(checksums.dat)}}}.
+
+[fn:168] The file {{{file(mobileorg.org)}}} will be empty after this
+operation.
+
+[fn:169] Note, however, that there is a subtle difference. The view
+created automatically by {{{kbdspckey(M-x org-mobile-pull,RET)}}} is
+guaranteed to search all files that have been addressed by the last
+pull. This might include a file that is not currently in your list of
+agenda files. If you later use {{{kbd(C-c a ?)}}} to regenerate the
+view, only the current agenda files will be searched.
+
+[fn:170] You can also get `a.', `A.', `a)' and `A)' by configuring
+`org-alphabetical-lists'.  To minimize confusion with normal text,
+those are limited to one character only.  Beyond that limit, bullets
+will automatically fallback to numbers.
+
+[fn:171] See also ~org-empty-line-terminates-plain-lists~.
+
+[fn:172] You can define additional drawers on a per-file basis with a
+line like ~#+DRAWERS: HIDDEN STATE~.
+
+[fn:173] The corresponding in-buffer setting is: ~#+STARTUP: fninline~ or
+~#+STARTUP: nofninline~.
+
+[fn:174] The corresponding in-buffer options are ~#+STARTUP: fnadjust~ and
+~#+STARTUP: nofnadjust~.
+
+[fn:175] The file {{{file(constants.el)}}} can supply the values of constants in two
+different unit systems, ~SI~ and ~cgs~.  Which one is used depends on
+the value of the variable ~constants-unit-system~.  You can use the
+~#+STARTUP:~ options ~constSI~ and ~constcgs~ to set this value for the
+current buffer.
+
+[fn:176] The library {{{file(org-id)}}} must first be loaded, either through
+~org-customize~ by enabling ~id~ in ~org-modules~, or by adding
+~(require 'org-id)~ in your {{{file(.emacs)}}}.
+
+[fn:177] The variable ~org-startup-with-inline-images~ can be set
+within a buffer with the ~#+STARTUP:~ keywords ~inlineimages~ and
+~noinlineimages~.
+
+[fn:178] Note that the ~LOGBOOK~ drawer is unfolded when pressing
+{{{key(SPC)}}} in the agenda to show an entry---use
+{{{kbdspckey(C-u,SPC)}}} to keep it folded here.
+
+[fn:179] Please note the pitfalls of summing hierarchical data in a flat
+list ([[Agenda column view]]).
+
+[fn:180] If the value of that variable is not a list, but a single file
+name, then the list of agenda files will be maintained in that external
+file.
+
+[fn:181] The variable {{{code(org-anniversary)}}} used in the example
+is just like {{{code(diary-anniversary)}}}, but the argument order is
+always according to ISO and therefore independent of the value of
+{{{code(calendar-date-style)}}}.
+
+[fn:182] Emacs 23 and Org mode 6.29 are required.
+
+[fn:183] Emacs 23.1 can actually crash with ~org-indent-mode~.
+
+[fn:184] Symbolic links in ~org-directory~ need to have the same name
+as their targets.
+
+