Merge branch 'maint'
authorNicolas Goaziou <n.goaziou@gmail.com>
Wed, 6 Nov 2013 15:12:57 +0000 (16:12 +0100)
committerNicolas Goaziou <n.goaziou@gmail.com>
Wed, 6 Nov 2013 15:12:57 +0000 (16:12 +0100)
50 files changed:
contrib/lisp/org-contacts.el
contrib/lisp/org-favtable.el [deleted file]
contrib/lisp/org-index.el [new file with mode: 0644]
contrib/lisp/org-mac-link.el
contrib/lisp/ox-confluence.el
contrib/lisp/ox-freemind.el
contrib/lisp/ox-groff.el
contrib/lisp/ox-rss.el
doc/org.texi
doc/orgguide.texi
lisp/ob-C.el
lisp/ob-R.el
lisp/ob-abc.el [new file with mode: 0644]
lisp/ob-clojure.el
lisp/ob-comint.el
lisp/ob-core.el
lisp/ob-ebnf.el [new file with mode: 0644]
lisp/ob-emacs-lisp.el
lisp/ob-gnuplot.el
lisp/ob-lisp.el
lisp/ob-ruby.el
lisp/ob-tangle.el
lisp/org-agenda.el
lisp/org-clock.el
lisp/org-element.el
lisp/org-feed.el
lisp/org-footnote.el
lisp/org-list.el
lisp/org-mobile.el
lisp/org-pcomplete.el
lisp/org-src.el
lisp/org-table.el
lisp/org.el
lisp/ox-ascii.el
lisp/ox-html.el
lisp/ox-latex.el
lisp/ox-man.el
lisp/ox-md.el
lisp/ox-odt.el
lisp/ox-publish.el
lisp/ox-texinfo.el
lisp/ox.el
mk/default.mk
mk/targets.mk
testing/README
testing/lisp/test-ob-ruby.el [new file with mode: 0644]
testing/lisp/test-ob.el
testing/lisp/test-org-element.el
testing/lisp/test-org.el
testing/lisp/test-ox.el

index 97171d0..dbbc057 100644 (file)
@@ -946,7 +946,7 @@ to do our best."
                        (setq phones-list (org-contacts-remove-ignored-property-values ignore-list (org-contacts-split-property tel)))
                        (setq result "")
                        (while phones-list
-                         (setq result (concat result  "TEL:" (org-contacts-strip-link (car phones-list)) "\n"))
+                         (setq result (concat result  "TEL:" (org-link-unescape (org-contacts-strip-link (car phones-list))) "\n"))
                          (setq phones-list (cdr phones-list)))
                        result))
            (when bday
diff --git a/contrib/lisp/org-favtable.el b/contrib/lisp/org-favtable.el
deleted file mode 100755 (executable)
index 51f75a5..0000000
+++ /dev/null
@@ -1,1701 +0,0 @@
-;;; org-favtable.el --- Lookup table of favorite references and links\r
-\r
-;; Copyright (C) 2011-2013 Free Software Foundation, Inc.\r
-\r
-;; Author: Marc-Oliver Ihm <org-favtable@ferntreffer.de>\r
-;; Keywords: hypermedia, matching\r
-;; Requires: org\r
-;; Download: http://orgmode.org/worg/code/elisp/org-favtable.el\r
-;; Version: 2.2.0\r
-\r
-;; This file is not part of GNU Emacs.\r
-\r
-;;; License:\r
-\r
-;; This program is free software; you can redistribute it and/or modify\r
-;; it under the terms of the GNU General Public License as published by\r
-;; the Free Software Foundation; either version 3, or (at your option)\r
-;; any later version.\r
-;;\r
-;; This program is distributed in the hope that it will be useful,\r
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-;; GNU General Public License for more details.\r
-;;\r
-;; You should have received a copy of the GNU General Public License\r
-;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.\r
-\r
-;;; Commentary:\r
-\r
-;; Purpose:\r
-;;\r
-;;  Mark and find your favorite things and locations in org easily: Create\r
-;;  and update a lookup table of your references and links. Often used\r
-;;  entries bubble to the top and entering some keywords displays only the\r
-;;  matching entries. That way the right entry one can be picked easily.\r
-;;\r
-;;  References are essentially small numbers (e.g. "R237" or "-455-"),\r
-;;  which are created by this package; they are well suited to be used\r
-;;  outside of org. Links are just normal org-mode links.\r
-;;\r
-;;\r
-;; Setup:\r
-;;\r
-;;  - Add these lines to your .emacs:\r
-;;\r
-;;    (require 'org-favtable)\r
-;;    ;; Good enough to start, but later you should probably\r
-;;    ;; change this id, as will be explained below\r
-;;    (setq org-favtable-id "00e26bef-1929-4110-b8b4-7eb9c9ab1fd4")\r
-;;    ;; Optionally assign a key. Pick your own favorite.\r
-;;    (global-set-key (kbd "C-+") 'org-favtable)\r
-;;\r
-;;  - Just invoke `org-favtable', which will explain how to complete your\r
-;;    setup by creating the necessary table of favorites.\r
-;;\r
-;;\r
-;; Further reading:\r
-;;\r
-;;  Invoke `org-favtable' and pick one of its help options. You may also\r
-;;  read the documentation of `org-favtable-id' for setup instructions, of\r
-;;  `org-favtable' for regular usage and of `org-favtable--commands' for a\r
-;;  list of available commands.\r
-;;\r
-\r
-;;; Change Log:\r
-\r
-;;   [2013-02-28 Th] Version 2.2.0:\r
-;;    - Allowed shortcuts like "h237" for command "head" with argument "237"\r
-;;    - Integrated with org-mark-ring-goto\r
-;;\r
-;;   [2013-01-25 Fr] Version 2.1.0:\r
-;;    - Added full support for links\r
-;;    - New commands "missing" and "statistics"\r
-;;    - Renamed the package from "org-reftable" to "org-favtable"\r
-;;    - Additional columns are required (e.g. "link"). Error messages will\r
-;;      guide you\r
-;;\r
-;;   [2012-12-07 Fr] Version 2.0.0:\r
-;;    - The format of the table of favorites has changed ! You need to bring\r
-;;      your existing table into the new format by hand (which however is\r
-;;      easy and explained below)\r
-;;    - Reference table can be sorted after usage count or date of last access\r
-;;    - Ask user explicitly, which command to invoke\r
-;;    - Renamed the package from "org-refer-by-number" to "org-reftable"\r
-\r
-;;   [2012-09-22 Sa] Version 1.5.0:\r
-;;    - New command "sort" to sort a buffer or region by reference number\r
-;;    - New commands "highlight" and "unhighlight" to mark references\r
-\r
-;;   [2012-07-13 Fr] Version 1.4.0:\r
-;;    - New command "head" to find a headline with a reference number\r
-\r
-;;   [2012-04-28 Sa] Version 1.3.0:\r
-;;    - New commands occur and multi-occur\r
-;;    - All commands can now be invoked explicitly\r
-;;    - New documentation\r
-;;    - Many bugfixes\r
-\r
-;;   [2011-12-10 Sa] Version 1.2.0:\r
-;;    - Fixed a bug, which lead to a loss of newly created reference numbers\r
-;;    - Introduced single and double prefix arguments\r
-;;    - Started this Change Log\r
-\r
-;;; Code:\r
-\r
-(require 'org-table)\r
-(require 'cl)\r
-\r
-(defvar org-favtable--version "2.2.0")\r
-(defvar org-favtable--preferred-command nil)\r
-\r
-(defvar org-favtable--commands '(occur head ref link enter leave goto + help reorder fill sort update highlight unhighlight missing statistics)\r
-  "List of commands known to org-favtable:\r
-\r
-Commands known:\r
-\r
-  occur: If you supply a keyword (text): Apply emacs standard\r
-    occur operation on the table of favorites; ask for a\r
-    string (keyword) to select lines. Occur will only show you\r
-    lines which contain the given keyword, so you can easily find\r
-    the right one. You may supply a list of words seperated by\r
-    comma (\",\"), to select lines that contain any or all of the\r
-    given words.\r
-\r
-    If you supply a reference number: Apply emacs standard\r
-    multi-occur operation all org-mode buffers to search for a\r
-    specific reference.\r
-\r
-    You may also read the note at the end of this help on saving\r
-    the keystroke RET to accept this frequent default command.\r
-\r
-  head: If invoked outside the table of favorites, ask for a\r
-    reference number and search for a heading containing it. If\r
-    invoked within favtable dont ask; rather use the reference or\r
-    link from the current line.\r
-\r
-  ref: Create a new reference, copy any previously selected text.\r
-    If already within reftable, fill in ref-column.\r
-\r
-  link: Create a new line in reftable with a link to the current node.\r
-    Do not populate the ref column; this can later be populated by\r
-    calling the \"fill\" command from within the reftable.\r
-\r
-  leave: Leave the table of favorites. If the last command has\r
-    been \"ref\", the new reference is copied and ready to yank.\r
-    This \"org-mark-ring-goto\" and can be called several times\r
-    in succession.\r
-\r
-  enter: Just enter the node with the table of favorites.\r
-\r
-  goto: Search for a specific reference within the table of\r
-    favorites.\r
-\r
-  help: Show this list of commands.\r
-\r
-  +: Show all commands including the less frequently used ones\r
-    given below. If \"+\" is followd by enough letters of such a\r
-    command (e.g. \"+fi\"), then this command is invoked\r
-    directly.\r
-\r
-  reorder: Temporarily reorder the table of favorites, e.g. by\r
-    count, reference or last access.\r
-\r
-  fill: If either ref or link is missing, fill it.\r
-\r
-  sort: Sort a set of lines (either the active region or the\r
-    whole buffer) by the references found in each line.\r
-\r
-  update: For the given reference, update the line in the\r
-    favtable.\r
-\r
-  highlight: Highlight references in region or buffer.\r
-\r
-  unhighlight: Remove highlights.\r
-\r
-  missing : Search for missing reference numbers (which do not\r
-    appear in the reference table). If requested, add additional\r
-    lines for them, so that the command \"new\" is able to reuse\r
-    them.\r
-\r
-  statistics : Show some statistics (e.g. minimum and maximum\r
-    reference) about favtable.\r
-\r
-\r
-\r
-Two ways to save keystrokes:\r
-\r
-When prompting for a command, org-favtable puts the most likely\r
-one (e.g. \"occur\" or \"ref\") at the front of the list, so that\r
-you may just type RET.\r
-\r
-If this command needs additional input (like e.g. \"occur\"), you\r
-may supply this input right away, although you are still beeing\r
-prompted for the command. So do an occur for the string \"foo\",\r
-you can just enter \"foo\" without even entering \"occur\".\r
-\r
-\r
-Another way to save keystrokes applies if you want to choose a\r
-command, that requrires a reference number (and would normally\r
-prompt for it): In that case you may just enter enough characters\r
-from your command, so that it appears first in the list of\r
-matches; then immediately enter the number of the reference you\r
-are searching for. So the input \"h237\" would execute the\r
-command \"head\" for reference \"237\" right away.\r
-\r
-")\r
-\r
-(defvar org-favtable--commands-some '(occur head ref link leave enter goto + help))\r
-\r
-(defvar org-favtable--columns nil)\r
-\r
-(defvar org-favtable-id nil\r
-  "Id of the Org-mode node, which contains the favorite table.\r
-\r
-Read below, on how to set up things. See the help options\r
-\"usage\" and \"commands\" for normal usage after setup.\r
-\r
-Setup requires two steps:\r
-\r
- - Adjust your .emacs initialization file\r
-\r
- - Create a suitable org-mode node\r
-\r
-\r
-Here are the lines, you need to add to your .emacs:\r
-\r
-  (require 'org-favtable)\r
-  ;; Good enough to start, but later you should probably\r
-  ;; change this id, as will be explained below\r
-  (setq org-favtable-id \"00e26bef-1929-4110-b8b4-7eb9c9ab1fd4\")\r
-  ;; Optionally assign a key. Pick your own favorite.\r
-  (global-set-key (kbd \"C-+\") 'org-favtable)\r
-\r
-Do not forget to restart emacs to make these lines effective.\r
-\r
-\r
-As a second step you need to create the org-mode node, where your\r
-reference numbers and links will be stored. It may look like\r
-this:\r
-\r
-  * org-favtable\r
-    :PROPERTIES:\r
-    :ID:       00e26bef-1929-4110-b8b4-7eb9c9ab1fd4\r
-    :END:\r
-\r
-\r
-    |     |      | Comment, description, details  |         |         |               |\r
-    | ref | link | ;c                             | count;s | created | last-accessed |\r
-    |     | <4>  | <30>                           |         |         |               |\r
-    |-----+------+--------------------------------+---------+---------+---------------|\r
-    | R1  |      | My first reference             |         |         |               |\r
-\r
-\r
-You may just copy this node into one of your org-files.  Many\r
-things however can or should be adjusted:\r
-\r
- - The node needs not be a top level node.\r
-\r
- - Its name is completely at you choice. The node is found\r
-   through its ID.\r
-\r
- - There are three lines of headings above the first hline. The\r
-   first one is ignored by org-favtable, and you can use them to\r
-   give meaningful names to columns; the second line contains\r
-   configuration information for org-favtable; please read\r
-   further below for its format. The third line is optional and\r
-   may contain width-informations (e.g. <30>) only.\r
-\r
- - The sequence of columns does not matter. You may reorder them\r
-   any way you like; e.g. make the comment-column the last\r
-   columns within the table. Columns ar found by their name,\r
-   which appears in the second heading-line.\r
-\r
- - You can add further columns or even remove the\r
-   \"Comment\"-column. All other columns from the\r
-   example (e.g. \"ref\", \"link\", \"count\", \"created\" and\r
-   \"last-accessed\") are required.\r
-\r
- - Your references need not start at \"R1\"; However, having an\r
-   initial row is required (it serves as a template for subsequent\r
-   references).\r
-\r
- - Your reference need not have the form \"R1\"; you may just as\r
-   well choose any text, that contains a single number,\r
-   e.g. \"reference-{1}\" or \"#7\" or \"++17++\" or \"-344-\". The\r
-   function `org-favtable' will inspect your first reference and\r
-   create all subsequent references in the same way.\r
-\r
- - You may want to change the ID-Property of the node above and\r
-   create a new one, which is unique (and not just a copy of\r
-   mine). You need to change it in the lines copied to your .emacs\r
-   too. However, this is not strictly required to make things\r
-   work, so you may do this later, after trying out this package.\r
-\r
-\r
-Optionally you may tweak the second header line to adjust\r
-`org-favtable' a bit. In the example above it looks like this\r
- (with spaces collapsed):\r
-\r
-\r
-    | ref | link | ;c | count;s | created | last-accessed |\r
-\r
-\r
-The different fields have different meanings:\r
-\r
- - ref : This denotes the column which contains you references\r
-\r
- - link : Column for org-mode links, which can be used to access\r
-   locations within your files.\r
-\r
- - ;c : The flag \"c\" (\"c\" for \"copy\") denotes this column\r
-   as the one beeing copied on command \"leave\". In the example\r
-   above, it is also the comment-column.\r
-\r
- - count;s : this is the column which counts, how many time this\r
-   line has been accessed (which is the key-feature of this\r
-   package). The flag \"s\" stands for \"sort\", so the table is\r
-   sorted after this column. You may also sort after columns\r
-   \"ref\" or \"last-accessed\".\r
-\r
- - created : Date when this line was created.\r
-\r
- - last-accessed : Date and time, when this line was last accessed.\r
-\r
-\r
-After this two-step setup process you may invoke `org-favtable'\r
-to create a new favorite. Read the help option \"usage\" for\r
-instructions on normal usage, read the help option \"commands\"\r
-for help on single commands.\r
-\r
-")\r
-\r
-\r
-(defvar org-favtable--text-to-yank nil)\r
-(defvar org-favtable--last-action nil)\r
-(defvar org-favtable--occur-buffer nil)\r
-(defvar org-favtable--ref-regex nil)\r
-(defvar org-favtable--ref-format nil)\r
-\r
-\r
-\r
-(defun org-favtable  (&optional what search search-is-link)\r
-  "Mark and find your favorite items and org-locations easily:\r
-Create and update a lookup table of your favorite references and\r
-links. Often used entries automatically bubble to the top of the\r
-table; entering some keywords narrows it to just the matching\r
-entries; that way the right one can be picked easily.\r
-\r
-References are essentially small numbers (e.g. \"R237\" or\r
-\"-455-\"), as created by this package; links are normal org-mode\r
-links. Within org-favtable, both are denoted as favorites.\r
-\r
-\r
-Read below for a detailed description of this function. See the\r
-help option \"setup\" or read the documentation of\r
-`org-favtable-id' for setup instructions.\r
-\r
-The function `org-favtable' operates on a dedicated table (called\r
-the table or favorites or favtable, for short) within a special\r
-Org-mode node. The node has to be created as part of your initial\r
-setup. Each line of the favorite table contains:\r
-\r
- - A reference (optional)\r
-\r
- - A link (optional)\r
-\r
- - A number; counting, how often each reference has been\r
-   used. This number is updated automatically and the table can\r
-   be sorted according to it, so that most frequently used\r
-   references appear at the top of the table and can be spotted\r
-   easily.\r
-\r
- - Its respective creation date\r
-\r
- - Date and time of last access. This column can alternatively be\r
-   used to sort the table.\r
-\r
-To be useful, your table of favorites should probably contain a\r
-column with comments too, which allows lines to be selected by\r
-keywords.\r
-\r
-The table of favorites is found through the id of the containing\r
-node; this id should be stored within `org-favtable-id' (see there\r
-for details).\r
-\r
-\r
-The function `org-favtable' is the only interactive function of\r
-this package and its sole entry point; it offers several commands\r
-to create, find and look up these favorites (references and\r
-links). All of them are explained within org-favtable's help.\r
-\r
-\r
-Finally, org-favtable can also be invoked from elisp; the two\r
-optional arguments accepted are:\r
-\r
-         search : string to search for\r
-           what : symbol of the command to invoke\r
- search-is-link : t, if argument search is actually a link\r
-\r
-An example would be:\r
-\r
- (org-favtable \"237\" 'head)   ;; find heading with ref 237\r
-\r
-"\r
-\r
-  (interactive "P")\r
-\r
-  (let (within-node        ; True, if we are within node with favtable\r
-        result-is-visible  ; True, if node or occur is visible in any window\r
-        ref-node-buffer-and-point ; cons with buffer and point of favorites node\r
-        below-cursor              ; word below cursor\r
-        active-region             ; active region (if any)\r
-        link-id                   ; link of starting node, if required\r
-        guarded-search            ; with guard against additional digits\r
-        search-is-ref             ; true, if search is a reference\r
-        commands                ; currently active set of selectable commands\r
-        what-adjusted           ; True, if we had to adjust what\r
-        what-input    ; Input on what question (need not necessary be "what")\r
-        reorder-once  ; Column to use for single time sorting\r
-        parts         ; Parts of a typical reference number (which\r
-                                                  ; need not be a plain number); these are:\r
-        head               ; Any header before number (e.g. "R")\r
-        maxref             ; Maximum number from reference table (e.g. "153")\r
-        tail               ; Tail after number (e.g. "}" or "")\r
-        ref-regex          ; Regular expression to match a reference\r
-        has-reuse          ; True, if table contains a line for reuse\r
-        numcols            ; Number of columns in favtable\r
-        kill-new-text      ; Text that will be appended to kill ring\r
-        message-text       ; Text that will be issued as an explanation,\r
-                           ; what we have done\r
-        initial-ref-or-link      ; Initial position in reftable\r
-        )\r
-\r
-    ;;\r
-    ;; Examine current buffer and location, before turning to favtable\r
-    ;;\r
-\r
-    ;; Get the content of the active region or the word under cursor\r
-    (if (and transient-mark-mode\r
-             mark-active)\r
-        (setq active-region (buffer-substring (region-beginning) (region-end))))\r
-    (setq below-cursor (thing-at-point 'symbol))\r
-\r
-\r
-    ;; Find out, if we are within favable or not\r
-    (setq within-node (string= (org-id-get) org-favtable-id))\r
-\r
-    ;; Find out, if point in any window is within node with favtable\r
-    (mapc (lambda (x) (with-current-buffer (window-buffer x)\r
-                        (when (or\r
-                               (string= (org-id-get) org-favtable-id)\r
-                               (eq (window-buffer x)\r
-                                   org-favtable--occur-buffer))\r
-                          (setq result-is-visible t))))\r
-          (window-list))\r
-\r
-\r
-\r
-    ;;\r
-    ;; Get decoration of references and highest reference from favtable\r
-    ;;\r
-\r
-\r
-    ;; Save initial ref or link\r
-    (if (and within-node\r
-             (org-at-table-p))\r
-        (setq initial-ref-or-link\r
-              (or (org-favtable--get-field 'ref)\r
-                  (org-favtable--get-field 'link))))\r
-\r
-    ;; Find node\r
-    (setq ref-node-buffer-and-point (org-favtable--id-find))\r
-    (unless ref-node-buffer-and-point\r
-      (org-favtable--report-setup-error\r
-       (format "Cannot find node with id \"%s\"" org-favtable-id)))\r
-\r
-    ;; Get configuration of reftable; catch errors\r
-    (let ((error-message\r
-           (catch 'content-error\r
-\r
-             (with-current-buffer (car ref-node-buffer-and-point)\r
-               (save-excursion\r
-                 (unless (string= (org-id-get) org-favtable-id)\r
-                   (goto-char (cdr ref-node-buffer-and-point)))\r
-\r
-                 ;; parse table while still within buffer\r
-                 (setq parts (org-favtable--parse-and-adjust-table)))\r
-\r
-               nil))))\r
-      (when error-message\r
-        (org-pop-to-buffer-same-window (car ref-node-buffer-and-point))\r
-        (org-reveal)\r
-        (error error-message)))\r
-\r
-    ;; Give names to parts of configuration\r
-    (setq head (nth 0 parts))\r
-    (setq maxref (nth 1 parts))\r
-    (setq tail (nth 2 parts))\r
-    (setq numcols (nth 3 parts))\r
-    (setq ref-regex (nth 4 parts))\r
-    (setq has-reuse (nth 5 parts))\r
-    (setq org-favtable--ref-regex ref-regex)\r
-    (setq org-favtable--ref-format (concat head "%d" tail))\r
-\r
-    ;;\r
-    ;; Find out, what we are supposed to do\r
-    ;;\r
-\r
-    (if (equal what '(4)) (setq what 'leave))\r
-\r
-    ;; Set preferred action, that will be the default choice\r
-    (setq org-favtable--preferred-command\r
-          (if within-node\r
-              (if (memq org-favtable--last-action '(ref link))\r
-                  'leave\r
-                'occur)\r
-            (if active-region\r
-                'ref\r
-              (if (and below-cursor (string-match ref-regex below-cursor))\r
-                  'occur\r
-                nil))))\r
-\r
-    ;; Ask user, what to do\r
-    (unless what\r
-      (setq commands (copy-list org-favtable--commands-some))\r
-      (while (progn\r
-               (setq what-input\r
-                     (org-icompleting-read\r
-                      "Please choose: "\r
-                      (mapcar 'symbol-name\r
-                              ;; Construct unique list of commands with\r
-                              ;; preferred one at front\r
-                              (delq nil (delete-dups\r
-                                         (append\r
-                                          (list org-favtable--preferred-command)\r
-                                          commands))))\r
-                      nil nil))\r
-\r
-\r
-               ;; if input starts with "+", any command (not only some) may follow\r
-               ;; this allows input like "+sort" to be accepted\r
-               (when (string= (substring what-input 0 1) "+")\r
-                 ;; make all commands available for selection\r
-                 (setq commands (copy-list org-favtable--commands))\r
-                 (unless (string= what-input "+")\r
-                   ;; not just "+", use following string\r
-                   (setq what-input (substring what-input 1))\r
-\r
-                   (let ((completions\r
-                          ;; get list of possible completions for what-input\r
-                          (all-completions what-input (mapcar 'symbol-name commands))))\r
-                     ;; use it, if unambigously\r
-                     (if (= (length completions) 1)\r
-                         (setq what-input (car completions))))))\r
-\r
-\r
-               ;; if input ends in digits, save them away and do completions on head of input\r
-               ;; this allows input like "h224" to be accepted\r
-               (when (string-match "^\\([^0-9+]\\)\\([0-9]+\\)\\s *$" what-input)\r
-                 ;; use first match as input, even if ambigously\r
-                 (setq org-favtable--preferred-command\r
-                       (intern (first (all-completions (match-string 1 what-input)\r
-                                                       (mapcar 'symbol-name commands)))))\r
-                 ;; use digits as argument to commands\r
-                 (setq what-input (format org-favtable--ref-format\r
-                                          (string-to-number (match-string 2 what-input)))))\r
-\r
-               (setq what (intern what-input))\r
-\r
-               ;; user is not required to input one of the commands; if\r
-               ;; not, take the first one and use the original input for\r
-               ;; next question\r
-               (if (memq what commands)\r
-                   ;; input matched one element of list, dont need original\r
-                   ;; input any more\r
-                   (setq what-input nil)\r
-                 ;; what-input will be used for next question, use first\r
-                 ;; command for what\r
-                 (setq what (or org-favtable--preferred-command\r
-                                (first commands)))\r
-                 ;; remove any trailing dot, that user might have added to\r
-                 ;; disambiguate his input\r
-                 (if (equal (substring what-input -1) ".")\r
-                     ;; but do this only, if dot was really necessary to\r
-                     ;; disambiguate\r
-                     (let ((shortened-what-input (substring what-input 0 -1)))\r
-                       (unless (test-completion shortened-what-input\r
-                                                (mapcar 'symbol-name\r
-                                                        commands))\r
-                         (setq what-input shortened-what-input)))))\r
-\r
-               ;; ask for reorder in loop, because we have to ask for\r
-               ;; what right again\r
-               (if (eq what 'reorder)\r
-                   (setq reorder-once\r
-                         (intern\r
-                          (org-icompleting-read\r
-                           "Please choose column to reorder reftable once: "\r
-                           (mapcar 'symbol-name '(ref count last-accessed))\r
-                           nil t))))\r
-\r
-               ;; maybe ask initial question again\r
-               (memq what '(reorder +)))))\r
-\r
-\r
-    ;;\r
-    ;; Get search, if required\r
-    ;;\r
-\r
-    ;; These actions need a search string:\r
-    (when (memq what '(goto occur head update))\r
-\r
-      ;; Maybe we've got a search string from the arguments\r
-      (unless search\r
-        (let (search-from-table\r
-              search-from-cursor)\r
-\r
-          ;; Search string can come from several sources:\r
-          ;; From ref column of table\r
-          (when within-node\r
-            (setq search-from-table (org-favtable--get-field 'ref)))\r
-          ;; From string below cursor\r
-          (when (and (not within-node)\r
-                     below-cursor\r
-                     (string-match (concat "\\(" ref-regex "\\)")\r
-                                   below-cursor))\r
-            (setq search-from-cursor (match-string 1 below-cursor)))\r
-\r
-          ;; Depending on requested action, get search from one of the sources above\r
-          (cond ((eq what 'goto)\r
-                 (setq search (or what-input search-from-cursor)))\r
-                ((memq what '(head occur))\r
-                 (setq search (or what-input search-from-table search-from-cursor))))))\r
-\r
-\r
-      ;; If we still do not have a search string, ask user explicitly\r
-      (unless search\r
-\r
-        (if what-input\r
-            (setq search what-input)\r
-          (setq search (read-from-minibuffer\r
-                        (cond ((memq what '(occur head))\r
-                               "Text or reference number to search for: ")\r
-                              ((eq what 'goto)\r
-                               "Reference number to search for, or enter \".\" for id of current node: ")\r
-                              ((eq what 'update)\r
-                               "Reference number to update: ")))))\r
-\r
-        (if (string-match "^\\s *[0-9]+\\s *$" search)\r
-            (setq search (format "%s%s%s" head (org-trim search) tail))))\r
-\r
-      ;; Clean up and examine search string\r
-      (if search (setq search (org-trim search)))\r
-      (if (string= search "") (setq search nil))\r
-      (setq search-is-ref (string-match ref-regex search))\r
-\r
-      ;; Check for special case\r
-      (when (and (memq what '(head goto))\r
-                 (string= search "."))\r
-        (setq search (org-id-get))\r
-        (setq search-is-link t))\r
-\r
-      (when search-is-ref\r
-        (setq guarded-search (org-favtable--make-guarded-search search)))\r
-\r
-      ;;\r
-      ;; Do some sanity checking before really starting\r
-      ;;\r
-\r
-      ;; Correct requested action, if nothing to search\r
-      (when (and (not search)\r
-                 (memq what '(search occur head)))\r
-        (setq what 'enter)\r
-        (setq what-adjusted t))\r
-\r
-      ;; For a proper reference as input, we do multi-occur\r
-      (if (and (string-match ref-regex search)\r
-               (eq what 'occur))\r
-          (setq what 'multi-occur))\r
-\r
-      ;; Check for invalid combinations of arguments; try to be helpful\r
-      (when (and (memq what '(head goto))\r
-                 (not search-is-link)\r
-                 (not search-is-ref))\r
-        (error "Can do '%s' only for a reference or link (not '%s'), try 'occur' to search for text" what search)))\r
-\r
-\r
-    ;;\r
-    ;; Prepare\r
-    ;;\r
-\r
-    ;; Get link if required before moving in\r
-    (if (eq what 'link)\r
-        (setq link-id (org-id-get-create)))\r
-\r
-    ;; Move into table, if outside\r
-    (when (memq what '(enter ref link goto occur multi-occur missing statistics))\r
-\r
-      ;; Support orgmode-standard of going back (buffer and position)\r
-      (org-mark-ring-push)\r
-\r
-      ;; Switch to favtable\r
-      (org-pop-to-buffer-same-window (car ref-node-buffer-and-point))\r
-      (goto-char (cdr ref-node-buffer-and-point))\r
-      (show-subtree)\r
-      (org-show-context)\r
-\r
-      ;; sort favtable\r
-      (org-favtable--sort-table reorder-once))\r
-\r
-    ;; Goto back to initial ref, because reformatting of table above might\r
-    ;; have moved point\r
-    (when initial-ref-or-link\r
-      (while (and (org-at-table-p)\r
-                  (not (or\r
-                        (string= initial-ref-or-link (org-favtable--get-field 'ref))\r
-                        (string= initial-ref-or-link (org-favtable--get-field 'link)))))\r
-        (forward-line))\r
-      ;; did not find ref, go back to top\r
-      (if (not (org-at-table-p)) (goto-char top)))\r
-\r
-\r
-    ;;\r
-    ;; Actually do, what is requested\r
-    ;;\r
-\r
-    (cond\r
-\r
-\r
-     ((eq what 'help)\r
-\r
-      (let ((help-what\r
-             ;; which sort of help ?\r
-             (intern\r
-              (concat\r
-               "help-"\r
-               (org-icompleting-read\r
-                "Help on: "\r
-                (mapcar 'symbol-name '(commands usage setup version example))\r
-                nil t)))))\r
-\r
-        ;; help is taken from docstring of functions or variables\r
-        (cond ((eq help-what 'help-commands)\r
-               (org-favtable--show-help 'org-favtable--commands))\r
-              ((eq help-what 'help-usage)\r
-               (org-favtable--show-help 'org-favtable))\r
-              ((eq help-what 'help-setup)\r
-               (org-favtable--show-help 'org-favtable-id))\r
-              ((eq help-what 'help-version)\r
-               (org-favtable-version)))))\r
-\r
-\r
-     ((eq what 'multi-occur)\r
-\r
-      ;; Conveniently position cursor on number to search for\r
-      (org-favtable--goto-top)\r
-      (let (found (initial (point)))\r
-        (while (and (not found)\r
-                    (forward-line)\r
-                    (org-at-table-p))\r
-          (save-excursion\r
-            (setq found (string= search\r
-                                 (org-favtable--get-field 'ref)))))\r
-        (if found\r
-            (org-favtable--update-line nil)\r
-          (goto-char initial)))\r
-\r
-      ;; Construct list of all org-buffers\r
-      (let (buff org-buffers)\r
-        (dolist (buff (buffer-list))\r
-          (set-buffer buff)\r
-          (if (string= major-mode "org-mode")\r
-              (setq org-buffers (cons buff org-buffers))))\r
-\r
-        ;; Do multi-occur\r
-        (multi-occur org-buffers guarded-search)\r
-        (if (get-buffer "*Occur*")\r
-            (progn\r
-              (setq message-text (format "multi-occur for '%s'" search))\r
-              (setq org-favtable--occur-buffer (get-buffer "*Occur*"))\r
-              (other-window 1)\r
-              (toggle-truncate-lines 1))\r
-          (setq message-text (format "Did not find '%s'" search)))))\r
-\r
-\r
-     ((eq what 'head)\r
-\r
-      (let (link)\r
-        ;; link either from table or passed in as argument\r
-\r
-        ;; try to get link\r
-        (if search-is-link\r
-            (setq link (org-trim search))\r
-          (if (and within-node\r
-                   (org-at-table-p))\r
-              (setq link (org-favtable--get-field 'link))))\r
-\r
-        ;; use link if available\r
-        (if (and link\r
-                 (not (string= link "")))\r
-            (progn\r
-              (org-id-goto link)\r
-              (org-favtable--update-line search)\r
-              (setq message-text "Followed link"))\r
-\r
-          (message (format "Scanning headlines for '%s' ..." search))\r
-          (let (buffer point)\r
-            (if (catch 'found\r
-                  (progn\r
-                    ;; loop over all headlines, stop on first match\r
-                    (org-map-entries\r
-                     (lambda ()\r
-                       (when (looking-at (concat ".*" guarded-search))\r
-                         ;; remember location and bail out\r
-                         (setq buffer (current-buffer))\r
-                         (setq point (point))\r
-                         (throw 'found t)))\r
-                     nil 'agenda)\r
-                    nil))\r
-\r
-                (progn\r
-                  (org-favtable--update-line search)\r
-                  (setq message-text (format "Found '%s'" search))\r
-                  (org-pop-to-buffer-same-window buffer)\r
-                  (goto-char point)\r
-                  (org-reveal))\r
-              (setq message-text (format "Did not find '%s'" search)))))))\r
-\r
-\r
-     ((eq what 'leave)\r
-\r
-      (when result-is-visible\r
-\r
-        ;; If we are within the occur-buffer, switch over to get current line\r
-        (if (and (string= (buffer-name) "*Occur*")\r
-                 (eq org-favtable--last-action 'occur))\r
-            (occur-mode-goto-occurrence)))\r
-\r
-      (setq kill-new-text org-favtable--text-to-yank)\r
-      (setq org-favtable--text-to-yank nil)\r
-\r
-      ;; If "leave" has been called two times in succession, make\r
-      ;; org-mark-ring-goto believe it has been called two times too\r
-      (if (eq org-favtable--last-action 'leave)\r
-          (let ((this-command nil) (last-command nil))\r
-            (org-mark-ring-goto 1))\r
-        (org-mark-ring-goto 0)))\r
-\r
-\r
-     ((eq what 'goto)\r
-\r
-      ;; Go downward in table to requested reference\r
-      (let (found (initial (point)))\r
-        (org-favtable--goto-top)\r
-        (while (and (not found)\r
-                    (forward-line)\r
-                    (org-at-table-p))\r
-          (save-excursion\r
-            (setq found\r
-                  (string= search\r
-                           (org-favtable--get-field\r
-                            (if search-is-link 'link 'ref))))))\r
-        (if found\r
-            (progn\r
-              (setq message-text (format "Found '%s'" search))\r
-              (org-favtable--update-line nil)\r
-              (org-table-goto-column (org-favtable--column-num 'ref))\r
-              (if (looking-back " ") (backward-char))\r
-              ;; remember string to copy\r
-              (setq org-favtable--text-to-yank\r
-                    (org-trim (org-table-get-field (org-favtable--column-num 'copy)))))\r
-          (setq message-text (format "Did not find '%s'" search))\r
-          (goto-char initial)\r
-          (forward-line)\r
-          (setq what 'missed))))\r
-\r
-\r
-     ((eq what 'occur)\r
-\r
-      ;; search for string: occur\r
-      (let (search-regexp\r
-            all-or-any\r
-            (search-words (split-string search "," t)))\r
-\r
-        (if (< (length search-words) 2)\r
-            ;; only one word to search; use it as is\r
-            (setq search-regexp search)\r
-          ;; construct regexp to match any of the words (maybe throw out some matches later)\r
-          (setq search-regexp\r
-                (mapconcat (lambda (x) (concat "\\(" x "\\)")) search-words "\\|"))\r
-          (setq all-or-any\r
-                (intern\r
-                 (org-icompleting-read\r
-                  "Two or more words have been specified; show lines, that match: " '("all" "any")))))\r
-\r
-        (save-restriction\r
-          (org-narrow-to-subtree)\r
-          (occur search-regexp)\r
-          (widen)\r
-          (if (get-buffer "*Occur*")\r
-              (with-current-buffer "*Occur*"\r
-\r
-                ;; install helpful keyboard-shortcuts within occur-buffer\r
-                (let ((keymap (make-sparse-keymap)))\r
-                  (set-keymap-parent keymap occur-mode-map)\r
-\r
-                  (define-key keymap (kbd "RET")\r
-                    (lambda () (interactive)\r
-                      (org-favtable--occur-helper 'head)))\r
-\r
-                  (define-key keymap (kbd "<C-return>")\r
-                    (lambda () (interactive)\r
-                      (org-favtable--occur-helper 'multi-occur)))\r
-\r
-                  (define-key keymap (kbd "<M-return>")\r
-                    (lambda () (interactive)\r
-                      (org-favtable--occur-helper 'goto)))\r
-\r
-                  (define-key keymap (kbd "<C-M-return>")\r
-                    (lambda () (interactive)\r
-                      (org-favtable--occur-helper 'update)))\r
-\r
-                  (use-local-map keymap))\r
-\r
-                ;; Brush up occur buffer\r
-                (other-window 1)\r
-                (toggle-truncate-lines 1)\r
-                (let ((inhibit-read-only t))\r
-                  ;; insert some help text\r
-                  (insert (substitute-command-keys\r
-                           "Type RET to find heading, C-RET for multi-occur, M-RET to go to occurence and C-M-RET to update line in reftable.\n\n"))\r
-                  (forward-line 1)\r
-\r
-                  ;; when matching all of multiple words, remove all lines that do not match one of the words\r
-                  (when (eq all-or-any 'all)\r
-                    (mapc (lambda (x) (keep-lines x)) search-words))\r
-\r
-                  ;; replace description from occur\r
-                  (when all-or-any\r
-                    (forward-line -1)\r
-                    (kill-line)\r
-                    (let ((count (- (count-lines (point) (point-max)) 1)))\r
-                      (insert (format "%d %s for %s of %s"\r
-                                      count\r
-                                      (if (= count 1) "match" "matches")\r
-                                      all-or-any\r
-                                      search)))\r
-                    (forward-line)\r
-                    (beginning-of-line))\r
-\r
-                  ;; Record link or reference for each line in\r
-                  ;; occur-buffer, that is linked into reftable. Because if\r
-                  ;; we later realign the reftable and then reuse the occur\r
-                  ;; buffer, the original links might point nowehere.\r
-                  (save-excursion\r
-                    (while (not (eq (point) (point-max)))\r
-                      (let ((beg (line-beginning-position))\r
-                            (end (line-end-position))\r
-                            pos ref link)\r
-\r
-                        ;; occur has saved the position into a special property\r
-                        (setq pos (get-text-property (point) 'occur-target))\r
-                        (when pos\r
-                          ;; but this property might soon point nowhere; so retrieve ref-or-link instead\r
-                          (with-current-buffer (marker-buffer pos)\r
-                            (goto-char pos)\r
-                            (setq ref (org-favtable--get-field 'ref))\r
-                            (setq link (org-favtable--get-field 'link))))\r
-                        ;; save as text property\r
-                        (put-text-property beg end 'org-favtable--ref ref)\r
-                        (put-text-property beg end 'org-favtable--link link))\r
-                      (forward-line))))\r
-\r
-                (setq message-text\r
-                      (format  "Occur for '%s'" search)))\r
-            (setq message-text\r
-                  (format "Did not find any matches for '%s'" search))))))\r
-\r
-\r
-     ((memq what '(ref link))\r
-\r
-      ;; add a new row (or reuse existing one)\r
-      (let (new)\r
-\r
-        (when (eq what 'ref)\r
-            ;; go through table to find first entry to be reused\r
-          (when has-reuse\r
-            (org-favtable--goto-top)\r
-            ;; go through table\r
-            (while (and (org-at-table-p)\r
-                        (not new))\r
-              (when (string=\r
-                     (org-favtable--get-field 'count)\r
-                     ":reuse:")\r
-                (setq new (org-favtable--get-field 'ref))\r
-                (if new (org-table-kill-row)))\r
-              (forward-line)))\r
-\r
-          ;; no ref to reuse; construct new reference\r
-          (unless new\r
-            (setq new (format "%s%d%s" head (1+ maxref) tail)))\r
-\r
-          ;; remember for org-mark-ring-goto\r
-          (setq org-favtable--text-to-yank new))\r
-\r
-        ;; insert ref or link as very first row\r
-        (org-favtable--goto-top)\r
-        (org-table-insert-row)\r
-\r
-        ;; fill special columns with standard values\r
-        (when (eq what 'ref)\r
-          (org-table-goto-column (org-favtable--column-num 'ref))\r
-          (insert new))\r
-        (when (eq what 'link)\r
-          (org-table-goto-column (org-favtable--column-num 'link))\r
-          (insert link-id))\r
-        (org-table-goto-column (org-favtable--column-num 'created))\r
-        (org-insert-time-stamp nil nil t)\r
-\r
-        ;; goto first empty field\r
-        (unless (catch 'empty\r
-                  (dotimes (col numcols)\r
-                    (org-table-goto-column (+ col 1))\r
-                    (if (string= (org-trim (org-table-get-field)) "")\r
-                        (throw 'empty t))))\r
-          ;; none found, goto first\r
-          (org-table-goto-column 1))\r
-\r
-        (org-table-align)\r
-        (if active-region (setq kill-new-text active-region))\r
-        (if (eq what 'ref)\r
-            (setq message-text (format "Adding a new row with ref '%s'" new))\r
-          (setq message-text (format "Adding a new row linked to '%s'" link-id)))))\r
-\r
-\r
-     ((eq what 'enter)\r
-\r
-      ;; simply go into table\r
-      (org-favtable--goto-top)\r
-      (show-subtree)\r
-      (recenter)\r
-      (if what-adjusted\r
-          (setq message-text "Nothing to search for; at favtable")\r
-        (setq message-text "At favtable")))\r
-\r
-\r
-     ((eq what 'fill)\r
-\r
-      ;; check, if within reftable\r
-      (unless (and within-node\r
-                   (org-at-table-p))\r
-        (error "Not within table of favorites"))\r
-\r
-      ;; applies to missing refs and missing links alike\r
-      (let ((ref (org-favtable--get-field 'ref))\r
-            (link (org-favtable--get-field 'link)))\r
-\r
-        (if (and (not ref)\r
-                 (not link))\r
-            ;; have already checked this during parse, check here anyway\r
-            (error "Columns ref and link are both empty in this line"))\r
-\r
-        ;; fill in new ref\r
-        (if (not ref)\r
-            (progn\r
-              (setq kill-new-text (format "%s%d%s" head (1+ maxref) tail))\r
-              (org-favtable--get-field 'ref kill-new-text)\r
-              ;; remember for org-mark-ring-goto\r
-              (setq org-favtable--text-to-yank kill-new-text)\r
-              (org-id-goto link)\r
-              (setq message-text "Filled reftable field with new reference"))\r
-\r
-          ;; fill in new link\r
-          (if (not link)\r
-              (progn\r
-                (setq guarded-search (org-favtable--make-guarded-search ref))\r
-                (message (format "Scanning headlines for '%s' ..." ref))\r
-                (let (link)\r
-                  (if (catch 'found\r
-                        (org-map-entries\r
-                         (lambda ()\r
-                           (when (looking-at (concat ".*" guarded-search))\r
-                             (setq link (org-id-get-create))\r
-                             (throw 'found t)))\r
-                         nil 'agenda)\r
-                        nil)\r
-\r
-                      (progn\r
-                        (org-favtable--get-field 'link link)\r
-                        (setq message-text "Inserted link"))\r
-\r
-                    (setq message-text (format "Did not find reference '%s'" ref)))))\r
-\r
-            ;; nothing is missing\r
-            (setq message-text "Columns 'ref' and 'link' are already filled; nothing to do")))))\r
-\r
-\r
-     ((eq what 'sort)\r
-\r
-      ;; sort lines according to contained reference\r
-      (let (begin end where)\r
-        (catch 'aborted\r
-          ;; either active region or whole buffer\r
-          (if (and transient-mark-mode\r
-                   mark-active)\r
-              ;; sort only region\r
-              (progn\r
-                (setq begin (region-beginning))\r
-                (setq end (region-end))\r
-                (setq where "region"))\r
-            ;; sort whole buffer\r
-            (setq begin (point-min))\r
-            (setq end (point-max))\r
-            (setq where "whole buffer")\r
-            ;; make sure\r
-            (unless (y-or-n-p "Sort whole buffer ")\r
-              (setq message-text "Sort aborted")\r
-              (throw 'aborted nil)))\r
-\r
-          (save-excursion\r
-            (save-restriction\r
-              (goto-char (point-min))\r
-              (narrow-to-region begin end)\r
-              (sort-subr nil 'forward-line 'end-of-line\r
-                         (lambda ()\r
-                           (if (looking-at (concat ".*"\r
-                                                   (org-favtable--make-guarded-search ref-regex 'dont-quote)))\r
-                               (string-to-number (match-string 1))\r
-                             0))))\r
-            (highlight-regexp ref-regex)\r
-            (setq message-text (format "Sorted %s from character %d to %d, %d lines"\r
-                                       where begin end\r
-                                       (count-lines begin end)))))))\r
-\r
-\r
-     ((eq what 'update)\r
-\r
-      ;; simply update line in reftable\r
-      (save-excursion\r
-        (let ((ref-or-link (if search-is-link "link" "reference")))\r
-          (beginning-of-line)\r
-          (if (org-favtable--update-line search)\r
-              (setq message-text (format "Updated %s '%s'" ref-or-link search))\r
-            (setq message-text (format "Did not find %s '%s'" ref-or-link search))))))\r
-\r
-\r
-     ((eq what 'parse)\r
-\r
-      ;; Just parse the reftable, which is already done, so nothing to do\r
-      )\r
-\r
-\r
-     ((memq what '(highlight unhighlight))\r
-\r
-      (let ((where "buffer"))\r
-        (save-excursion\r
-          (save-restriction\r
-            (when (and transient-mark-mode\r
-                       mark-active)\r
-              (narrow-to-region (region-beginning) (region-end))\r
-              (setq where "region"))\r
-\r
-            (if (eq what 'highlight)\r
-                (progn\r
-                  (highlight-regexp ref-regex)\r
-                  (setq message-text (format "Highlighted references in %s" where)))\r
-              (unhighlight-regexp ref-regex)\r
-              (setq message-text (format "Removed highlights for references in %s" where)))))))\r
-\r
-\r
-     ((memq what '(missing statistics))\r
-\r
-      (org-favtable--goto-top)\r
-      (let (missing\r
-            ref-field\r
-            ref\r
-            min\r
-            max\r
-            (total 0))\r
-\r
-        ;; start with list of all references\r
-        (setq missing (mapcar (lambda (x) (format "%s%d%s" head x tail))\r
-                              (number-sequence 1 maxref)))\r
-\r
-        ;; go through table and remove all refs, that we see\r
-        (while (and (forward-line)\r
-                    (org-at-table-p))\r
-\r
-          ;; get ref-field and number\r
-          (setq ref-field (org-favtable--get-field 'ref))\r
-          (if (and ref-field\r
-                   (string-match ref-regex ref-field))\r
-              (setq ref (string-to-number (match-string 1 ref-field))))\r
-\r
-          ;; remove existing refs from list\r
-          (if ref-field (setq missing (delete ref-field missing)))\r
-\r
-          ;; record min and max\r
-          (if (or (not min) (< ref min)) (setq min ref))\r
-          (if (or (not max) (> ref max)) (setq max ref))\r
-\r
-          ;; count\r
-          (setq total (1+ total)))\r
-\r
-        ;; insert them, if requested\r
-        (forward-line -1)\r
-        (if (eq what 'statistics)\r
-\r
-            (setq message-text (format "Found %d references from %s to %s. %d references below highest do not appear in table. "\r
-                                       total\r
-                                       (format org-favtable--format min)\r
-                                       (format org-favtable--format max)\r
-                                       (length missing)))\r
-\r
-          (if (y-or-n-p (format "Found %d missing references; do you wish to append them to the table of favorites"\r
-                                (length missing)))\r
-              (let (type)\r
-                (setq type (org-icompleting-read\r
-                            "Insert new lines for reuse by command \"new\" or just as missing ? " '("reuse" "missing")))\r
-                (mapc (lambda (x)\r
-                        (let (org-table-may-need-update) (org-table-insert-row t))\r
-                        (org-favtable--get-field 'ref x)\r
-                        (org-favtable--get-field 'count (format ":%s:" type)))\r
-                      missing)\r
-                (org-table-align)\r
-                (setq message-text (format "Inserted %d new lines for missing refernces" (length missing))))\r
-            (setq message-text (format "%d missing references." (length missing)))))))\r
-\r
-\r
-     (t (error "This is a bug: unmatched case '%s'" what)))\r
-\r
-\r
-    ;; remember what we have done for next time\r
-    (setq org-favtable--last-action what)\r
-\r
-    ;; tell, what we have done and what can be yanked\r
-    (if kill-new-text (setq kill-new-text\r
-                            (substring-no-properties kill-new-text)))\r
-    (if (string= kill-new-text "") (setq kill-new-text nil))\r
-    (let ((m (concat\r
-              message-text\r
-              (if (and message-text kill-new-text)\r
-                  " and r"\r
-                (if kill-new-text "R" ""))\r
-              (if kill-new-text (format "eady to yank '%s'" kill-new-text) ""))))\r
-      (unless (string= m "") (message m)))\r
-    (if kill-new-text (kill-new kill-new-text))))\r
-\r
-\r
-\r
-(defun org-favtable--parse-and-adjust-table ()\r
-\r
-  (let ((maxref 0)\r
-        top\r
-        bottom\r
-        ref-field\r
-        link-field\r
-        parts\r
-        numcols\r
-        head\r
-        tail\r
-        ref-regex\r
-        has-reuse\r
-        initial-point)\r
-\r
-    (setq initial-point (point))\r
-    (org-favtable--goto-top)\r
-    (setq top (point))\r
-\r
-    (goto-char top)\r
-\r
-    ;; count columns\r
-    (org-table-goto-column 100)\r
-    (setq numcols (- (org-table-current-column) 1))\r
-\r
-    ;; get contents of columns\r
-    (forward-line -2)\r
-    (unless (org-at-table-p)\r
-      (org-favtable--report-setup-error\r
-       "Table of favorites starts with a hline" t))\r
-\r
-    ;; check for optional line consisting solely of width specifications\r
-    (beginning-of-line)\r
-    (if (looking-at "\\s *|\\(\\(\\s *|\\)\\|\\(\\s *<[0-9]+>\\s *|\\)\\)+\\s *$")\r
-        (forward-line -1))\r
-    (org-table-goto-column 1)\r
-\r
-    (setq org-favtable--columns (org-favtable--parse-headings numcols))\r
-\r
-    ;; Go beyond end of table\r
-    (while (org-at-table-p) (forward-line 1))\r
-\r
-    ;; Kill all empty rows at bottom\r
-    (while (progn\r
-             (forward-line -1)\r
-             (org-table-goto-column 1)\r
-             (and\r
-              (not (org-favtable--get-field 'ref))\r
-              (not (org-favtable--get-field 'link))))\r
-      (org-table-kill-row))\r
-    (forward-line)\r
-    (setq bottom (point))\r
-    (forward-line -1)\r
-\r
-    ;; Retrieve any decorations around the number within the first nonempty ref-field\r
-    (goto-char top)\r
-    (while (and (org-at-table-p)\r
-                (not (setq ref-field (org-favtable--get-field 'ref))))\r
-      (forward-line))\r
-\r
-    ;; Some Checking\r
-    (unless ref-field\r
-      (org-favtable--report-setup-error\r
-       "No line of reference column contains a number" t))\r
-\r
-    (unless (string-match "^\\([^0-9]*\\)\\([0-9]+\\)\\([^0-9]*\\)$" ref-field)\r
-      (org-favtable--report-setup-error\r
-       (format "First reference in table table of favorites ('%s') does not contain a number" ref-field) t))\r
-\r
-\r
-    ;; These are the decorations used within the first ref of favtable\r
-    (setq head (match-string 1 ref-field))\r
-    (setq tail (match-string 3 ref-field))\r
-    (setq ref-regex (concat (regexp-quote head)\r
-                            "\\([0-9]+\\)"\r
-                            (regexp-quote tail)))\r
-\r
-    ;; Go through table to find maximum number and do some checking\r
-    (let ((ref 0))\r
-\r
-      (while (org-at-table-p)\r
-\r
-        (setq ref-field (org-favtable--get-field 'ref))\r
-        (setq link-field (org-favtable--get-field 'link))\r
-\r
-        (if (and (not ref-field)\r
-                 (not link-field))\r
-            (throw 'content-error "Columns ref and link are both empty in this line"))\r
-\r
-        (if ref-field\r
-            (if (string-match ref-regex ref-field)\r
-                ;; grab number\r
-                (setq ref (string-to-number (match-string 1 ref-field)))\r
-              (throw 'content-error "Column ref does not contain a number")))\r
-\r
-        ;; check, if higher ref\r
-        (if (> ref maxref) (setq maxref ref))\r
-\r
-        ;; check if ref is ment for reuse\r
-        (if (string= (org-favtable--get-field 'count) ":reuse:")\r
-            (setq has-reuse 1))\r
-\r
-        (forward-line 1)))\r
-\r
-    ;; sort used to be here\r
-\r
-    (setq parts (list head maxref tail numcols ref-regex has-reuse))\r
-\r
-    ;; go back to top of table\r
-    (goto-char top)\r
-\r
-    parts))\r
-\r
-\r
-\r
-(defun org-favtable--sort-table (sort-column)\r
-\r
-  (unless sort-column (setq sort-column (org-favtable--column-num 'sort)))\r
-\r
-  (let (top\r
-        bottom\r
-        ref-field\r
-        count-field\r
-        count-special)\r
-\r
-\r
-    ;; get boundaries of table\r
-    (org-favtable--goto-top)\r
-    (forward-line 0)\r
-    (setq top (point))\r
-    (while (org-at-table-p) (forward-line))\r
-    (setq bottom (point))\r
-\r
-    (save-restriction\r
-      (narrow-to-region top bottom)\r
-      (goto-char top)\r
-      (sort-subr t\r
-                 'forward-line\r
-                 'end-of-line\r
-                 (lambda ()\r
-                   (let (ref\r
-                         (ref-field (or (org-favtable--get-field 'ref) ""))\r
-                         (count-field (or (org-favtable--get-field 'count) ""))\r
-                         (count-special 0))\r
-\r
-                     ;; get reference with leading zeroes, so it can be\r
-                     ;; sorted as text\r
-                     (string-match org-favtable--ref-regex ref-field)\r
-                     (setq ref (format\r
-                                "%06d"\r
-                                (string-to-number\r
-                                 (or (match-string 1 ref-field)\r
-                                     "0"))))\r
-\r
-                     ;; find out, if special token in count-column\r
-                     (setq count-special (format "%d"\r
-                                                 (- 2\r
-                                                    (length (member count-field '(":missing:" ":reuse:"))))))\r
-\r
-                     ;; Construct different sort-keys according to\r
-                     ;; requested sort column; prepend count-special to\r
-                     ;; sort special entries at bottom of table, append ref\r
-                     ;; as a secondary sort key\r
-                     (cond\r
-\r
-                      ((eq sort-column 'count)\r
-                       (concat count-special\r
-                               (format\r
-                                "%08d"\r
-                                (string-to-number (or (org-favtable--get-field 'count)\r
-                                                      "")))\r
-                               ref))\r
-\r
-                      ((eq sort-column 'last-accessed)\r
-                       (concat count-special\r
-                               (org-favtable--get-field 'last-accessed)\r
-                               " "\r
-                               ref))\r
-\r
-                      ((eq sort-column 'ref)\r
-                       (concat count-special\r
-                               ref))\r
-\r
-                      (t (error "This is a bug: unmatched case '%s'" sort-column)))))\r
-\r
-                 nil 'string<)))\r
-\r
-  ;; align table\r
-  (org-table-align))\r
-\r
-\r
-(defun org-favtable--goto-top ()\r
-\r
-  ;; go to heading of node\r
-  (while (not (org-at-heading-p)) (forward-line -1))\r
-  (forward-line 1)\r
-  ;; go to table within node, but make sure we do not get into another node\r
-  (while (and (not (org-at-heading-p))\r
-              (not (org-at-table-p))\r
-              (not (eq (point) (point-max))))\r
-    (forward-line 1))\r
-\r
-  ;; check, if there really is a table\r
-  (unless (org-at-table-p)\r
-    (org-favtable--report-setup-error\r
-     (format "Cannot find favtable within node %s" org-favtable-id) t))\r
-\r
-  ;; go to first hline\r
-  (while (and (not (org-at-table-hline-p))\r
-              (org-at-table-p))\r
-    (forward-line 1))\r
-\r
-  ;; and check\r
-  (unless (org-at-table-hline-p)\r
-    (org-favtable--report-setup-error\r
-     "Cannot find hline within table of favorites" t))\r
-\r
-  (forward-line 1)\r
-  (org-table-goto-column 1))\r
-\r
-\r
-\r
-(defun org-favtable--id-find ()\r
-  "Find org-favtable-id"\r
-  (let ((marker (org-id-find org-favtable-id 'marker))\r
-        marker-and-buffer)\r
-\r
-    (if marker\r
-        (progn\r
-          (setq marker-and-buffer (cons (marker-buffer marker) (marker-position marker)))\r
-          (move-marker marker nil)\r
-          marker-and-buffer)\r
-      nil)))\r
-\r
-\r
-\r
-(defun org-favtable--parse-headings (numcols)\r
-\r
-  (let (columns)\r
-\r
-    ;; Associate names of special columns with column-numbers\r
-    (setq columns (copy-tree '((ref . 0) (link . 0) (created . 0) (last-accessed . 0)\r
-                               (count . 0) (sort . nil) (copy . nil))))\r
-\r
-    ;; For each column\r
-    (dotimes (col numcols)\r
-      (let* (field-flags ;; raw heading, consisting of file name and maybe\r
-                         ;; flags (seperated by ";")\r
-             field       ;; field name only\r
-             field-symbol ;; and as a symbol\r
-             flags       ;; flags from field-flags\r
-             found)\r
-\r
-        ;; parse field-flags into field and flags\r
-        (setq field-flags (org-trim (org-table-get-field (+ col 1))))\r
-        (if (string-match "^\\([^;]*\\);\\([a-z]+\\)$" field-flags)\r
-            (progn\r
-              (setq field (downcase (or (match-string 1 field-flags) "")))\r
-              ;; get flags as list of characters\r
-              (setq flags (mapcar 'string-to-char\r
-                                  (split-string\r
-                                   (downcase (match-string 2 field-flags))\r
-                                   "" t))))\r
-          ;; no flags\r
-          (setq field field-flags))\r
-\r
-        (unless (string= field "") (setq field-symbol (intern (downcase field))))\r
-\r
-        ;; Check, that no flags appear twice\r
-        (mapc (lambda (x)\r
-                (when (memq (car x) flags)\r
-                  (if (cdr (assoc (cdr x) columns))\r
-                      (org-favtable--report-setup-error\r
-                       (format "More than one heading is marked with flag '%c'" (car x)) t))))\r
-              '((?s . sort)\r
-                (?c . copy)))\r
-\r
-        ;; Process flags\r
-        (if (memq ?s flags)\r
-            (setcdr (assoc 'sort columns) field-symbol))\r
-        (if (memq ?c flags)\r
-            (setcdr (assoc 'copy columns) (+ col 1)))\r
-\r
-        ;; Store columns in alist\r
-        (setq found (assoc field-symbol columns))\r
-        (when found\r
-          (if (> (cdr found) 0)\r
-              (org-favtable--report-setup-error\r
-               (format "'%s' appears two times as column heading" (downcase field)) t))\r
-          (setcdr found (+ col 1)))))\r
-\r
-    ;; check if all necessary informations have been specified\r
-    (mapc (lambda (col)\r
-            (unless (> (cdr (assoc col columns)) 0)\r
-              (org-favtable--report-setup-error\r
-               (format "column '%s' has not been set" col) t)))\r
-          '(ref link count created last-accessed))\r
-\r
-    ;; use ref as a default sort-column\r
-    (unless (cdr (assoc 'sort columns))\r
-      (setcdr (assoc 'sort columns) 'ref))\r
-    columns))\r
-\r
-\r
-\r
-(defun org-favtable--report-setup-error (text &optional switch-to-node)\r
-\r
-  (when switch-to-node\r
-    (org-id-goto org-favtable-id)\r
-    (delete-other-windows))\r
-\r
-  (when (y-or-n-p (concat\r
-                   text\r
-                   ";\n"\r
-                   "the correct setup is explained in the documentation of 'org-favtable-id'.\n"\r
-                   "Do you want to read it ? "))\r
-    (org-favtable--show-help 'org-favtable-id))\r
-\r
-  (error "")\r
-  (setq org-favtable--last-action 'leave))\r
-\r
-\r
-\r
-(defun org-favtable--show-help (function-or-variable)\r
-\r
-  (let ((isfun (functionp function-or-variable)))\r
-    ;; bring up help-buffer for function or variable\r
-    (if isfun\r
-        (describe-function function-or-variable)\r
-      (describe-variable function-or-variable))\r
-\r
-\r
-    ;; clean up help-buffer\r
-    (pop-to-buffer "*Help*")\r
-    (let ((inhibit-read-only t))\r
-      (goto-char (point-min))\r
-      (while (progn\r
-               (kill-line 1)\r
-               (not (looking-at\r
-                     (if isfun\r
-                         "("\r
-                       "Documentation:")))))\r
-      (kill-line (if isfun 2 3))\r
-      (goto-char (point-max))\r
-      (kill-line -2)\r
-      (goto-char (point-min)))))\r
-\r
-\r
-\r
-(defun org-favtable--update-line (ref-or-link)\r
-\r
-  (let (initial\r
-        found\r
-        count-field\r
-        (ref-node-buffer-and-point (org-favtable--id-find)))\r
-\r
-    (with-current-buffer (car ref-node-buffer-and-point)\r
-\r
-      ;; search reference or link, if given (or assume, that we are already positioned right)\r
-      (when ref-or-link\r
-        (setq initial (point))\r
-        (goto-char (cdr ref-node-buffer-and-point))\r
-        (org-favtable--goto-top)\r
-        (while (and (org-at-table-p)\r
-                    (not (or (string= ref-or-link (org-favtable--get-field 'ref))\r
-                             (string= ref-or-link (org-favtable--get-field 'link)))))\r
-          (forward-line)))\r
-\r
-      (if (not (org-at-table-p))\r
-          (error "Did not find reference or link '%s'" ref-or-link)\r
-        (setq count-field (org-favtable--get-field 'count))\r
-\r
-        ;; update count field only if number or empty; leave :missing: and :reuse: as is\r
-        (if (or (not count-field)\r
-                (string-match "^[0-9]+$" count-field))\r
-            (org-favtable--get-field 'count\r
-                                    (number-to-string\r
-                                     (+ 1 (string-to-number (or count-field "0"))))))\r
-\r
-        ;; update timestamp\r
-        (org-table-goto-column (org-favtable--column-num 'last-accessed))\r
-        (org-table-blank-field)\r
-        (org-insert-time-stamp nil t t)\r
-\r
-        (setq found t))\r
-\r
-      (if initial (goto-char initial))\r
-\r
-      found)))\r
-\r
-\r
-\r
-(defun org-favtable--occur-helper (action)\r
-  (let ((line-beg (line-beginning-position))\r
-        key search link ref)\r
-\r
-    ;; extract reference or link from text property (as put there before)\r
-    (setq ref (get-text-property line-beg 'org-favtable--ref))\r
-    (if (string= ref "") (setq ref nil))\r
-    (setq link (get-text-property line-beg 'org-favtable--link))\r
-    (if (string= link "") (setq link nil))\r
-\r
-    (org-favtable action\r
-                  (or link ref) ;; prefer link\r
-                  (if link t nil))))\r
-\r
-\r
-(defun org-favtable--get-field (key &optional value)\r
-  (let (field)\r
-    (setq field (org-trim (org-table-get-field (cdr (assoc key org-favtable--columns)) value)))\r
-    (if (string= field "") (setq field nil))\r
-\r
-    field))\r
-\r
-\r
-(defun org-favtable--column-num (key)\r
-  (cdr (assoc key org-favtable--columns)))\r
-\r
-\r
-(defun org-favtable-version ()\r
-  "Show version of org-favtable" (interactive)\r
-  (message "org-favtable %s" org-favtable--version))\r
-\r
-\r
-(defun org-favtable--make-guarded-search (ref &optional dont-quote)\r
-  (concat "\\b" (if dont-quote ref (regexp-quote ref)) "\\b"))\r
-\r
-\r
-(defun org-favtable-get-ref-regex-format ()\r
-  "return cons-cell with regular expression and format for references"\r
-  (unless org-favtable--ref-regex\r
-    (org-favtable 'parse))\r
-  (cons (org-favtable--make-guarded-search org-favtable--ref-regex 'dont-quote) org-favtable--ref-format))\r
-\r
-\r
-(defadvice org-mark-ring-goto (after org-favtable--advice-text-to-yank activate)\r
-  "Make text from the favtable available for yank."\r
-  (when org-favtable--text-to-yank\r
-      (kill-new org-favtable--text-to-yank)\r
-      (message (format "Ready to yank '%s'" org-favtable--text-to-yank))\r
-      (setq org-favtable--text-to-yank nil)))\r
-\r
-\r
-(provide 'org-favtable)\r
-\r
-;; Local Variables:\r
-;; fill-column: 75\r
-;; comment-column: 50\r
-;; End:\r
-\r
-;;; org-favtable.el ends here\r
diff --git a/contrib/lisp/org-index.el b/contrib/lisp/org-index.el
new file mode 100644 (file)
index 0000000..8293a32
--- /dev/null
@@ -0,0 +1,1944 @@
+;;; org-index.el --- A personal index for org and beyond
+
+;; Copyright (C) 2011-2013 Free Software Foundation, Inc.
+
+;; Author: Marc Ihm <org-index@ferntreffer.de>
+;; Keywords: hypermedia, matching
+;; Requires: org
+;; Download: http://orgmode.org/worg/code/elisp/org-index.el
+;; Version: 2.3.2
+
+;; This file is not part of GNU Emacs.
+
+;;; License:
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Purpose:
+;;
+;;  Mark and find your favorite org-locations and other points of interest
+;;  easily; create and update a lookup table of references and links. When
+;;  searching, frequently used entries appear at the the top and entering
+;;  some keywords narrows down to matching entries only; so the right one
+;;  can be spotted easily.
+;;
+;;  References are essentially small numbers (e.g. "R237" or "-455-"),
+;;  which are created by this package; they are well suited to be used
+;;  outside org. Links are normal org-mode links.
+;;
+;; Setup:
+;;
+;;  - Add these lines to your .emacs:
+;;
+;;    (require 'org-index)
+;;
+;;    ;; Optionally assign a key. Pick your own.
+;;    (global-set-key (kbd "C-+") 'org-index)
+;;
+;;  - Invoke `org-index', which will assist you to create your 
+;;    index table.
+;;
+;;  - Do not forget to restart emacs to make these lines effective.
+;;
+;;
+;; Further reading:
+;;
+;;  See the documentation of `org-index', which can also be read
+;;  by invoking `org-index' and and choosing the help-command.
+;;
+;;  For more documentation and working examples, see:
+;;
+;;    http://orgmode.org/worg/org-contrib/org-index.html
+;;
+
+;;; Change Log:
+
+;;   [2013-10-04 Fr] Version 2.3.2:
+;;   - Bugfix: index-table created by assistant is found after 
+;;     restart of emacs instead of invoking assistent again
+;;
+;;   [2013-07-20 Sa] Version 2.3.0:
+;;    - Renamed from "org-favtable" to "org-index"
+;;    - Added an assistent to set up the index table
+;;    - occur is now incremental, searching as you type
+;;    - simplified the documentation and help-system
+;;    - Saving keystrokes, as "+g237" is now valid input
+;;    - Many bugfixes
+;;
+;;   [2013-02-28 Th] Version 2.2.0:
+;;    - Allowed shortcuts like "h237" for command "head" with argument "237"
+;;    - Integrated with org-mark-ring-goto
+;;
+;;   [2013-01-25 Fr] Version 2.1.0:
+;;    - Added full support for links
+;;    - New commands "missing" and "statistics"
+;;    - Renamed the package from "org-reftable" to "org-favtable"
+;;    - Additional columns are required (e.g. "link"). Error messages will
+;;      guide you
+;;
+;;   [2012-12-07 Fr] Version 2.0.0:
+;;    - The format of the table of favorites has changed ! You need to bring
+;;      your existing table into the new format by hand (which however is
+;;      easy and explained below)
+;;    - Reference table can be sorted after usage count or date of last access
+;;    - Ask user explicitly, which command to invoke
+;;    - Renamed the package from "org-refer-by-number" to "org-reftable"
+
+;;   [2012-09-22 Sa] Version 1.5.0:
+;;    - New command "sort" to sort a buffer or region by reference number
+;;    - New commands "highlight" and "unhighlight" to mark references
+
+;;   [2012-07-13 Fr] Version 1.4.0:
+;;    - New command "head" to find a headline with a reference number
+
+;;   [2012-04-28 Sa] Version 1.3.0:
+;;    - New commands occur and multi-occur
+;;    - All commands can now be invoked explicitly
+;;    - New documentation
+;;    - Many bugfixes
+
+;;   [2011-12-10 Sa] Version 1.2.0:
+;;    - Fixed a bug, which lead to a loss of newly created reference numbers
+;;    - Introduced single and double prefix arguments
+;;    - Started this Change Log
+
+;;; Code:
+
+(require 'org-table)
+(require 'cl)
+
+(defvar org-index--preferred-command nil)
+
+(defvar org-index--commands 
+  '(occur head ref link leave enter goto help + reorder fill sort update highlight unhighlight missing statistics)
+  "List of commands known to org-index.")
+
+(defvar org-index--commands-some '(occur head ref link leave enter goto help +))  
+
+
+(defvar org-index--columns nil)
+
+(defcustom org-index-id nil 
+  "Id of the Org-mode node, which contains the index table."
+  :group 'org
+  :group 'org-index)
+
+
+(defvar org-index--text-to-yank nil)
+(defvar org-index--last-action nil)
+(defvar org-index--ref-regex nil)
+(defvar org-index--ref-format nil)
+(defvar org-index--buffer nil "buffer of index table")
+(defvar org-index--point nil "position at start of headline of index table")
+(defvar org-index--below-hline nil "position of first cell in first line below hline") 
+(defvar org-index--point-before nil "point in buffer with index table")     
+
+
+(defun org-index (&optional ARG)
+  "Mark and find your favorite things and org-locations easily:
+Create and update a lookup table of references and links. Often
+used entries bubble to the top; entering some keywords narrows
+down to matching entries only, so that the right one can be
+spotted easily.
+
+References are essentially small numbers (e.g. \"R237\" or \"-455-\"),
+which are created by this package; they are well suited to be used
+outside of org. Links are normal org-mode links.
+
+This is version 2.3.2 of org-index.
+
+The function `org-index' operates on a dedicated table, the index
+table, which lives within its own Org-mode node. The table and
+its node will be created, when you first invoke org-index.
+
+Each line in the index table contains:
+
+ - A reference
+
+ - A link
+
+ - A number; counting, how often each reference has been
+   used. This number is updated automatically and the table can
+   be sorted after it, so that most frequently used references
+   appear at the top of the table and can be spotted easily.
+
+ - The creation date of the line.
+
+ - Date and time of last access. This column can alternatively be
+   used to sort the table.
+
+ - A column for your own comments, which allows lines to be selected by
+   keywords.
+
+The index table is found through the id of the containing
+node; this id is stored within `org-index-id'.
+
+
+The function `org-index' is the only interactive function of this
+package and its sole entry point; it offers several commands to
+create, find and look up these favorites (references and links).
+
+Commands known:
+
+  occur: Incremental search, that after each keystroke shows
+    matching lines from index table. You may enter a list of words
+    seperated by comma (\",\"), to select lines that contain all
+    of the given words.
+
+    If you supply a number (e.g. \"237\"): Apply emacs standard
+    multi-occur operation on all org-mode buffers to search for
+    this specific reference.
+
+    You may also read the note at the end of this help on saving
+    the keystroke RET with this frequent default command.
+
+  head: If invoked outside the index table, ask for a
+    reference number and search for a heading containing it. If
+    invoked within index table dont ask; rather use the reference or
+    link from the current line.
+
+  ref: Create a new reference, copy any previously selected text.
+    If already within index table, fill in ref-column.
+
+  link: Create a new line in index table with a link to the
+    current node.  Do not populate the ref column; this can later
+    be populated by calling the \"fill\" command from within the
+    index table.
+
+  leave: Leave the index table. If the last command has
+    been \"ref\", the new reference is copied and ready to yank.
+    This \"org-mark-ring-goto\" and can be called several times
+    in succession. If you invoke org-index with a prefix argument,
+    this command \"leave\" is executed without further questions.
+
+  enter: Just enter the node with the index table.
+
+  goto: Search for a specific reference within the index table.
+
+  help: Show this text.
+
+  +: Show all commands including the less frequently used ones
+    given below. If \"+\" is followd by enough letters of such a
+    command (e.g. \"+fi\"), then this command is invoked
+    directly.
+
+  reorder: Temporarily reorder the index table, e.g. by
+    count, reference or last access.
+
+  fill: If either ref or link is missing, fill it.
+
+  sort: Sort a set of lines (either the active region or the
+    whole buffer) by the references found in each line.
+
+  update: For the given reference, update the line in the
+    index table.
+
+  highlight: Highlight references in region or buffer.
+
+  unhighlight: Remove highlights.
+
+  missing : Search for missing reference numbers (which do not
+    appear in the reference table). If requested, add additional
+    lines for them, so that the command \"ref\" is able to reuse
+    them.
+
+  statistics : Show some statistics (e.g. minimum and maximum
+    reference) about index table.
+
+
+
+Two ways to save keystrokes:
+
+When prompting for a command, org-index puts the most likely
+one (e.g. \"occur\" or \"ref\") in front of the list, so that
+you may just type RET.
+
+If this command needs additional input (like e.g. \"occur\"), you
+may supply this input right away, although you are still beeing
+prompted for the command. So, to do an occur for the string
+\"foo\", you can just enter \"foo\" RET, without even typing
+\"occur\".
+
+
+Another way to save keystrokes applies if you want to choose a
+command, that requrires a reference number (and would normally
+prompt for it): In that case you may just enter enough characters
+from your command, so that it appears first in the list of
+matches; then immediately enter the number of the reference you
+are searching for. So the input \"h237\" would execute the
+command \"head\" for reference \"237\" right away.
+
+"
+
+  (interactive "P")
+
+  (org-index-1 (if (equal ARG '(4)) 'leave nil) )
+)
+
+
+(defun org-index-1 (&optional what search search-is-link) 
+"Do the actual worg for org-index; its optional arguments are:
+
+         search : string to search for
+           what : symbol of the command to invoke
+ search-is-link : t, if argument search is actually a link
+
+An example would be:
+
+ (org-index \"237\" 'head)   ;; find heading with ref 237
+"
+  (let (within-node        ; True, if we are within node of the index table
+        active-window-index    ; active window with index table (if any)
+        below-cursor              ; word below cursor
+        active-region             ; active region (if any)
+        link-id                   ; link of starting node, if required
+        guarded-search            ; with guard against additional digits
+        search-is-ref             ; true, if search is a reference
+        commands                ; currently active set of selectable commands
+        what-adjusted           ; True, if we had to adjust what
+        what-input    ; Input on what question (need not necessary be "what")
+        trailing-digits ; any digits, that are are appended to what-input
+        reorder-once  ; Column to use for single time sorting
+        parts         ; Parts of a typical reference number (which
+                      ; need not be a plain number); these are:
+        head               ; Any header before number (e.g. "R")
+        maxref             ; Maximum number from reference table (e.g. "153")
+        tail               ; Tail after number (e.g. "}" or "")
+        ref-regex          ; Regular expression to match a reference
+        has-reuse          ; True, if table contains a line for reuse
+        numcols            ; Number of columns in index table
+        kill-new-text      ; Text that will be appended to kill ring
+        message-text       ; Text that will be issued as an explanation,
+                           ; what we have done
+        initial-ref-or-link      ; Initial position in index table
+        )
+
+    ;;
+    ;; Examine current buffer and location, before turning to index table
+    ;;
+    
+    (unless (boundp 'org-index-id)
+      (setq org-index-id nil)
+      (org-index--create-new-index 
+       t
+       (format "No index table has been created yet." org-index-id)))
+
+    ;; Bail out, if new index has been created
+    (catch 'created-new-index
+
+      ;; Get the content of the active region or the word under cursor
+      (if (and transient-mark-mode
+               mark-active)
+          (setq active-region (buffer-substring (region-beginning) (region-end))))
+      (setq below-cursor (thing-at-point 'symbol))
+
+
+      ;; Find out, if we are within favable or not
+      (setq within-node (string= (org-id-get) org-index-id))
+
+
+      ;;
+      ;; Get decoration of references and highest reference from index table
+      ;;
+
+
+      ;; Save initial ref or link
+      (if (and within-node
+               (org-at-table-p))
+          (setq initial-ref-or-link 
+                (or (org-index--get-field 'ref)
+                    (org-index--get-field 'link))))
+
+      ;; Find node
+      (let ((marker (org-id-find org-index-id 'marker)) initial)      
+        (if marker 
+            (progn
+              (setq org-index--buffer (marker-buffer marker) 
+                    org-index--point (marker-position marker))
+              (move-marker marker nil))
+          (org-index--create-new-index 
+           t
+           (format "Cannot find node with id \"%s\"" org-index-id))))
+      
+      ;; Check and remember, if active window contains buffer with index table
+      (if (eq (window-buffer) org-index--buffer)
+          (setq active-window-index (selected-window)))
+
+      ;; Get configuration of index table; catch errors
+      (let ((error-message
+             (catch 'content-error
+
+               (with-current-buffer org-index--buffer
+                 (unless org-index--point-before 
+                   (setq org-index--point-before (point)))
+
+                 (unless (string= (org-id-get) org-index-id)
+                   (goto-char org-index--point))
+
+                 ;; parse table while still within buffer
+                 (setq parts (org-index--parse-and-adjust-table))
+                 
+                 ;; go back
+                 (goto-char org-index--point-before)
+
+                 nil))))
+
+        (when error-message 
+          (org-pop-to-buffer-same-window org-index--buffer)
+          (org-reveal)
+          (error error-message)))
+
+      ;; Give names to parts of configuration
+      (setq head (nth 0 parts))
+      (setq maxref (nth 1 parts))
+      (setq tail (nth 2 parts))
+      (setq numcols (nth 3 parts))
+      (setq ref-regex (nth 4 parts))
+      (setq has-reuse (nth 5 parts))
+      (setq org-index--ref-regex ref-regex)
+      (setq org-index--ref-format (concat head "%d" tail))
+
+      ;;
+      ;; Find out, what we are supposed to do
+      ;;
+
+      ;; Set preferred action, that will be the default choice
+      (setq org-index--preferred-command
+            (if within-node
+                (if (memq org-index--last-action '(ref link))
+                    'leave
+                  'goto)
+              (if active-region
+                  'ref
+                (if (and below-cursor (string-match ref-regex below-cursor))
+                    'occur
+                  nil))))
+      
+      ;; Ask user, what to do
+      (unless what
+        (setq commands (copy-list org-index--commands-some))
+        (while (let (completions starts-with-plus is-only-plus)
+
+                 (setq what-input
+                       (org-completing-read 
+                        "Please choose: " 
+                        (mapcar 'symbol-name 
+                                ;; Construct unique list of commands with
+                                ;; preferred one at front
+                                (delq nil (delete-dups 
+                                           (append 
+                                            (list org-index--preferred-command)
+                                            (copy-list commands)))))
+                        nil nil))
+
+                 ;; if input ends in digits, save them away and do completions on head of input
+                 ;; this allows input like "h224" to be accepted
+                 (when (string-match "^\\([^0-9]+\\)\\([0-9]+\\)\\s *$" what-input)
+                   ;; remember digits
+                   (setq trailing-digits (string-to-number (match-string 2 what-input)))
+                   ;; and use non-digits-part to find match
+                   (setq what-input (match-string 1 what-input)))
+
+                 ;; if input starts with "+", any command (not only some) may follow
+                 ;; this allows input like "+sort" to be accepted
+                 (when (string= (substring what-input 0 1) "+")
+                   ;; make all commands available for selection
+                   (setq commands (copy-list org-index--commands))
+                   (setq what-input (substring what-input 1))
+                   (setq starts-with-plus (> (length what-input) 0))
+                   (setq is-only-plus (not starts-with-plus)))
+
+                 ;; get list of possible completions for what-input; i.e.
+                 ;; all commands, that start with what-input                   
+                 (setq completions (delq nil (mapcar 
+                                              (lambda (x) 
+                                                (let ((where (search what-input (symbol-name x))))
+                                                  (if (and where 
+                                                           (= where 0))
+                                                      x
+                                                    nil))) commands)))
+
+                 ;; if input starts with "+" and not just "+"
+                 (when starts-with-plus
+                   ;; use first completion, if unambigously
+                   (if (= (length completions) 1)
+                       (setq what-input (symbol-name (car completions)))
+                     (if completions
+                         (error "Input \"+%s\" matches multiple commands: %s" 
+                                what-input 
+                                (mapconcat 'symbol-name completions ", "))
+                       (error "Input \"+%s\" matches no commands" what-input))))
+
+                 ;; if input ends in digits, use first completion, even if ambigous
+                 ;; this allows input like "h224" to be accepted
+                 (when (and trailing-digits completions)
+                   ;; use first match as input, even if ambigously
+                   (setq org-index--preferred-command (first completions))
+                   (setq what-input (number-to-string trailing-digits)))
+
+                 ;; convert to symbol
+                 (setq what (intern what-input))
+                 (if is-only-plus (setq what '+))
+                 
+                 ;; user is not required to input one of the commands; if
+                 ;; not, take the first one and use the original input for
+                 ;; next question
+                 (if (memq what commands)
+                     ;; input matched one element of list, dont need original
+                     ;; input any more
+                     (setq what-input nil)
+                   ;; what-input will be used for next question, use first
+                   ;; command for what
+                   (setq what (or org-index--preferred-command
+                                  (first commands)))
+                   ;; remove any trailing dot, that user might have added to
+                   ;; disambiguate his input
+                   (if (and (> (length what-input) 0) 
+                            (equal (substring what-input -1) "."))
+                       ;; but do this only, if dot was really necessary to
+                       ;; disambiguate
+                       (let ((shortened-what-input (substring what-input 0 -1)))
+                         (unless (test-completion shortened-what-input 
+                                                  (mapcar 'symbol-name 
+                                                          commands))
+                           (setq what-input shortened-what-input)))))
+                 
+                 ;; ask for reorder in loop, because we have to ask for
+                 ;; what right again
+                 (if (eq what 'reorder)
+                     (setq reorder-once
+                           (intern
+                            (org-icompleting-read 
+                             "Please choose column to reorder index table once: " 
+                             (mapcar 'symbol-name '(ref count last-accessed))
+                             nil t))))
+                 
+                 ;; maybe ask initial question again
+                 (memq what '(reorder +)))))
+
+
+      ;;
+      ;; Get search, if required
+      ;;
+
+      ;; These actions need a search string:
+      (when (memq what '(goto occur head update))
+
+        ;; Maybe we've got a search string from the arguments
+        (unless search
+          (let (search-from-table
+                search-from-cursor)
+            
+            ;; Search string can come from several sources:
+            ;; From link or ref columns of table
+            (when within-node
+              (setq search-from-table (org-index--get-field 'link))
+              (if search-from-table 
+                  (setq search-is-link t)
+                (setq search-from-table (org-index--get-field 'ref))))      
+            
+            ;; From string below cursor
+            (when (and (not within-node)
+                       below-cursor
+                       (string-match (concat "\\(" ref-regex "\\)") 
+                                     below-cursor))
+              (setq search-from-cursor (match-string 1 below-cursor)))
+            
+            ;; Depending on requested action, get search from one of the sources above
+            (cond ((eq what 'goto)
+                   (setq search (or what-input search-from-cursor)))
+                  ((memq what '(head occur))
+                   (setq search (or what-input search-from-table search-from-cursor))))))
+
+
+        ;; If we still do not have a search string, ask user explicitly
+        (unless search
+          (unless (eq what 'occur)
+            
+            (if what-input 
+                (setq search what-input)
+              (setq search (read-from-minibuffer
+                            (cond ((eq what 'head)
+                                   "Text or reference number to search for: ")
+                                  ((eq what 'goto)
+                                   "Reference number to search for, or enter \".\" for id of current node: ")
+                                  ((eq what 'update)
+                                   "Reference number to update: ")))))
+
+            (if (string-match "^\\s *[0-9]+\\s *$" search)
+                (setq search (format "%s%s%s" head (org-trim search) tail))))))
+      
+      ;; Clean up and examine search string
+      (when search 
+        (setq search (org-trim search))
+        (if (string= search "") (setq search nil))
+        (when search
+          (if (string-match "^[0-9]+$" search)
+              (setq search (concat head search tail)))
+          (setq search-is-ref (string-match ref-regex search))))
+      
+      ;; Check for special case
+      (when (and (memq what '(head goto))
+                 (string= search "."))
+        (setq search (org-id-get))
+        (setq search-is-link t))
+      
+      (when search-is-ref
+        (setq guarded-search (org-index--make-guarded-search search)))
+      
+      ;;
+      ;; Do some sanity checking before really starting
+      ;;
+      
+      ;; Correct requested action, if nothing to search
+      (when (and (not search)
+                 (memq what '(search head)))
+        (setq what 'enter)
+        (setq what-adjusted t))
+      
+      ;; For a proper reference as input, we do multi-occur
+      (if (and search
+               (string-match ref-regex search)
+               (eq what 'occur))
+          (setq what 'multi-occur))
+      
+      ;; Check for invalid combinations of arguments; try to be helpful
+      (when (and (memq what '(head goto))
+                 (not search-is-link)
+                 (not search-is-ref))
+        (error "Can do '%s' only for a reference or link (not '%s'), try 'occur' to search for text" what search))
+
+      
+      ;;
+      ;; Prepare
+      ;;
+
+      ;; Get link if required before moving in
+      (if (eq what 'link)
+          (let ((org-id-link-to-org-use-id t))
+            (setq link-id (org-id-get-create))))
+
+      ;; Move into table, if outside
+
+      ;; These commands enter index table only temporarily
+      (when (memq what '(occur multi-occur statistics))
+
+        ;; Switch to index table
+        (set-buffer org-index--buffer)
+        (goto-char org-index--point)
+
+        ;; sort index table
+        (org-index--sort-table reorder-once))
+
+      ;; These commands will leave user in index table after they are finished
+      (when (memq what '(enter ref link goto missing))
+
+        ;; Support orgmode-standard of going back (buffer and position)
+        (org-mark-ring-push)
+
+        ;; Switch to index table
+        (org-pop-to-buffer-same-window org-index--buffer)
+        (goto-char org-index--point)
+        (show-subtree)
+        (org-show-context)
+        (setq org-index--point-before nil) ;; dont want to go back
+
+        ;; sort index table
+        (org-index--sort-table reorder-once))
+
+      ;; Goto back to initial ref, because reformatting of table above might
+      ;; have moved point
+      (when initial-ref-or-link
+        (while (and (org-at-table-p)
+                    (not (or
+                          (string= initial-ref-or-link (org-index--get-field 'ref))
+                          (string= initial-ref-or-link (org-index--get-field 'link)))))
+          (forward-line))
+        ;; did not find ref, go back to top
+        (if (not (org-at-table-p)) (goto-char org-index--point)))
+      
+      
+      ;;
+      ;; Actually do, what is requested
+      ;;
+
+      (cond
+
+
+       ((eq what 'help)
+        
+        ;; bring up help-buffer for this function
+        (describe-function 'org-index))
+
+
+       ((eq what 'multi-occur) 
+        
+        ;; Conveniently position cursor on number to search for
+        (goto-char org-index--below-hline)
+        (let (found (initial (point)))
+          (while (and (not found)
+                      (forward-line)
+                      (org-at-table-p))
+            (save-excursion 
+              (setq found (string= search 
+                                   (org-index--get-field 'ref)))))
+          (if found 
+              (org-index--update-line nil)
+            (goto-char initial)))
+
+        ;; Construct list of all org-buffers
+        (let (buff org-buffers)
+          (dolist (buff (buffer-list))
+            (set-buffer buff)
+            (if (string= major-mode "org-mode")
+                (setq org-buffers (cons buff org-buffers))))
+
+          ;; Do multi-occur
+          (multi-occur org-buffers guarded-search)
+          (if (get-buffer "*Occur*")
+              (progn 
+                (setq message-text (format "multi-occur for '%s'" search))
+                (other-window 1)
+                (toggle-truncate-lines 1))
+            (setq message-text (format "Did not find '%s'" search)))))
+
+
+       ((eq what 'head)
+
+        (let (link)
+          ;; link either from table or passed in as argument
+          
+          ;; try to get link
+          (if search-is-link 
+              (setq link (org-trim search))
+            (if (and within-node
+                     (org-at-table-p))
+                (setq link (org-index--get-field 'link))))
+
+          ;; use link if available
+          (if (and link
+                   (not (string= link "")))
+              (progn 
+                (org-index--update-line search)
+                (org-id-goto link)
+                (org-reveal)
+                (if (eq (current-buffer) org-index--buffer)
+                    (setq org-index--point-before nil))
+                (setq message-text "Followed link"))
+
+            (message (format "Scanning headlines for '%s' ..." search))
+            (org-index--update-line search)
+            (let (buffer point)
+              (if (catch 'found
+                    (progn
+                      ;; loop over all headlines, stop on first match
+                      (org-map-entries 
+                       (lambda () 
+                         (when (looking-at (concat ".*" guarded-search))
+                           ;; If this is not an inlinetask ...
+                           (when (< (org-element-property :level (org-element-at-point))
+                                    org-inlinetask-min-level)
+                             ;; ... remember location and bail out
+                             (setq buffer (current-buffer))
+                             (setq point (point))
+                             (throw 'found t))))          
+                       nil 'agenda)
+                      nil))
+
+                  (progn
+                    (if (eq buffer org-index--buffer)
+                        (setq org-index--point-before nil))
+                    (setq message-text (format "Found '%s'" search))
+                    (org-pop-to-buffer-same-window buffer)
+                    (goto-char point)
+                    (org-reveal))
+                (setq message-text (format "Did not find '%s'" search)))))))
+
+
+       ((eq what 'leave)
+
+        (setq kill-new-text org-index--text-to-yank)
+        (setq org-index--text-to-yank nil)
+        
+        ;; If "leave" has been called two times in succession, make
+        ;; org-mark-ring-goto believe it has been called two times too
+        (if (eq org-index--last-action 'leave) 
+            (let ((this-command nil) (last-command nil))
+              (org-mark-ring-goto 1))
+          (org-mark-ring-goto)))
+
+
+       ((eq what 'goto)
+
+        ;; Go downward in table to requested reference
+        (let (found (initial (point)))
+          (goto-char org-index--below-hline)
+          (while (and (not found)
+                      (forward-line)
+                      (org-at-table-p))
+            (save-excursion 
+              (setq found 
+                    (string= search 
+                             (org-index--get-field 
+                              (if search-is-link 'link 'ref))))))
+          (if found
+              (progn
+                (setq message-text (format "Found '%s'" search))
+                (org-index--update-line nil)
+                (org-table-goto-column (org-index--column-num 'ref))
+                (if (looking-back " ") (backward-char))
+                ;; remember string to copy
+                (setq org-index--text-to-yank 
+                      (org-trim (org-table-get-field (org-index--column-num 'copy)))))
+            (setq message-text (format "Did not find '%s'" search))
+            (goto-char initial)
+            (forward-line)
+            (setq what 'missed))))
+
+
+       ((eq what 'occur)
+
+        (org-index--do-occur what-input))
+
+
+       ((memq what '(ref link))
+
+        ;; add a new row (or reuse existing one)
+        (let (new)
+
+          (when (eq what 'ref)
+            ;; go through table to find first entry to be reused
+            (when has-reuse
+              (goto-char org-index--below-hline)
+              ;; go through table
+              (while (and (org-at-table-p)
+                          (not new))
+                (when (string= 
+                       (org-index--get-field 'count)
+                       ":reuse:")
+                  (setq new (org-index--get-field 'ref))
+                  (if new (org-table-kill-row)))
+                (forward-line)))
+            
+            ;; no ref to reuse; construct new reference
+            (unless new 
+              (setq new (format "%s%d%s" head (1+ maxref) tail)))
+
+            ;; remember for org-mark-ring-goto
+            (setq org-index--text-to-yank new))
+          
+          ;; insert ref or link as very first row
+          (goto-char org-index--below-hline)
+          (org-table-insert-row)
+          
+          ;; fill special columns with standard values
+          (when (eq what 'ref)
+            (org-table-goto-column (org-index--column-num 'ref))
+            (insert new))
+          (when (eq what 'link)
+            (org-table-goto-column (org-index--column-num 'link))
+            (insert link-id))
+          (org-table-goto-column (org-index--column-num 'created))
+          (org-insert-time-stamp nil nil t)
+          (org-table-goto-column (org-index--column-num 'count))
+          (insert "1")
+
+          ;; goto copy-field or first empty one
+          (if (org-index--column-num 'copy)
+              (org-table-goto-column (org-index--column-num 'copy))
+            (unless (catch 'empty
+                      (dotimes (col numcols)
+                        (org-table-goto-column (+ col 1))
+                        (if (string= (org-trim (org-table-get-field)) "")
+                            (throw 'empty t))))
+              ;; none found, goto first
+              (org-table-goto-column 1)))
+
+          (org-table-align)
+          (if active-region (setq kill-new-text active-region))
+          (if (eq what 'ref)
+              (setq message-text (format "Adding a new row with ref '%s'" new))
+            (setq message-text (format "Adding a new row linked to '%s'" link-id)))))
+
+
+       ((eq what 'enter)
+
+        ;; simply go into table
+        (goto-char org-index--below-hline)
+        (show-subtree)
+        (recenter)
+        (if what-adjusted
+            (setq message-text "Nothing to search for; at index table")
+          (setq message-text "At index table")))
+
+       
+       ((eq what 'fill)
+
+        ;; check, if within index table
+        (unless (and within-node
+                     (org-at-table-p))
+          (error "Not within index table"))
+
+        ;; applies to missing refs and missing links alike
+        (let ((ref (org-index--get-field 'ref))
+              (link (org-index--get-field 'link)))
+
+          (if (and (not ref)
+                   (not link))
+              ;; have already checked this during parse, check here anyway
+              (error "Columns ref and link are both empty in this line"))
+
+          ;; fill in new ref
+          (if (not ref)
+              (progn 
+                (setq kill-new-text (format "%s%d%s" head (1+ maxref) tail))
+                (org-index--get-field 'ref kill-new-text)
+                ;; remember for org-mark-ring-goto
+                (setq org-index--text-to-yank kill-new-text)
+                (org-id-goto link)
+                (setq message-text "Filled field of index table with new reference"))
+
+            ;; fill in new link
+            (if (not link)
+                (progn
+                  (setq guarded-search (org-index--make-guarded-search ref))
+                  (message (format "Scanning headlines for '%s' ..." ref))
+                  (let (link)
+                    (if (catch 'found
+                          (org-map-entries 
+                           (lambda () 
+                             (when (looking-at (concat ".*" guarded-search))
+                               (setq link (org-id-get-create))
+                               (throw 'found t)))   
+                           nil 'agenda)
+                          nil)
+
+                        (progn
+                          (org-index--get-field 'link link)
+                          (setq message-text "Inserted link"))
+
+                      (setq message-text (format "Did not find reference '%s'" ref)))))
+              
+              ;; nothing is missing
+              (setq message-text "Columns 'ref' and 'link' are already filled; nothing to do")))))
+       
+
+       ((eq what 'sort)
+
+        ;; sort lines according to contained reference
+        (let (begin end where)
+          (catch 'aborted
+            ;; either active region or whole buffer
+            (if (and transient-mark-mode
+                     mark-active)
+                ;; sort only region
+                (progn
+                  (setq begin (region-beginning))
+                  (setq end (region-end))
+                  (setq where "region"))
+              ;; sort whole buffer
+              (setq begin (point-min))
+              (setq end (point-max))
+              (setq where "whole buffer")
+              ;; make sure
+              (unless (y-or-n-p "Sort whole buffer ")
+                (setq message-text "Sort aborted")
+                (throw 'aborted nil)))
+            
+            (save-excursion
+              (save-restriction
+                (goto-char (point-min))
+                (narrow-to-region begin end)
+                (sort-subr nil 'forward-line 'end-of-line 
+                           (lambda ()
+                             (if (looking-at (concat ".*" 
+                                                     (org-index--make-guarded-search ref-regex 'dont-quote)))
+                                 (string-to-number (match-string 1))
+                               0))))
+              (highlight-regexp ref-regex 'isearch)
+              (setq message-text (format "Sorted %s from character %d to %d, %d lines" 
+                                         where begin end
+                                         (count-lines begin end)))))))
+       
+
+       ((eq what 'update)
+
+        ;; simply update line in index table
+        (save-excursion
+          (let ((ref-or-link (if search-is-link "link" "reference")))
+            (beginning-of-line)
+            (if (org-index--update-line search)
+                (setq message-text (format "Updated %s '%s'" ref-or-link search))
+              (setq message-text (format "Did not find %s '%s'" ref-or-link search))))))
+
+
+       ((eq what 'parse)
+        ;; Just parse the index table, which is already done, so nothing to do
+        )
+
+
+       ((memq what '(highlight unhighlight))
+
+        (let ((where "buffer"))
+          (save-excursion
+            (save-restriction
+              (when (and transient-mark-mode
+                         mark-active)
+                (narrow-to-region (region-beginning) (region-end))
+                (setq where "region"))
+
+              (if (eq what 'highlight)
+                  (progn
+                    (highlight-regexp ref-regex 'isearch)
+                    (setq message-text (format "Highlighted references in %s" where)))
+                (unhighlight-regexp ref-regex)
+                (setq message-text (format "Removed highlights for references in %s" where)))))))
+
+
+       ((memq what '(missing statistics))
+
+        (goto-char org-index--below-hline)
+        (let (missing 
+              ref-field
+              ref
+              min
+              max 
+              (total 0))
+
+          ;; start with list of all references
+          (setq missing (mapcar (lambda (x) (format "%s%d%s" head x tail)) 
+                                (number-sequence 1 maxref)))
+
+          ;; go through table and remove all refs, that we see
+          (while (and (forward-line)
+                      (org-at-table-p))
+
+            ;; get ref-field and number
+            (setq ref-field (org-index--get-field 'ref))
+            (if (and ref-field 
+                     (string-match ref-regex ref-field))
+                (setq ref (string-to-number (match-string 1 ref-field))))
+
+            ;; remove existing refs from list
+            (if ref-field (setq missing (delete ref-field missing)))
+
+            ;; record min and max            
+            (if (or (not min) (< ref min)) (setq min ref))
+            (if (or (not max) (> ref max)) (setq max ref))
+
+            ;; count
+            (setq total (1+ total)))
+
+          ;; insert them, if requested
+          (forward-line -1)
+          (if (eq what 'statistics)
+              
+              (setq message-text (format "Found %d references from %s to %s. %d references below highest do not appear in table. "
+                                         total 
+                                         (format org-index--ref-format min)   
+                                         (format org-index--ref-format max)
+                                         (length missing)))
+
+            (if (y-or-n-p (format "Found %d missing references; do you wish to append them to the index table" 
+                                  (length missing)))
+                (let (type)
+                  (setq type (org-icompleting-read 
+                              "Insert new lines for reuse by command \"new\" or just as missing ? " '("reuse" "missing")))
+                  (mapc (lambda (x) 
+                          (let (org-table-may-need-update) (org-table-insert-row t))
+                          (org-index--get-field 'ref x)
+                          (org-index--get-field 'count (format ":%s:" type)))
+                        missing)
+                  (org-table-align)
+                  (setq message-text (format "Inserted %d new lines for missing refernces" (length missing))))
+              (setq message-text (format "%d missing references." (length missing)))))))
+       
+       
+       (t (error "This is a bug: unmatched case '%s'" what)))
+
+
+      ;; restore point in buffer or window with index table
+      (if org-index--point-before
+          ;; buffer displayed in window need to set point there first
+          (if (eq (window-buffer active-window-index)
+                  org-index--buffer)
+              (set-window-point active-window-index org-index--point-before)
+            ;; set position in buffer in any case and second
+            (with-current-buffer org-index--buffer
+              (goto-char org-index--point-before)
+              (setq org-index--point-before nil))))
+
+
+      ;; remember what we have done for next time
+      (setq org-index--last-action what)
+      
+      ;; tell, what we have done and what can be yanked
+      (if kill-new-text (setq kill-new-text 
+                              (substring-no-properties kill-new-text)))
+      (if (string= kill-new-text "") (setq kill-new-text nil))
+      (let ((m (concat 
+                message-text
+                (if (and message-text kill-new-text) 
+                    " and r" 
+                  (if kill-new-text "R" ""))
+                (if kill-new-text (format "eady to yank '%s'" kill-new-text) ""))))
+        (unless (string= m "") (message m)))
+      (if kill-new-text (kill-new kill-new-text)))))
+
+
+
+(defun org-index--parse-and-adjust-table ()
+
+  (let ((maxref 0)
+        top
+        bottom
+        ref-field
+        link-field
+        parts
+        numcols
+        head
+        tail
+        ref-regex
+        has-reuse
+        initial-point)
+
+    (setq initial-point (point))
+    (org-index--go-below-hline)
+    (setq org-index--below-hline (point))
+    (setq top (point))
+    
+    ;; count columns
+    (org-table-goto-column 100)
+    (setq numcols (- (org-table-current-column) 1))
+    
+    ;; get contents of columns
+    (forward-line -2)
+    (unless (org-at-table-p)
+      (org-index--create-new-index 
+       nil
+       "Index table starts with a hline"))
+
+    ;; check for optional line consisting solely of width specifications
+    (beginning-of-line)
+    (if (looking-at "\\s *|\\(\\(\\s *|\\)\\|\\(\\s *<[0-9]+>\\s *|\\)\\)+\\s *$")
+        (forward-line -1))
+    (org-table-goto-column 1)
+
+    (setq org-index--columns (org-index--parse-headings numcols))
+    
+    ;; Go beyond end of table
+    (while (org-at-table-p) (forward-line 1))
+    
+    ;; Kill all empty rows at bottom
+    (while (progn
+             (forward-line -1)
+             (org-table-goto-column 1)
+             (and
+              (not (org-index--get-field 'ref))
+              (not (org-index--get-field 'link))))
+      (org-table-kill-row))
+    (forward-line)
+    (setq bottom (point))
+    (forward-line -1)
+    
+    ;; Retrieve any decorations around the number within the first nonempty ref-field
+    (goto-char top)
+    (while (and (org-at-table-p)
+                (not (setq ref-field (org-index--get-field 'ref))))
+      (forward-line))
+
+    ;; Some Checking
+    (unless ref-field
+      (org-index--create-new-index 
+       nil
+       "Reference column is empty"))
+    
+    (unless (string-match "^\\([^0-9]*\\)\\([0-9]+\\)\\([^0-9]*\\)$" ref-field)
+      (org-index--create-new-index 
+       nil 
+       (format "First reference in index table ('%s') does not contain a number" ref-field)))
+    
+
+    ;; These are the decorations used within the first ref of index
+    (setq head (match-string 1 ref-field))
+    (setq tail (match-string 3 ref-field))
+    (setq ref-regex (concat (regexp-quote head)
+                            "\\([0-9]+\\)" 
+                            (regexp-quote tail)))
+
+    ;; Go through table to find maximum number and do some checking
+    (let ((ref 0))
+
+      (while (org-at-table-p) 
+
+        (setq ref-field (org-index--get-field 'ref))
+        (setq link-field (org-index--get-field 'link))
+
+        (if (and (not ref-field)
+                 (not link-field))
+            (throw 'content-error "Columns ref and link are both empty in this line"))
+
+        (if ref-field
+            (if (string-match ref-regex ref-field)
+                ;; grab number
+                (setq ref (string-to-number (match-string 1 ref-field)))
+              (throw 'content-error "Column ref does not contain a number")))
+
+        ;; check, if higher ref
+        (if (> ref maxref) (setq maxref ref))
+
+        ;; check if ref is ment for reuse
+        (if (string= (org-index--get-field 'count) ":reuse:")
+            (setq has-reuse 1))
+
+        (forward-line 1)))
+    
+    ;; sort used to be here
+    
+    (setq parts (list head maxref tail numcols ref-regex has-reuse))
+        
+    ;; go back to top of table
+    (goto-char top)
+
+    parts))
+
+
+
+(defun org-index--sort-table (sort-column)
+
+  (unless sort-column (setq sort-column (org-index--column-num 'sort)))
+
+  (let (top 
+        bottom
+        ref-field
+        count-field
+        count-special)
+
+
+    ;; get boundaries of table
+    (goto-char org-index--below-hline)
+    (forward-line 0)
+    (setq top (point))
+    (while (org-at-table-p) (forward-line))
+    (setq bottom (point))
+    
+    (save-restriction
+      (narrow-to-region top bottom)
+      (goto-char top)
+      (sort-subr t
+                 'forward-line 
+                 'end-of-line 
+                 (lambda ()
+                   (let (ref
+                         (ref-field (or (org-index--get-field 'ref) ""))
+                         (count-field (or (org-index--get-field 'count) ""))
+                         (count-special 0))
+
+                     ;; get reference with leading zeroes, so it can be
+                     ;; sorted as text
+                     (string-match org-index--ref-regex ref-field)
+                     (setq ref (format 
+                                "%06d" 
+                                (string-to-number 
+                                 (or (match-string 1 ref-field)
+                                     "0"))))
+
+                     ;; find out, if special token in count-column
+                     (setq count-special (format "%d" 
+                                                 (- 2
+                                                    (length (member count-field '(":missing:" ":reuse:"))))))
+                   
+                     ;; Construct different sort-keys according to
+                     ;; requested sort column; prepend count-special to
+                     ;; sort special entries at bottom of table, append ref
+                     ;; as a secondary sort key
+                     (cond 
+
+                      ((eq sort-column 'count)
+                       (concat count-special
+                               (format 
+                                "%08d" 
+                                (string-to-number (or (org-index--get-field 'count)
+                                                      ""))) 
+                               ref))
+                    
+                      ((eq sort-column 'last-accessed)
+                       (concat count-special
+                               (org-index--get-field 'last-accessed) 
+                               " " 
+                               ref))
+                    
+                      ((eq sort-column 'ref)
+                       (concat count-special
+                               ref))
+                    
+                      (t (error "This is a bug: unmatched case '%s'" sort-column)))))
+               
+                 nil 'string<)))
+    
+  ;; align table
+  (org-table-align)) 
+
+
+(defun org-index--go-below-hline ()
+
+  ;; go to heading of node
+  (while (not (org-at-heading-p)) (forward-line -1))
+  (forward-line 1)
+  ;; go to table within node, but make sure we do not get into another node
+  (while (and (not (org-at-heading-p))
+              (not (org-at-table-p))
+              (not (eq (point) (point-max)))) 
+    (forward-line 1))
+  
+  ;; check, if there really is a table
+  (unless (org-at-table-p)
+    (org-index--create-new-index 
+     t
+     (format "Cannot find index table within node %s" org-index-id)))
+
+  ;; go to first hline
+  (while (and (not (org-at-table-hline-p))
+              (org-at-table-p))
+    (forward-line 1))
+  
+  ;; and check
+  (unless (org-at-table-hline-p)
+    (org-index--create-new-index 
+     nil 
+     "Cannot find hline within index table"))      
+
+  (forward-line 1)
+  (org-table-goto-column 1))
+
+
+
+(defun org-index--parse-headings (numcols)
+
+  (let (columns)
+
+    ;; Associate names of special columns with column-numbers
+    (setq columns (copy-tree '((ref . 0) (link . 0) (created . 0) (last-accessed . 0) 
+                               (count . 0) (sort . nil) (copy . nil))))
+
+    ;; For each column
+    (dotimes (col numcols)
+      (let* (field-flags ;; raw heading, consisting of file name and maybe
+                         ;; flags (seperated by ";")
+             field       ;; field name only
+             field-symbol ;; and as a symbol
+             flags       ;; flags from field-flags
+             found)
+
+        ;; parse field-flags into field and flags
+        (setq field-flags (org-trim (org-table-get-field (+ col 1))))
+        (if (string-match "^\\([^;]*\\);\\([a-z]+\\)$" field-flags)
+            (progn 
+              (setq field (downcase (or (match-string 1 field-flags) "")))
+              ;; get flags as list of characters
+              (setq flags (mapcar 'string-to-char 
+                                  (split-string 
+                                   (downcase (match-string 2 field-flags)) 
+                                   "" t))))
+          ;; no flags
+          (setq field field-flags))
+
+        (unless (string= field "") (setq field-symbol (intern (downcase field))))
+
+        ;; Check, that no flags appear twice
+        (mapc (lambda (x)
+                (when (memq (car x) flags)
+                  (if (cdr (assoc (cdr x) columns))
+                      (org-index--create-new-index 
+                       nil
+                       (format "More than one heading is marked with flag '%c'" (car x))))))
+              '((?s . sort)
+                (?c . copy)))
+        
+        ;; Process flags
+        (if (memq ?s flags)
+            (setcdr (assoc 'sort columns) field-symbol))
+        (if (memq ?c flags)
+            (setcdr (assoc 'copy columns) (+ col 1)))
+        
+        ;; Store columns in alist
+        (setq found (assoc field-symbol columns))
+        (when found
+          (if (> (cdr found) 0) 
+              (org-index--create-new-index 
+               nil
+               (format "'%s' appears two times as column heading" (downcase field))))
+          (setcdr found (+ col 1)))))
+
+    ;; check if all necessary informations have been specified
+    (mapc (lambda (col) 
+            (unless (> (cdr (assoc col columns)) 0)
+              (org-index--create-new-index 
+               nil
+               (format "column '%s' has not been set" col))))
+          '(ref link count created last-accessed))
+
+    ;; use ref as a default sort-column
+    (unless (cdr (assoc 'sort columns))
+      (setcdr (assoc 'sort columns) 'ref))
+    columns))
+
+
+
+(defun org-index--create-new-index (create-new-index reason)
+  "Create a new empty index table with detailed explanation."
+  (let (prompt buffer-name title firstref id)
+
+    (setq prompt
+          (if create-new-index
+              (concat "There is this problem with the existing index table:\n\n   " reason "\n\nThis assistant will guide you to create a new one.\n\nDo you want to proceed ?")        
+            (concat "The existing index table contains this error:\n\n   " reason "\n\nYou need to correct this error manually before proceeding. However, this assistant will help you to create an new initial index table with detailed comments, so that you may fix the errors in your existing table more easily.\n\nDo you want to proceed ?")))
+    
+    (unless (y-or-n-p prompt) 
+      (message "Cannot proceed without a valid index table: %s" reason)
+      ;; show existing index
+      (when (and org-index--buffer
+                 org-index--point)
+        (org-pop-to-buffer-same-window org-index--buffer)
+        (goto-char org-index--point)
+        (org-show-context)
+        (show-subtree)
+        (recenter 1)
+        (delete-other-windows))
+      (throw 'created-new-index nil))
+  
+    (setq buffer-name (org-completing-read "Please choose the buffer, where the new node for the index table should be created; the new node will be inserted at its end.\n\nBuffer: " (mapcar 'buffer-name (org-buffer-list)) nil nil))
+
+    (setq title (read-from-minibuffer "Please enter the title of the index node: "))
+
+    (while (progn
+             (setq firstref (read-from-minibuffer "Please enter your first reference-number. This is a number preceeded by some non-digit chars and optionally followed by some more non-digit chars, e.g. 'R1', '-1-' or '#1#' (and your initial number does not need to be '1'). The format of your reference-numbers only needs to make sense for yourself, so that you can spot it easily in your texts or write it on a piece of paper; it should however not already appear to frequently within your existing notes, to avoid too many false hits when searching.\n\nPlease choose: "))
+             (if (string-match "^[^0-9]+[0-9]+[^0-9]*$" firstref)
+                 nil
+               (let (desc)
+                 ;; firstref not okay, report details
+                 (setq desc
+                       (cond ((string= firstref "") "is empty") 
+                             ((not (string-match "^[^0-9]+" firstref)) "starts with a digit")
+                             ((not (string-match "^[^0-9]+[0-9]+" firstref)) "does not contain a number")
+                             ((not (string-match "^[^0-9]+[0-9]+[^0-9]*$" firstref)) "contains more than one sequence of digits")))
+                 (read-from-minibuffer (format "Your input '%s' does not meet the requirements because it %s. Please hit RET and try again " firstref desc)))
+               t)))
+
+    (with-current-buffer buffer-name
+      (goto-char (point-max))
+      (insert (format "\n\n* %s %s\n" firstref title))
+      (insert "\n\n  Below you find your initial index table, which will grow over time.\n"
+              "  Following that your may read its detailed explanation, which will help you,\n"
+              "  to adopt org-index to your needs. This however is optional reading and not\n" 
+              "  required to start using org-index.\n\n")
+
+      (setq id (org-id-get-create))
+      (insert (format "
+
+  |     |      |         |         |               | comment |
+  | ref | link | created | count;s | last-accessed | ;c      |
+  |     | <4>  |         |         |               |         |
+  |-----+------+---------+---------+---------------+---------|
+  | %s  | %s   | %s      |         |               | %s      |
+
+" 
+                      firstref
+                      id
+                      (with-temp-buffer (org-insert-time-stamp nil nil t))
+                      "This node"))
+
+
+      (insert "
+
+  Detailed explanation:
+
+
+  The index table above has three lines of headings above the first
+  hline:
+
+  - The first one is ignored by org-index, and you can use it to
+    give meaningful names to columns. In the table above only one
+    column has a name (\"comment\"). This line is optional.
+
+  - The second line is the most important one, because it
+    contains the configuration information for org-index; please
+    read further below for its format.
+
+  - The third line is again optional; it may only specify the
+    widths of the individual columns (e.g. <4>).
+
+  The columns get their meaning by the second line of headings;
+  specifically by one of the keywords (e.g. \"ref\") or a flag
+  seperated by a semicolon (e.g. \";s\").
+
+
+
+  The keywords and flags are:
+
+
+  - ref: This contains the reference, which consists of a decorated
+    number, which is incremented for each new line. References are
+    meant to be used in org-mode headlines or outside of org´,
+    e.g. within folder names.
+
+  - link: org-mode link pointing to the matching location within org.
+
+  - created: When has this line been created ?
+
+  - count: How many times has this line accessed ? The trailing
+    flag \"s\" makes the table beeing sorted after
+    this column, so that often used entries appear at the top of
+    the table.
+
+  - last-accessed: When has this line ben accessed
+
+  - The last column above has no keyword, only the flag \"c\",
+    which makes its content beeing copied under certain
+    conditions. It is typically used for comments.
+
+  The sequence of columns does not matter. You may reorder them any
+  way you like. Columns are found by their name, which appears in
+  the second line of headings.
+
+  You can add further columns or even remove the last column. All
+  other columns are required.
+
+
+  Finally: This node needs not be a top level node; its name is
+  completely at you choice; it is found through its ID only.
+
+")
+
+
+      (while (not (org-at-table-p)) (forward-line -1))
+      (org-table-align)
+      (while (not (org-at-heading-p)) (forward-line -1))
+      
+      ;; present results to user
+      (if (and (not create-new-index)
+               org-index--buffer
+               org-index--point)
+          
+          ;; we had an error with the existing table, so present old and new one
+          (progn
+            ;; show existing index
+            (org-pop-to-buffer-same-window org-index--buffer)
+            (goto-char org-index--point)
+            (org-show-context)
+            (show-subtree)
+            (recenter 1)
+            (delete-other-windows)
+            ;; show new index
+            (select-window (split-window-vertically))
+            (org-pop-to-buffer-same-window buffer-name)
+            (org-id-goto id)
+            (org-show-context)    
+            (show-subtree)
+            (recenter 1)
+            (message "Please compare your existing index (upper window) and a temporary new one (lower window) to correct the previous error (\"%s\"); the explanations following the new index table should help." reason))
+
+        ;; Only show the new index
+        (org-pop-to-buffer-same-window buffer-name)
+        (delete-other-windows)
+        (org-id-goto id)
+        (org-show-context)    
+        (show-subtree)
+        (recenter 1)
+        (setq org-index-id id)
+        (if (y-or-n-p "This is your new index table; Do you want to save its id to make it permanent ? ")
+            (progn
+              (customize-save-variable 'org-index-id id)
+              (message "Saved org-index-id '%s' to %s" org-index-id custom-file))
+          (let (sq)
+            (setq sq (format "(setq org-index-id \"%s\")" org-index-id))
+            (kill-new sq)
+            (message "Did not make the id of the new index permamanent; you may want to put\n\n   %s\n\ninto your own initialization; it is copied already, just yank it." sq)))))
+    ;; cannot handle this situation in higher code, but do not want to finish with an error
+    (throw 'created-new-index nil)))
+
+
+
+
+(defun org-index--update-line (ref-or-link)
+
+  (let (initial
+        found
+        count-field)
+
+    (with-current-buffer org-index--buffer
+      
+      ;; search reference or link, if given (or assume, that we are already positioned right)
+      (when ref-or-link
+        (setq initial (point))
+        (goto-char org-index--below-hline)
+        (while (and (org-at-table-p)
+                    (not (or (string= ref-or-link (org-index--get-field 'ref))
+                             (string= ref-or-link (org-index--get-field 'link)))))
+          (forward-line)))
+      
+      (if (not (org-at-table-p))
+          (error "Did not find reference or link '%s'" ref-or-link)
+        (setq count-field (org-index--get-field 'count))
+
+        ;; update count field only if number or empty; leave :missing: and :reuse: as is
+        (if (or (not count-field)
+                (string-match "^[0-9]+$" count-field))
+            (org-index--get-field 'count
+                                    (number-to-string 
+                                     (+ 1 (string-to-number (or count-field "0"))))))
+
+        ;; update timestamp
+        (org-table-goto-column (org-index--column-num 'last-accessed))
+        (org-table-blank-field)
+        (org-insert-time-stamp nil t t)
+
+        (setq found t))
+      
+      (if initial (goto-char initial))
+      
+      found)))
+
+
+
+(defun org-index--get-field (key &optional value)
+  (let (field)
+    (setq field (org-trim (org-table-get-field (cdr (assoc key org-index--columns)) value)))
+    (if (string= field "") (setq field nil))
+    
+    field))
+
+
+(defun org-index--column-num (key)
+  (cdr (assoc key org-index--columns)))
+
+
+(defun org-index--make-guarded-search (ref &optional dont-quote)
+  (concat "\\b" (if dont-quote ref (regexp-quote ref)) "\\b"))
+
+
+(defun org-index-get-ref-regex-format ()
+  "return cons-cell with regular expression and format for references"
+  (unless org-index--ref-regex
+    (org-index-1 'parse))
+  (cons (org-index--make-guarded-search org-index--ref-regex 'dont-quote) org-index--ref-format))
+  
+
+(defun org-index--do-occur (initial-search)
+  (let (
+        (occur-buffer-name "*org-index-occur*")
+        (word "") ; last word to search for growing and shrinking on keystrokes
+        (prompt "Search for: ")
+        words     ; list of other words that must match too
+        occur-buffer 
+        lines-to-show                 ; number of lines to show in window
+        start-of-lines                ; position, where lines begin
+        left-off-at                   ; stack of last positions in index table
+        after-inserted                ; in occur-buffer
+        lines-visible                 ; in occur-buffer
+        below-hline-bol               ; below-hline and at bol
+        exit-gracefully               ; true if normal exit
+        in-c-backspace                ; true while processing C-backspace
+        ret from to key)
+        
+    ;; clear buffer
+    (if (get-buffer "*org-index-occur*")
+        (kill-buffer occur-buffer-name))
+    (setq occur-buffer (get-buffer-create "*org-index-occur*"))
+
+    (with-current-buffer org-index--buffer
+      (let ((initial (point)))
+        (goto-char org-index--below-hline)
+        (forward-line 0)
+        (setq below-hline-bol (point))
+        (goto-char initial)))
+    
+    (org-pop-to-buffer-same-window occur-buffer)
+    (toggle-truncate-lines 1)
+
+    (unwind-protect          ; to reset cursor-shape even in case of errors
+        (progn
+          
+          ;; fill in header
+          (erase-buffer)
+          (insert (concat "Incremental search, showing one window of matches.\n"
+                          "Use DEL and C-DEL to erase, cursor keys to move, RET to find heading.\n\n"))
+          (setq start-of-lines (point))
+          (setq cursor-type 'hollow)
+          
+          ;; get window size of occur-buffer as number of lines to be searched
+          (setq lines-to-show (+ (- (window-body-height) (line-number-at-pos)) 1))
+          
+
+          ;; fill initially
+          (setq ret (org-index--get-matching-lines nil lines-to-show below-hline-bol))
+          (when (car ret)
+            (insert (cdr ret))
+            (setq left-off-at (cons (car ret) nil))
+            (setq after-inserted (cons (point) nil)))
+
+          ;; read keys
+          (while 
+              (progn
+                (goto-char start-of-lines)
+                (setq lines-visible 0)
+                
+                ;; use initial-search (if present) to simulate keyboard input
+                (if (and initial-search 
+                         (> (length initial-search) 0))
+                    (progn 
+                      (setq key (string-to-char (substring initial-search 0 1)))
+                      (if (length initial-search) 
+                          (setq initial-search (substring initial-search 1))))
+                  (if in-c-backspace 
+                      (setq key 'backspace)
+                    (setq key (read-event
+                               (format "%s %s" 
+                                       prompt 
+                                       (mapconcat 'identity (reverse (cons word words)) ","))))
+
+                    (setq exit-gracefully (memq key (list 'return 'up 'down 'left 'right)))))
+                
+                (not exit-gracefully))
+            
+            (cond 
+
+             ((eq key 'C-backspace)
+
+              (setq in-c-backspace t))
+
+             ((eq key 'backspace)              ; erase last char
+
+              (if (= (length word) 0)
+
+                  ;; nothing more to delete
+                  (setq in-c-backspace nil)
+
+                ;; unhighlight longer match
+                (let ((case-fold-search t))
+                (unhighlight-regexp (regexp-quote word)))
+
+                ;; chars left shorten word
+                (setq word (substring word 0 -1))
+                (when (= (length word) 0) ; when nothing left, use next word from list
+                  (setq word (car words))
+                  (setq words (cdr words))
+                  (setq in-c-backspace nil))
+                
+                ;; remove everything, that has been added for char just deleted
+                (when (cdr after-inserted)
+                  (setq after-inserted (cdr after-inserted))
+                  (goto-char (car after-inserted))
+                  (delete-region (point) (point-max)))
+
+                ;; back up last position in index table too
+                (when (cdr left-off-at) 
+                  (setq left-off-at (cdr left-off-at)))
+
+                ;; go through buffer and check, if any invisible line should now be shown
+                (goto-char start-of-lines)
+                (while (< (point) (point-max))
+                  (if (outline-invisible-p)
+                      (progn
+                        (setq from (line-beginning-position) 
+                              to (line-beginning-position 2))
+
+                        ;; check for matches
+                        (when (org-index--test-words (cons word words) (buffer-substring from to))
+                          (when (<= lines-visible lines-to-show) ; show, if more lines required
+                            (outline-flag-region from to nil) 
+                            (incf lines-visible))))
+
+                    ;; already visible, just count
+                    (incf lines-visible))
+
+                  (forward-line 1))
+
+                ;; highlight shorter word
+                (unless (= (length word) 0)
+                  (let ((case-fold-search t))
+                    (highlight-regexp (regexp-quote word) 'isearch)))))
+
+
+             ((eq key ?,)         ; comma: enter an additional search word
+
+              ;; push current word and clear, no need to change display
+              (setq words (cons word words))
+              (setq word ""))
+
+
+             ((and (characterp key)
+                   (aref printable-chars key)) ; any other char: add to current search word
+
+
+              ;; unhighlight short word
+              (unless (= (length word) 0)
+                (let ((case-fold-search t))
+                  (unhighlight-regexp (regexp-quote word))))
+
+              ;; add to word
+              (setq word (concat word (downcase (string key))))
+
+              ;; hide lines, that do not match longer word any more
+              (while (< (point) (point-max))
+                (unless (outline-invisible-p)
+                  (setq from (line-beginning-position) 
+                        to (line-beginning-position 2))
+
+                  ;; check for matches
+                  (if (org-index--test-words (list word) (buffer-substring from to))
+                      (incf lines-visible)            ; count as visible
+                    (outline-flag-region from to t))) ; hide
+
+                (forward-line 1))
+
+              ;; duplicate top of stacks; eventually overwritten below
+              (setq left-off-at (cons (car left-off-at) left-off-at))
+              (setq after-inserted (cons (car after-inserted) after-inserted))
+
+              ;; get new lines from index table
+              (when (< lines-visible lines-to-show)
+                (setq ret (org-index--get-matching-lines (cons word words) 
+                                                            (- lines-to-show lines-visible) 
+                                                            (car left-off-at)))
+
+                (when (car ret)
+                  (insert (cdr ret))
+                  (setcar left-off-at (car ret))
+                  (setcar after-inserted (point))))
+
+              ;; highlight longer word
+              (let ((case-fold-search t))
+                (highlight-regexp (regexp-quote word) 'isearch)))))
+          
+          ;; search is done collect and brush up results
+          ;; remove any lines, that are still invisible
+          (goto-char start-of-lines)
+          (while (< (point) (point-max))
+            (if (outline-invisible-p)
+                (delete-region (line-beginning-position) (line-beginning-position 2))
+              (forward-line 1)))
+
+          ;; get all the rest
+          (message "Getting all matches ...")
+          (setq ret (org-index--get-matching-lines (cons word words) 0 (car left-off-at)))
+          (message "done.")
+          (insert (cdr ret)))
+      
+      ;; postprocessing even for non graceful exit
+      (setq cursor-type t)
+      ;; replace previous heading
+      (let ((numlines (count-lines (point) start-of-lines)))
+        (goto-char start-of-lines)
+        (forward-line -1)
+        (delete-region (point-min) (point))
+        (insert (format  (concat (if exit-gracefully 
+                                     "Search is done; showing all %d matches.\n"
+                                   "Search aborted; showing only some matches.\n")
+                                 "Use cursor keys to move, press RET to find heading.\n")
+                         numlines)))
+      (forward-line))
+
+    ;; install keyboard-shortcuts within occur-buffer
+    (let ((keymap (make-sparse-keymap))
+          fun-on-ret)
+      (set-keymap-parent keymap text-mode-map)
+
+      (setq fun-on-ret (lambda () (interactive) 
+                         (let ((ref (org-index--get-field 'ref)) 
+                               (link (org-index--get-field 'link)))
+                           (org-index-1 'head
+                                         (or link ref) ;; prefer link
+                                         (if link t nil)))))      
+
+      (define-key keymap (kbd "RET") fun-on-ret)
+      (use-local-map keymap)
+    
+      ;; perform action according to last char
+      (cond 
+       ((eq key 'return)
+        (funcall fun-on-ret))
+
+       ((eq key 'up)
+         (forward-line -1))
+
+       ((eq key 'down)
+         (forward-line 1))
+
+       ((eq key 'left)
+         (forward-char -1))
+
+       ((eq key 'right)
+         (forward-char 1))))))
+
+
+(defun org-index--get-matching-lines (words numlines start-from)
+  (let ((numfound 0)
+        pos
+        initial line lines)
+    
+    (with-current-buffer org-index--buffer
+
+      ;; remember initial pos and start at requested
+      (setq initial (point))
+      (goto-char start-from) 
+      
+      ;; loop over buffer until we have found enough lines
+      (while (and (or (< numfound numlines)
+                      (= numlines 0))
+                  (org-at-table-p))
+
+        ;; check each word
+        (setq line (buffer-substring (line-beginning-position) (line-beginning-position 2)))
+        (when (org-index--test-words words line) 
+          (setq lines (concat lines line))
+          (incf numfound))
+        (forward-line 1)
+        (setq pos (point)))
+
+      ;; return to initial position
+      (goto-char initial))
+
+    (unless lines (setq lines ""))
+    (cons pos lines)))
+
+
+(defun org-index--test-words (words line)
+  (let ((found-all t))
+    (setq line (downcase line))
+    (catch 'not-found
+        (dolist (w words)
+          (or (search w line)
+              (throw 'not-found nil)))
+        t)))
+
+
+(defadvice org-mark-ring-goto (after org-index--advice-text-to-yank activate)
+  "Make text from org-index available for yank."
+  (when org-index--text-to-yank
+      (kill-new org-index--text-to-yank)
+      (message (format "Ready to yank '%s'" org-index--text-to-yank))
+      (setq org-index--text-to-yank nil)))
+
+
+(provide 'org-index)
+
+;; Local Variables:
+;; fill-column: 75
+;; comment-column: 50
+;; End:
+
+;;; org-index.el ends here
index 2ff6711..ebcff75 100644 (file)
@@ -593,13 +593,13 @@ applications and inserting them in org documents"
 (org-add-link-type "mac-outlook" 'org-mac-outlook-message-open)
 
 (defun org-mac-outlook-message-open (msgid)
-  "Open a message in outlook"
-  (let* ((record-id-string (format "mdfind com_microsoft_outlook_recordID==%s" msgid))
-       (found-message (replace-regexp-in-string "\n$" ""
-              (shell-command-to-string record-id-string))))
-    (if (string= found-message "")
-      (message "org-mac-link: error could not find Outlook message %s"         (substring-no-properties msgid))
-      (shell-command (format "open \"`mdfind com_microsoft_outlook_recordID==%s`\"" msgid)))))
+  "Open a message in Outlook"
+  (do-applescript
+   (concat
+    "tell application \"Microsoft Outlook\"\n"
+     (format "open message id %s\n" (substring-no-properties msgid))
+     "activate\n"
+     "end tell")))
 
 (defun org-as-get-selected-outlook-mail ()
   "AppleScript to create links to selected messages in Microsoft Outlook.app."
index 150d36c..c87c23e 100644 (file)
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 2012 Sébastien Delafond
 
-;; Author: Sébastien Delafond <sdelafond at gmx dot net>
+;; Author: Sébastien Delafond <sdelafond@gmail.com>
 ;; Keywords: outlines, confluence, wiki
 
 ;; This file is not part of GNU Emacs.
@@ -45,7 +45,9 @@
                     (footnote-reference . org-confluence-empty)
                     (headline . org-confluence-headline)
                     (italic . org-confluence-italic)
+                     (item . org-confluence-item)
                     (link . org-confluence-link)
+                    (property-drawer . org-confluence-property-drawer)
                     (section . org-confluence-section)
                     (src-block . org-confluence-src-block)
                     (strike-through . org-confluence-strike-through)
 (defun org-confluence-italic (italic contents info)
   (format "_%s_" contents))
 
+(defun org-confluence-item (item contents info)
+  (concat (make-string (1+ (org-confluence--li-depth item)) ?\-)
+          " "
+          (org-trim contents)))
+
 (defun org-confluence-fixed-width (fixed-width contents info)
   (format "\{\{%s\}\}" contents))
 
              (t
               raw-link))
             "]")))
+
+(defun org-confluence-property-drawer (property-drawer contents info)
+  (and (org-string-nw-p contents)
+       (format "\{\{%s\}\}" contents)))
+
 (defun org-confluence-section (section contents info)
   contents)
 
           contents
           "\{code\}\n"))
 
+(defun org-confluence--li-depth (item)
+  "Return depth of a list item; -1 means not a list item"
+  ;; FIXME check whether it's worth it to cache depth
+  ;;       (it gets recalculated quite a few times while
+  ;;       traversing a list)
+  (let ((depth -1)
+        (tag))
+    (while (and item
+                (setq tag (car item))
+                (or (eq tag 'item) ; list items interleave with plain-list
+                    (eq tag 'plain-list)))
+      (when (eq tag 'item)
+        (incf depth))
+      (setq item (org-export-get-parent item)))
+    depth))
+
 ;; main interactive entrypoint
 (defun org-confluence-export-as-confluence
   (&optional async subtreep visible-only body-only ext-plist)
index aafd714..801bda1 100644 (file)
@@ -520,7 +520,7 @@ Return output file's name."
   (let* ((extension (concat ".mm" ))
         (file (org-export-output-file-name extension subtreep))
         (org-export-coding-system 'utf-8))
-    (org-export-to-file 'freemind ,file
+    (org-export-to-file 'freemind file
       async subtreep visible-only body-only ext-plist)))
 
 (provide 'ox-freemind)
index 9a4fed1..245b67d 100644 (file)
     (keyword . org-groff-keyword)
     (line-break . org-groff-line-break)
     (link . org-groff-link)
+    (node-property . org-groff-node-property)
     (paragraph . org-groff-paragraph)
     (plain-list . org-groff-plain-list)
     (plain-text . org-groff-plain-text)
     (planning . org-groff-planning)
-    (property-drawer . (lambda (&rest args) ""))
+    (property-drawer . org-groff-property-drawer)
     (quote-block . org-groff-quote-block)
     (quote-section . org-groff-quote-section)
     (radio-target . org-groff-radio-target)
@@ -1316,6 +1317,17 @@ INFO is a plist holding contextual information.  See
      ;; No path, only description.  Try to do something useful.
      (t (format org-groff-link-with-unknown-path-format desc)))))
 
+;;; Node Property
+
+(defun org-groff-node-property (node-property contents info)
+  "Transcode a NODE-PROPERTY element from Org to Groff.
+CONTENTS is nil.  INFO is a plist holding contextual
+information."
+  (format "%s:%s"
+          (org-element-property :key node-property)
+          (let ((value (org-element-property :value node-property)))
+            (if value (concat " " value) ""))))
+
 ;;; Paragraph
 
 (defun org-groff-paragraph (paragraph contents info)
@@ -1426,6 +1438,15 @@ information."
     "")
    ""))
 
+;;;; Property Drawer
+
+(defun org-groff-property-drawer (property-drawer contents info)
+  "Transcode a PROPERTY-DRAWER element from Org to Groff.
+CONTENTS holds the contents of the drawer.  INFO is a plist
+holding contextual information."
+  (and (org-string-nw-p contents)
+       (format "\\fC\n%s\\fP" contents)))
+
 ;;; Quote Block
 
 (defun org-groff-quote-block (quote-block contents info)
index 2777e02..2de1dbc 100644 (file)
@@ -204,10 +204,13 @@ publishing directory.
 Return output file name."
   (let ((bf (get-file-buffer filename)))
     (if bf
-       (with-current-buffer bf
-         (org-rss-add-pubdate-property)
-         (write-file filename))
+       (progn
+         (org-icalendar-create-uid filename 'warn-user)
+         (with-current-buffer bf
+           (org-rss-add-pubdate-property)
+           (write-file filename)))
       (find-file filename)
+      (org-icalendar-create-uid filename 'warn-user)
       (org-rss-add-pubdate-property)
       (write-file filename) (kill-buffer)))
   (org-publish-org-to
@@ -222,7 +225,10 @@ communication channel."
   (unless (or (org-element-property :footnote-section-p headline)
              ;; Only consider first-level headlines
              (> (org-export-get-relative-level headline info) 1))
-    (let* ((htmlext (plist-get info :html-extension))
+    (let* ((author (and (plist-get info :with-author)
+                       (let ((auth (plist-get info :author)))
+                         (and auth (org-export-data auth info)))))
+          (htmlext (plist-get info :html-extension))
           (hl-number (org-export-get-headline-number headline info))
           (hl-home (file-name-as-directory (plist-get info :html-link-home)))
           (hl-pdir (plist-get info :publishing-directory))
@@ -260,12 +266,13 @@ communication channel."
        "<item>\n"
        "<title>%s</title>\n"
        "<link>%s</link>\n"
+       "<author>%s</author>\n"
        "<guid isPermaLink=\"false\">%s</guid>\n"
        "<pubDate>%s</pubDate>\n"
        (org-rss-build-categories headline info) "\n"
        "<description><![CDATA[%s]]></description>\n"
        "</item>\n")
-       title publink guid pubdate contents))))
+       title publink author guid pubdate contents))))
 
 (defun org-rss-build-categories (headline info)
   "Build categories for the RSS item."
index 94f7ac3..9e64c52 100644 (file)
@@ -288,8 +288,8 @@ modify this GNU manual.''
 
 @subtitle Release @value{VERSION}
 @author by Carsten Dominik
-with contributions by David O'Toole, Bastien Guerry, Philip Rooke, Dan
-Davison, Eric Schulte, Thomas Dye, Jambunathan K and Nicolas Goaziou.
+with contributions by Bastien Guerry, Nicolas Goaziou, Eric Schulte,
+Jambunathan K, Dan Davison, Thomas Dye, David O'Toole, and Philip Rooke.
 
 @c The following two commands start the copyright page.
 @page
@@ -297,6 +297,9 @@ Davison, Eric Schulte, Thomas Dye, Jambunathan K and Nicolas Goaziou.
 @insertcopying
 @end titlepage
 
+@c Output the short table of contents at the beginning.
+@shortcontents
+
 @c Output the table of contents at the beginning.
 @contents
 
@@ -312,23 +315,23 @@ Davison, Eric Schulte, Thomas Dye, Jambunathan K and Nicolas Goaziou.
 
 @menu
 * Introduction::                Getting started
-* Document Structure::          A tree works like your brain
+* Document structure::          A tree works like your brain
 * Tables::                      Pure magic for quick formatting
 * Hyperlinks::                  Notes in context
-* TODO Items::                  Every tree branch can be a TODO item
+* TODO items::                  Every tree branch can be a TODO item
 * Tags::                        Tagging headlines and matching sets of tags
-* Properties and Columns::      Storing information about an entry
-* Dates and Times::             Making items useful for planning
+* Properties and columns::      Storing information about an entry
+* Dates and times::             Making items useful for planning
 * Capture - Refile - Archive::  The ins and outs for projects
-* Agenda Views::                Collecting information into views
+* Agenda views::                Collecting information into views
 * Markup::                      Prepare text for rich export
 * Exporting::                   Sharing and publishing notes
 * Publishing::                  Create a web site of linked Org files
-* Working With Source Code::    Export, evaluate, and tangle code blocks
+* Working with source code::    Export, evaluate, and tangle code blocks
 * Miscellaneous::               All the rest which did not fit elsewhere
 * Hacking::                     How to hack your way around
 * MobileOrg::                   Viewing and capture on a mobile device
-* History and Acknowledgments::  How Org came into being
+* History and acknowledgments::  How Org came into being
 * GNU Free Documentation License::  The license for this documentation.
 * Main Index::                  An index of Org's concepts and features
 * Key Index::                   Key bindings and where they are described
@@ -491,7 +494,7 @@ Capture - Refile - Archive
 
 * Capture::                     Capturing new stuff
 * Attachments::                 Add files to tasks
-* RSS Feeds::                   Getting input from RSS feeds
+* RSS feeds::                   Getting input from RSS feeds
 * Protocols::                   External (e.g., Browser) access to Emacs and Org
 * Refile and copy::             Moving/copying a tree from one place to another
 * Archiving::                   What to do with finished projects
@@ -521,7 +524,7 @@ Agenda views
 * Presentation and sorting::    How agenda items are prepared for display
 * Agenda commands::             Remote editing of Org trees
 * Custom agenda views::         Defining special searches and views
-* Exporting Agenda Views::      Writing a view to a file
+* Exporting agenda views::      Writing a view to a file
 * Agenda column view::          Using column view for collected entries
 
 The built-in agenda views
@@ -544,7 +547,7 @@ Custom agenda views
 
 * Storing searches::            Type once, use often
 * Block agenda::                All the stuff you need in a single buffer
-* Setting Options::             Changing the rules
+* Setting options::             Changing the rules
 
 Markup for rich export
 
@@ -579,7 +582,7 @@ Embedded @LaTeX{}
 
 Exporting
 
-* The Export Dispatcher::       The main exporter interface
+* The export dispatcher::       The main exporter interface
 * Export back-ends::            Built-in export formats
 * Export settings::             Generic export settings
 * ASCII/Latin-1/UTF-8 export::  Exporting to flat files with encoding
@@ -587,7 +590,7 @@ Exporting
 * HTML export::                 Exporting to HTML
 * @LaTeX{} and PDF export::     Exporting to @LaTeX{}, and processing to PDF
 * Markdown export::             Exporting to Markdown
-* OpenDocument Text export::    Exporting to OpenDocument Text
+* OpenDocument text export::    Exporting to OpenDocument Text
 * iCalendar export::            Exporting to iCalendar
 * Other built-in back-ends::    Exporting to @code{Texinfo}, a man page, or Org
 * Export in foreign buffers::   Author tables in lists in Org syntax
@@ -614,7 +617,7 @@ HTML export
 * Quoting @LaTeX{} code::       Incorporating literal @LaTeX{} code
 * @LaTeX{} specific attributes::  Controlling @LaTeX{} output
 
-OpenDocument Text export
+OpenDocument text export
 
 * Pre-requisites for ODT export::  What packages ODT exporter relies on
 * ODT export commands::         How to invoke ODT export
@@ -689,14 +692,14 @@ Using header arguments
 * System-wide header arguments::  Set global default values
 * Language-specific header arguments::  Set default values by language
 * Header arguments in Org mode properties::  Set default values for a buffer or heading
-* Language-specific header arguments in Org mode properties::  Set langugage-specific default values for a buffer or heading
+* Language-specific header arguments in Org mode properties::  Set language-specific default values for a buffer or heading
 * Code block specific header arguments::  The most common way to set values
 * Header arguments in function calls::  The most specific level
 
 Specific header arguments
 
 * var::                         Pass arguments to code blocks
-* results::                     Specify the type of results and how they will
+* Results::                     Specify the type of results and how they will
                                 be collected and handled
 * file::                        Specify a path for file output
 * file-desc::                   Specify a description for file results
@@ -732,7 +735,7 @@ Specific header arguments
 Miscellaneous
 
 * Completion::                  M-TAB knows what you need
-* Easy Templates::              Quick insertion of structural elements
+* Easy templates::              Quick insertion of structural elements
 * Speed keys::                  Electric commands at the beginning of a headline
 * Code evaluation security::    Org mode files evaluate inline code
 * Customization::               Adapting Org to your taste
@@ -779,7 +782,7 @@ MobileOrg
 @end detailmenu
 @end menu
 
-@node Introduction, Document Structure, Top, Top
+@node Introduction
 @chapter Introduction
 @cindex introduction
 
@@ -791,76 +794,63 @@ MobileOrg
 * Conventions::                 Typesetting conventions in the manual
 @end menu
 
-@node Summary, Installation, Introduction, Introduction
+@node Summary
 @section Summary
 @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 notes, an Org file can be exported as a
-structured ASCII file, as HTML, or (TODO and agenda items only) as an
-iCalendar file.  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 @i{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:
-
-@example
-@r{@bullet{} an outline extension with visibility cycling and structure editing}
-@r{@bullet{} an ASCII system and table editor for taking structured notes}
-@r{@bullet{} a TODO list editor}
-@r{@bullet{} a full agenda and planner with deadlines and work scheduling}
-@pindex GTD, Getting Things Done
-@r{@bullet{} an environment in which to implement David Allen's GTD system}
-@r{@bullet{} a simple hypertext system, with HTML and @LaTeX{} export}
-@r{@bullet{} a publishing tool to create a set of interlinked web pages}
-@r{@bullet{} an environment for literate programming}
-@end example
+Org is a mode for keeping notes, maintaining TODO lists, and project planning
+with a fast and effective plain-text system.  It also is an authoring system
+with unique support for literate programming and reproducible research.
+
+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.  Plain text URL-like links connect to websites,
+emails, Usenet messages, BBDB entries, and any files related to the projects.
+
+Org develops organizational tasks around notes files that contain lists or
+information about projects as plain text.  Project planning and task
+management makes use of metadata which is part of an outline node.  Based on
+this data, specific entries can be extracted in queries and create dynamic
+@i{agenda views} that also integrate the Emacs calendar and diary.  Org can
+be used to implement many different project planning schemes, such as David
+Allen's GTD system.
+
+Org files can serve as a single source authoring system with export to many
+different formats such as HTML, @LaTeX{}, Open Document, and Markdown.  New
+export backends can be derived from existing ones, or defined from scratch.
+
+Org files can include source code blocks, which makes Org uniquely suited for
+authoring technical documents with code examples. Org source code blocks are
+fully functional; they can be evaluated in place and their results can be
+captured in the file.  This makes it possible to create a single file
+reproducible research compendium.
+
+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 needed.  Org is a toolbox.
+Many users usilize only a (very personal) fraction of Org's capabilities, and
+know that there is more whenever they need it.
+
+All of this is achieved with strictly plain text files, the most portable and
+future-proof file format.  Org runs in Emacs.  Emacs is one of the most
+widely ported programs, so that Org mode is available on every major
+platform.
 
 @cindex FAQ
 There is a website for Org which provides links to the newest
 version of Org, as well as additional information, frequently asked
 questions (FAQ), links to tutorials, etc.  This page is located at
 @uref{http://orgmode.org}.
-
 @cindex print edition
-The version 7.3 of this manual is available as a
-@uref{http://www.network-theory.co.uk/org/manual/, paperback book from Network
-Theory Ltd.}
 
-@page
+An earlier version (7.3) of this manual is available as a
+@uref{http://www.network-theory.co.uk/org/manual/, paperback book from
+Network Theory Ltd.}
 
+@page
 
-@node Installation, Activation, Summary, Introduction
+@node Installation
 @section Installation
 @cindex installation
 @cindex XEmacs
@@ -933,7 +923,7 @@ For more detailed explanations on Org's build system, please check the Org
 Build System page on @uref{http://orgmode.org/worg/dev/org-build-system.html,
 Worg}.
 
-@node Activation, Feedback, Installation, Introduction
+@node Activation
 @section Activation
 @cindex activation
 @cindex autoload
@@ -967,15 +957,14 @@ suggested bindings for these keys, please modify the keys to your own
 liking.
 @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-cc" 'org-capture)
 (global-set-key "\C-cb" 'org-iswitchb)
 @end lisp
 
 @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:
+To turn on Org mode in a file that does not have the extension @file{.org},
+make the first line of a file look like this:
 
 @example
 MY PROJECTS    -*- mode: org; -*-
@@ -997,7 +986,7 @@ in Emacs 22 you need to do this yourself with
 active region by using the mouse to select a region, or pressing
 @kbd{C-@key{SPC}} twice before moving the cursor.
 
-@node Feedback, Conventions, Activation, Introduction
+@node Feedback
 @section Feedback
 @cindex feedback
 @cindex bug reports
@@ -1022,7 +1011,7 @@ version information of Emacs (@kbd{M-x emacs-version @key{RET}}) and Org
 @kbd{M-x org-submit-bug-report RET}
 @end example
 @noindent which will put all this information into an Emacs mail buffer so
-that you only need to add your description.  If you re not sending the Email
+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
@@ -1096,7 +1085,7 @@ screen.  Save this buffer to a file (for example using @kbd{C-x C-w}) and
 attach it to your bug report.
 @end enumerate
 
-@node Conventions,  , Feedback, Introduction
+@node Conventions
 @section Typesetting conventions used in this manual
 
 @subsubheading TODO keywords, tags, properties, etc.
@@ -1132,9 +1121,10 @@ templates insert lowercase keywords and Babel dynamically inserts
 @kindex C-c c
 @findex org-capture
 
-The manual suggests two global keybindings: @kbd{C-c a} for @code{org-agenda}
-and @kbd{C-c c} for @code{org-capture}.  These are only suggestions, but the
-rest of the manual assumes that you are using these keybindings.
+The manual suggests a few global keybindings, in particular @kbd{C-c a} for
+@code{org-agenda} and @kbd{C-c c} for @code{org-capture}.  These are only
+suggestions, but the rest of the manual assumes that these keybindings are in
+place in order to list commands by key access.
 
 Also, the manual lists both the keys and the corresponding commands for
 accessing a functionality.  Org mode often uses the same key for different
@@ -1147,7 +1137,7 @@ will be listed to call @code{org-table-move-column-right}.  If you prefer,
 you can compile the manual without the command names by unsetting the flag
 @code{cmdnames} in @file{org.texi}.
 
-@node Document Structure, Tables, Introduction, Top
+@node Document structure
 @chapter Document structure
 @cindex document structure
 @cindex structure of document
@@ -1170,7 +1160,7 @@ edit the structure of the document.
 * Org syntax::                  Formal description of Org's syntax
 @end menu
 
-@node Outlines, Headlines, Document Structure, Document Structure
+@node Outlines
 @section Outlines
 @cindex outlines
 @cindex Outline mode
@@ -1184,7 +1174,7 @@ 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.
 
-@node Headlines, Visibility cycling, Outlines, Document Structure
+@node Headlines
 @section Headlines
 @cindex headlines
 @cindex outline tree
@@ -1221,7 +1211,7 @@ least two empty lines, one empty line will remain visible after folding
 the subtree, in order to structure the collapsed view.  See the
 variable @code{org-cycle-separator-lines} to modify this behavior.
 
-@node Visibility cycling, Motion, Headlines, Document Structure
+@node Visibility cycling
 @section Visibility cycling
 @cindex cycling, visibility
 @cindex visibility cycling
@@ -1235,7 +1225,7 @@ variable @code{org-cycle-separator-lines} to modify this behavior.
 * Catching invisible edits::    Preventing mistakes when editing invisible parts
 @end menu
 
-@node Global and local cycling, Initial visibility, Visibility cycling, Visibility cycling
+@node Global and local cycling
 @subsection Global and local cycling
 
 Outlines make it possible to hide parts of the text in the buffer.
@@ -1325,7 +1315,7 @@ Copy the @i{visible} text in the region into the kill ring.
 * Catching invisible edits::    Preventing mistakes when editing invisible parts
 @end menu
 
-@node Initial visibility, Catching invisible edits, Global and local cycling, Visibility cycling
+@node Initial visibility
 @subsection Initial visibility
 
 @cindex visibility, initialize
@@ -1358,7 +1348,7 @@ the startup visibility, set @code{org-agenda-inhibit-startup} to @code{nil}.
 @cindex property, VISIBILITY
 @noindent
 Furthermore, any entries with a @samp{VISIBILITY} property (@pxref{Properties
-and Columns}) will get their visibility adapted accordingly.  Allowed values
+and columns}) will get their visibility adapted accordingly.  Allowed values
 for this property are @code{folded}, @code{children}, @code{content}, and
 @code{all}.
 
@@ -1369,7 +1359,7 @@ requested by startup options and @samp{VISIBILITY} properties in individual
 entries.
 @end table
 
-@node Catching invisible edits,  , Initial visibility, Visibility cycling
+@node Catching invisible edits
 @subsection Catching invisible edits
 
 @vindex org-catch-invisible-edits
@@ -1380,7 +1370,7 @@ confused on what has been edited and how to undo the mistake.  Setting
 docstring of this option on how Org should catch invisible edits and process
 them.
 
-@node Motion, Structure editing, Visibility cycling, Document Structure
+@node Motion
 @section Motion
 @cindex motion, between headlines
 @cindex jumping, to headlines
@@ -1420,7 +1410,7 @@ q            @r{Quit}
 See also the option @code{org-goto-interface}.
 @end table
 
-@node Structure editing, Sparse trees, Motion, Document Structure
+@node Structure editing
 @section Structure editing
 @cindex structure editing
 @cindex headline, promotion and demotion
@@ -1436,7 +1426,7 @@ See also the option @code{org-goto-interface}.
 @table @asis
 @orgcmd{M-@key{RET},org-insert-heading}
 @vindex org-M-RET-may-split-line
-Insert a new heading/item with the same level than the one at point.
+Insert a new heading/item with the same level as the one at point.
 If the cursor is in a plain list item, a new item is created
 (@pxref{Plain lists}).  To prevent this behavior in lists, call the
 command with a prefix argument.  When this command is used in the
@@ -1557,7 +1547,7 @@ inside a table (@pxref{Tables}), the Meta-Cursor keys have different
 functionality.
 
 
-@node Sparse trees, Plain lists, Structure editing, Document Structure
+@node Sparse trees
 @section Sparse trees
 @cindex sparse trees
 @cindex trees, sparse
@@ -1577,7 +1567,7 @@ variables @code{org-show-hierarchy-above}, @code{org-show-following-heading},
 control on how much context is shown around each match.}.  Just try it out
 and you will see immediately how it works.
 
-Org mode contains several commands creating such trees, all these
+Org mode contains several commands for creating such trees, all these
 commands can be accessed through a dispatcher:
 
 @table @asis
@@ -1630,7 +1620,7 @@ XEmacs uses selective display for outlining, not text properties.}.
 Or you can use @kbd{C-c C-e C-v} to export only the visible part of
 the document and print the resulting file.
 
-@node Plain lists, Drawers, Sparse trees, Document Structure
+@node Plain lists
 @section Plain lists
 @cindex plain lists
 @cindex lists, plain
@@ -1717,7 +1707,7 @@ blocks can be indented to signal that they belong to a particular item.
 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
 @code{org-list-demote-modify-bullet}.  To get a greater difference of
-indentation between items and theirs sub-items, customize
+indentation between items and their sub-items, customize
 @code{org-list-indent-offset}.
 
 @vindex org-list-automatic-rules
@@ -1838,20 +1828,17 @@ numerically, alphabetically, by time, by checked status for check lists,
 or by a custom function.
 @end table
 
-@node Drawers, Blocks, Plain lists, Document Structure
+@node Drawers
 @section Drawers
 @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 @emph{drawers}.
-Drawers need to be configured with the option @code{org-drawers}@footnote{You
-can define additional drawers on a per-file basis with a line like
-@code{#+DRAWERS: HIDDEN STATE}}.  Drawers look like this:
+normally don't want to see it.  For this, Org mode has @emph{drawers}.  They
+can contain anything but a headline and another drawer.  Drawers look like
+this:
 
 @example
 ** This is a headline
@@ -1873,10 +1860,11 @@ Visibility cycling (@pxref{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 @code{PROPERTIES} drawer for
-storing properties (@pxref{Properties and Columns}), and you can also arrange
+storing properties (@pxref{Properties and columns}), and you can also arrange
 for state change notes (@pxref{Tracking TODO state changes}) and clock times
 (@pxref{Clocking work time}) to be stored in a drawer @code{LOGBOOK}.  If you
-want to store a quick note in the LOGBOOK drawer, in a similar way to state changes, use
+want to store a quick note in the LOGBOOK drawer, in a similar way to state
+changes, use
 
 @table @kbd
 @kindex C-c C-z
@@ -1885,12 +1873,13 @@ Add a time-stamped note to the LOGBOOK drawer.
 @end table
 
 @vindex org-export-with-drawers
+@vindex org-export-with-properties
 You can select the name of the drawers which should be exported with
 @code{org-export-with-drawers}.  In that case, drawer contents will appear in
-export output.  Property drawers are not affected by this variable and are
-never exported.
+export output.  Property drawers are not affected by this variable: configure
+@code{org-export-with-properties} instead.
 
-@node Blocks, Footnotes, Drawers, Document Structure
+@node Blocks
 @section Blocks
 
 @vindex org-hide-block-startup
@@ -1909,7 +1898,7 @@ or on a per-file basis by using
 #+STARTUP: nohideblocks
 @end example
 
-@node Footnotes, Orgstruct mode, Blocks, Document Structure
+@node Footnotes
 @section Footnotes
 @cindex footnotes
 
@@ -2016,7 +2005,7 @@ Footnote labels are also links to the corresponding definition/reference, and
 you can use the usual commands to follow these links.
 @end table
 
-@node Orgstruct mode, Org syntax, Footnotes, Document Structure
+@node Orgstruct mode
 @section The Orgstruct minor mode
 @cindex Orgstruct mode
 @cindex minor mode for structure editing
@@ -2051,7 +2040,7 @@ Lisp files, you will be able to fold and unfold headlines in Emacs Lisp
 commented lines.  Some commands like @code{org-demote} are disabled when the
 prefix is set, but folding/unfolding will work correctly.
 
-@node Org syntax,  , Orgstruct mode, Document Structure
+@node Org syntax
 @section Org syntax
 @cindex Org syntax
 
@@ -2073,7 +2062,7 @@ abstract structure.  The export engine relies on the information stored in
 this list.  Most interactive commands (e.g., for structure editing) also
 rely on the syntactic meaning of the surrounding context.
 
-@node Tables, Hyperlinks, Document Structure, Top
+@node Tables
 @chapter Tables
 @cindex tables
 @cindex editing tables
@@ -2091,7 +2080,7 @@ calculations are supported using the Emacs @file{calc} package
 * Org-Plot::                    Plotting from org tables
 @end menu
 
-@node Built-in table editor, Column width and alignment, Tables, Tables
+@node Built-in table editor
 @section The built-in table editor
 @cindex table editor, built-in
 
@@ -2140,12 +2129,13 @@ unpredictable for you, configure the options
 @table @kbd
 @tsubheading{Creation and conversion}
 @orgcmd{C-c |,org-table-create-or-convert-from-region}
-Convert the active region to table.  If every line contains at least one
+Convert the active region to table.  If every line contains at least one
 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 TAB, and a numeric argument N indicates that at least N
+C-u} forces TAB, @kbd{C-u C-u C-u} will prompt for a regular expression to
+match the separator, and a numeric argument N indicates that at least N
 consecutive spaces, or alternatively a TAB will be the separator.
 @*
 If there is no active region, this command creates an empty Org
@@ -2307,7 +2297,7 @@ it off with
 @noindent Then the only table command that still works is
 @kbd{C-c C-c} to do a manual re-align.
 
-@node Column width and alignment, Column groups, Built-in table editor, Tables
+@node Column width and alignment
 @section Column width and alignment
 @cindex narrow columns in tables
 @cindex alignment in tables
@@ -2367,7 +2357,7 @@ also combine alignment and field width like this: @samp{<r10>}.
 Lines which only contain these formatting cookies will be removed
 automatically when exporting the document.
 
-@node Column groups, Orgtbl mode, Column width and alignment, Tables
+@node Column groups
 @section Column groups
 @cindex grouping columns in tables
 
@@ -2403,7 +2393,7 @@ every vertical line you would like to have:
 | /  | <   |     |     | <       |            |
 @end example
 
-@node Orgtbl mode, The spreadsheet, Column groups, Tables
+@node Orgtbl mode
 @section The Orgtbl minor mode
 @cindex Orgtbl mode
 @cindex minor mode for tables
@@ -2424,7 +2414,7 @@ construct @LaTeX{} tables with the underlying ease and power of
 Orgtbl mode, including spreadsheet capabilities.  For details, see
 @ref{Tables in arbitrary syntax}.
 
-@node The spreadsheet, Org-Plot, Orgtbl mode, Tables
+@node The spreadsheet
 @section The spreadsheet
 @cindex calculations, in tables
 @cindex spreadsheet capabilities
@@ -2453,7 +2443,7 @@ formula, moving these references by arrow keys
 * Advanced features::           Field and column names, parameters and automatic recalc
 @end menu
 
-@node References, Formula syntax for Calc, The spreadsheet, The spreadsheet
+@node References
 @subsection References
 @cindex references
 
@@ -2539,7 +2529,7 @@ format at least for the first field (i.e the reference must start with
 @example
 $1..$3        @r{first three fields in the current row}
 $P..$Q        @r{range, using column names (see under Advanced)}
-$<<<..$>>     @r{start in third column, continue to the one but last}
+$<<<..$>>     @r{start in third column, continue to the last but one}
 @@2$1..@@4$3    @r{6 fields between these two fields (same as @code{A2..C4})}
 @@-1$-2..@@-1   @r{3 fields in the row above, starting from 2 columns on the left}
 @@I..II        @r{between first and second hline, short for @code{@@I..@@II}}
@@ -2593,7 +2583,7 @@ line like
 @noindent
 @vindex constants-unit-system
 @pindex constants.el
-Also properties (@pxref{Properties and Columns}) can be used as
+Also properties (@pxref{Properties and columns}) can be used as
 constants in table formulas: for a property @samp{:Xyz:} use the name
 @samp{$PROP_Xyz}, and the property will be searched in the current
 outline entry and in the hierarchy above it.  If you have the
@@ -2632,7 +2622,7 @@ table in that entry.  REF is an absolute field or range reference as
 described above for example @code{@@3$3} or @code{$somename}, valid in the
 referenced table.
 
-@node Formula syntax for Calc, Formula syntax for Lisp, References, The spreadsheet
+@node Formula syntax for Calc
 @subsection Formula syntax for Calc
 @cindex formula syntax, Calc
 @cindex syntax, of formulas
@@ -2745,7 +2735,7 @@ should be padded with 0 to the full size.
 You can add your own Calc functions defined in Emacs Lisp with @code{defmath}
 and use them in formula syntax for Calc.
 
-@node Formula syntax for Lisp, Durations and time values, Formula syntax for Calc, The spreadsheet
+@node Formula syntax for Lisp
 @subsection Emacs Lisp forms as formulas
 @cindex Lisp forms, as table formulas
 
@@ -2781,7 +2771,7 @@ Add columns 1 and 2, equivalent to Calc's @code{$1+$2}.
 Compute the sum of columns 1 to 4, like Calc's @code{vsum($1..$4)}.
 @end table
 
-@node Durations and time values, Field and range formulas, Formula syntax for Lisp, The spreadsheet
+@node Durations and time values
 @subsection Durations and time values
 @cindex Duration, computing
 @cindex Time, computing
@@ -2800,7 +2790,7 @@ formulas or Elisp formulas:
 @end group
 @end example
 
-Input duration values must be of the form @code{[HH:MM[:SS]}, where seconds
+Input duration values must be of the form @code{HH:MM[:SS]}, where seconds
 are optional.  With the @code{T} flag, computed durations will be displayed
 as @code{HH:MM:SS} (see the first formula above).  With the @code{t} flag,
 computed durations will be displayed according to the value of the option
@@ -2811,7 +2801,7 @@ example above).
 Negative duration values can be manipulated as well, and integers will be
 considered as seconds in addition and subtraction.
 
-@node Field and range formulas, Column formulas, Durations and time values, The spreadsheet
+@node Field and range formulas
 @subsection Field and range formulas
 @cindex field formula
 @cindex range formula
@@ -2828,13 +2818,13 @@ current field will be replaced with the result.
 Formulas are stored in a special line starting with @samp{#+TBLFM:} directly
 below the table.  If you type the equation in the 4th field of the 3rd data
 line in the table, the formula will look like @samp{@@3$4=$1+$2}.  When
-inserting/deleting/swapping column and rows with the appropriate commands,
+inserting/deleting/swapping columns and rows with the appropriate commands,
 @i{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 @code{@@<}, @code{@@>}, @code{$<}, @code{$>}), or at hlines
-using the @code{@@I} notation.  Automatic adaptation of field references does
-of course not happen if you edit the table structure with normal editing
+modified in order to still reference the same field.  To avoid this, in
+particular in range references, anchor ranges at the table borders (using
+@code{@@<}, @code{@@>}, @code{$<}, @code{$>}), or at hlines using the
+@code{@@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
@@ -2867,7 +2857,7 @@ can also be used to assign a formula to some but not all fields in a row.
 Named field, see @ref{Advanced features}.
 @end table
 
-@node Column formulas, Lookup functions, Field and range formulas, The spreadsheet
+@node Column formulas
 @subsection Column formulas
 @cindex column formula
 @cindex formula, for table column
@@ -2891,7 +2881,7 @@ 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
+left-hand side of a column formula cannot be the name of column, it must be
 the numeric column reference or @code{$>}.
 
 Instead of typing an equation into the field, you may also use the
@@ -2906,7 +2896,7 @@ 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.
 @end table
 
-@node Lookup functions, Editing and debugging formulas, Column formulas, The spreadsheet
+@node Lookup functions
 @subsection Lookup functions
 @cindex lookup functions in tables
 @cindex table lookup functions
@@ -2950,7 +2940,7 @@ matching cells, rank results, group data etc.  For practical examples
 see @uref{http://orgmode.org/worg/org-tutorials/org-lookups.html, this
 tutorial on Worg}.
 
-@node Editing and debugging formulas, Updating the table, Lookup functions, The spreadsheet
+@node Editing and debugging formulas
 @subsection Editing and debugging formulas
 @cindex formula editing
 @cindex editing, of table formulas
@@ -3101,7 +3091,7 @@ turn on formula debugging in the @code{Tbl} menu and repeat the
 calculation, for example by pressing @kbd{C-u C-u C-c = @key{RET}} in a
 field.  Detailed information will be displayed.
 
-@node Updating the table, Advanced features, Editing and debugging formulas, The spreadsheet
+@node Updating the table
 @subsection Updating the table
 @cindex recomputing table fields
 @cindex updating, table
@@ -3138,7 +3128,7 @@ Iterate all tables in the current buffer, in order to converge table-to-table
 dependencies.
 @end table
 
-@node Advanced features,  , Updating the table, The spreadsheet
+@node Advanced features
 @subsection Advanced features
 
 If you want the recalculation of fields to happen automatically, or if you
@@ -3243,7 +3233,7 @@ functions.
 @end group
 @end example
 
-@node Org-Plot,  , The spreadsheet, Tables
+@node Org-Plot
 @section Org-Plot
 @cindex graph, in tables
 @cindex plot tables using Gnuplot
@@ -3328,7 +3318,7 @@ may still want to specify the plot type, as that can impact the content of
 the data file.
 @end table
 
-@node Hyperlinks, TODO Items, Tables, Top
+@node Hyperlinks
 @chapter Hyperlinks
 @cindex hyperlinks
 
@@ -3346,7 +3336,7 @@ other files, Usenet articles, emails, and much more.
 * Custom searches::             When the default search is not enough
 @end menu
 
-@node Link format, Internal links, Hyperlinks, Hyperlinks
+@node Link format
 @section Link format
 @cindex link format
 @cindex format, of links
@@ -3377,7 +3367,7 @@ missing bracket hides the link internals again.  To show the
 internal structure of all links, use the menu entry
 @code{Org->Hyperlinks->Literal links}.
 
-@node Internal links, External links, Link format, Hyperlinks
+@node Internal links
 @section Internal links
 @cindex internal links
 @cindex links, internal
@@ -3402,8 +3392,8 @@ a @i{dedicated target}: the same string in double angular brackets, like
 @cindex #+NAME
 If no dedicated target exists, the link will then try to match the exact name
 of an element within the buffer.  Naming is done with the @code{#+NAME}
-keyword, which has to be put the line before the element it refers to, as in
-the following example
+keyword, which has to be put in the line before the element it refers to, as
+in the following example
 
 @example
 #+NAME: My Target
@@ -3448,7 +3438,7 @@ earlier.
 * Radio targets::               Make targets trigger links in plain text
 @end menu
 
-@node Radio targets,  , Internal links, Internal links
+@node Radio targets
 @subsection Radio targets
 @cindex radio targets
 @cindex targets, radio
@@ -3464,7 +3454,7 @@ 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.
 
-@node External links, Handling links, Internal links, Hyperlinks
+@node External links
 @section External links
 @cindex links, external
 @cindex external links
@@ -3565,7 +3555,7 @@ 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.
 
-@node Handling links, Using links outside Org, External links, Hyperlinks
+@node Handling links
 @section Handling links
 @cindex links, handling
 
@@ -3639,7 +3629,7 @@ entry referenced by the current line.
 @cindex completion, of links
 @cindex inserting links
 @vindex org-keep-stored-link-after-insertion
-Insert a link@footnote{ Note that you don't have to use this command to
+Insert a link@footnote{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
@@ -3761,7 +3751,7 @@ to @kbd{C-n} and @kbd{C-p}
 @end lisp
 @end table
 
-@node Using links outside Org, Link abbreviations, Handling links, Hyperlinks
+@node Using links outside Org
 @section Using links outside Org
 
 You can insert and follow links that have Org syntax not only in
@@ -3774,7 +3764,7 @@ yourself):
 (global-set-key "\C-c o" 'org-open-at-point-global)
 @end lisp
 
-@node Link abbreviations, Search options, Using links outside Org, Hyperlinks
+@node Link abbreviations
 @section Link abbreviations
 @cindex link abbreviations
 @cindex abbreviation, links
@@ -3813,7 +3803,7 @@ 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
+If the replacement text doesn'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
@@ -3843,7 +3833,7 @@ complete link abbreviations.  You may also define a function
 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.
 
-@node Search options, Custom searches, Link abbreviations, Hyperlinks
+@node Search options
 @section Search options in file links
 @cindex search option in file links
 @cindex file links, searching
@@ -3895,7 +3885,7 @@ to search the current file.  For example, @code{[[file:::find me]]} does
 a search for @samp{find me} in the current file, just as
 @samp{[[find me]]} would.
 
-@node Custom searches,  , Search options, Hyperlinks
+@node Custom searches
 @section Custom Searches
 @cindex custom search strings
 @cindex search strings, custom
@@ -3919,7 +3909,7 @@ variables for more information.  Org actually uses this mechanism
 for Bib@TeX{} database files, and you can use the corresponding code as
 an implementation example.  See the file @file{org-bibtex.el}.
 
-@node TODO Items, Tags, Hyperlinks, Top
+@node TODO items
 @chapter TODO items
 @cindex TODO items
 
@@ -3944,7 +3934,7 @@ methods to give you an overview of all the things that you have to do.
 * Checkboxes::                  Tick-off lists
 @end menu
 
-@node TODO basics, TODO extensions, TODO Items, TODO Items
+@node TODO basics
 @section Basic TODO functionality
 
 Any headline becomes a TODO item when it starts with the word
@@ -4005,7 +3995,7 @@ N, show the tree for the Nth keyword in the option @code{org-todo-keywords}.
 With two prefix arguments, find all TODO states, both un-done and done.
 @orgcmd{C-c a t,org-todo-list}
 Show the global TODO list.  Collects the TODO items (with not-DONE states)
-from all agenda files (@pxref{Agenda Views}) into a single buffer.  The new
+from all agenda files (@pxref{Agenda views}) into a single buffer.  The new
 buffer will be in @code{agenda-mode}, which provides commands to examine and
 manipulate the TODO entries from the new buffer (@pxref{Agenda commands}).
 @xref{Global TODO list}, for more information.
@@ -4018,7 +4008,7 @@ Insert a new TODO entry below the current one.
 Changing a TODO state can also trigger tag changes.  See the docstring of the
 option @code{org-todo-state-tags-triggers} for details.
 
-@node TODO extensions, Progress logging, TODO basics, TODO Items
+@node TODO extensions
 @section Extended use of TODO keywords
 @cindex extended TODO keywords
 
@@ -4042,7 +4032,7 @@ TODO items in particular (@pxref{Tags}).
 * TODO dependencies::           When one task needs to wait for others
 @end menu
 
-@node Workflow states, TODO types, TODO extensions, TODO extensions
+@node Workflow states
 @subsection TODO keywords as workflow states
 @cindex TODO workflow
 @cindex workflow states as TODO keywords
@@ -4073,7 +4063,7 @@ define many keywords, you can use in-buffer completion
 buffer.  Changing a TODO state can be logged with a timestamp, see
 @ref{Tracking TODO state changes}, for more information.
 
-@node TODO types, Multiple sets in one file, Workflow states, TODO extensions
+@node TODO types
 @subsection TODO keywords as types
 @cindex TODO types
 @cindex names as TODO keywords
@@ -4105,7 +4095,7 @@ 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}.
 
-@node Multiple sets in one file, Fast access to TODO states, TODO types, TODO extensions
+@node Multiple sets in one file
 @subsection Multiple keyword sets in one file
 @cindex TODO keyword sets
 
@@ -4147,14 +4137,14 @@ These keys jump from one TODO subset to the next.  In the above example,
 @kindex S-@key{left}
 @item S-@key{right}
 @itemx S-@key{left}
-@kbd{S-@key{<left>}} and @kbd{S-@key{<right>}} and walk through @emph{all}
-keywords from all sets, so for example @kbd{S-@key{<right>}} would switch
+@kbd{S-@key{left}} and @kbd{S-@key{right}} and walk through @emph{all}
+keywords from all sets, so for example @kbd{S-@key{right}} would switch
 from @code{DONE} to @code{REPORT} in the example above.  See also
 @ref{Conflicts}, for a discussion of the interaction with
 @code{shift-selection-mode}.
 @end table
 
-@node Fast access to TODO states, Per-file keywords, Multiple sets in one file, TODO extensions
+@node Fast access to TODO states
 @subsection Fast access to TODO states
 
 If you would like to quickly change an entry to an arbitrary TODO state
@@ -4179,7 +4169,7 @@ state through the tags interface (@pxref{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.}
 
-@node Per-file keywords, Faces for TODO keywords, Fast access to TODO states, TODO extensions
+@node Per-file keywords
 @subsection Setting up keywords for individual files
 @cindex keyword options
 @cindex per-file keywords
@@ -4226,7 +4216,7 @@ 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.}.
 
-@node Faces for TODO keywords, TODO dependencies, Per-file keywords, TODO extensions
+@node Faces for TODO keywords
 @subsection Faces for TODO keywords
 @cindex faces, for TODO keywords
 
@@ -4254,7 +4244,7 @@ special face and use that.  A string is interpreted as a color.  The option
 @code{org-faces-easy-properties} determines if that color is interpreted as a
 foreground or a background color.
 
-@node TODO dependencies,  , Faces for TODO keywords, TODO extensions
+@node TODO dependencies
 @subsection TODO dependencies
 @cindex TODO dependencies
 @cindex dependencies, of TODO states
@@ -4302,7 +4292,7 @@ Change TODO state, circumventing any state blocking.
 @vindex org-agenda-dim-blocked-tasks
 If you set the option @code{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 (@pxref{Agenda Views}).
+font or even made invisible in agenda views (@pxref{Agenda views}).
 
 @cindex checkboxes and TODO dependencies
 @vindex org-enforce-todo-dependencies
@@ -4316,7 +4306,7 @@ between entries in different trees or files, check out the contributed
 module @file{org-depend.el}.
 
 @page
-@node Progress logging, Priorities, TODO extensions, TODO Items
+@node Progress logging
 @section Progress logging
 @cindex progress logging
 @cindex logging, of progress
@@ -4334,7 +4324,7 @@ work time}.
 * Tracking your habits::        How consistent have you been?
 @end menu
 
-@node Closing items, Tracking TODO state changes, Progress logging, Progress logging
+@node Closing items
 @subsection Closing items
 
 The most basic logging is to keep track of @emph{when} a certain TODO
@@ -4370,7 +4360,7 @@ In the timeline (@pxref{Timeline}) and in the agenda
 display the TODO items with a @samp{CLOSED} timestamp on each day,
 giving you an overview of what has been done.
 
-@node Tracking TODO state changes, Tracking your habits, Closing items, Progress logging
+@node Tracking TODO state changes
 @subsection Tracking TODO state changes
 @cindex drawer, for state change recording
 
@@ -4407,7 +4397,7 @@ To record a timestamp without a note for TODO keywords configured with
 
 @noindent
 @vindex org-log-done
-you not only define global TODO keywords and fast access keys, but also
+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@footnote{It is possible that Org mode will record two timestamps
 when you are using both @code{org-log-done} and state change logging.
@@ -4453,7 +4443,7 @@ settings like @code{TODO(!)}.  For example
   :END:
 @end example
 
-@node Tracking your habits,  , Tracking TODO state changes, Progress logging
+@node Tracking your habits
 @subsection Tracking your habits
 @cindex habits
 
@@ -4553,7 +4543,7 @@ 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.
 
-@node Priorities, Breaking down tasks, Progress logging, TODO Items
+@node Priorities
 @section Priorities
 @cindex priorities
 
@@ -4611,7 +4601,7 @@ priority):
 #+PRIORITIES: A C B
 @end example
 
-@node Breaking down tasks, Checkboxes, Priorities, TODO Items
+@node Breaking down tasks
 @section Breaking tasks down into subtasks
 @cindex tasks, breaking down
 @cindex statistics, for TODO items
@@ -4672,7 +4662,7 @@ Another possibility is the use of checkboxes to identify (a hierarchy of) a
 large number of subtasks (@pxref{Checkboxes}).
 
 
-@node Checkboxes,  , Breaking down tasks, TODO Items
+@node Checkboxes
 @section Checkboxes
 @cindex checkboxes
 
@@ -4681,7 +4671,7 @@ Every item in a plain list@footnote{With the exception of description
 lists.  But you can allow it by modifying @code{org-list-automatic-rules}
 accordingly.} (@pxref{Plain lists}) can be made into a checkbox by starting
 it with the string @samp{[ ]}.  This feature is similar to TODO items
-(@pxref{TODO Items}), but is more lightweight.  Checkboxes are not included
+(@pxref{TODO items}), but is more lightweight.  Checkboxes are not included
 in 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
@@ -4778,7 +4768,7 @@ changing TODO states.  If you delete boxes/entries or add/change them by
 hand, use this command to get things back into sync.
 @end table
 
-@node Tags, Properties and Columns, TODO Items, Top
+@node Tags
 @chapter Tags
 @cindex tags
 @cindex headline tagging
@@ -4806,7 +4796,7 @@ You may specify special faces for specific tags using the option
 * Tag searches::                Searching for combinations of tags
 @end menu
 
-@node Tag inheritance, Setting tags, Tags, Tags
+@node Tag inheritance
 @section Tag inheritance
 @cindex tag inheritance
 @cindex inheritance, of tags
@@ -4860,7 +4850,7 @@ with inherited tags.  Set @code{org-agenda-use-tag-inheritance} to control
 this: the default value includes all agenda types, but setting this to @code{nil}
 can really speed up agenda generation.
 
-@node Setting tags, Tag groups, Tag inheritance, Tags
+@node Setting tags
 @section Setting tags
 @cindex setting tags
 @cindex tags, setting
@@ -5041,7 +5031,7 @@ instead of @kbd{C-c C-c}).  If you set the variable to the value
 @code{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}.
 
-@node Tag groups, Tag searches, Setting tags, Tags
+@node Tag groups
 @section Tag groups
 
 @cindex group tags
@@ -5083,7 +5073,7 @@ If you want to ignore group tags temporarily, toggle group tags support
 with @command{org-toggle-tags-groups}, bound to @kbd{C-c C-x q}.  If you
 want to disable tag groups completely, set @code{org-group-tags} to @code{nil}.
 
-@node Tag searches,  , Tag groups, Tags
+@node Tag searches
 @section Tag searches
 @cindex tag searches
 @cindex searching for tags
@@ -5115,7 +5105,7 @@ and properties.  For a complete description with many examples, see
 @ref{Matching tags and properties}.
 
 
-@node Properties and Columns, Dates and Times, Tags, Top
+@node Properties and columns
 @chapter Properties and columns
 @cindex properties
 
@@ -5145,7 +5135,7 @@ Properties can be conveniently edited and viewed in column view
 * Property API::                Properties for Lisp programmers
 @end menu
 
-@node Property syntax, Special properties, Properties and Columns, Properties and Columns
+@node Property syntax
 @section Property syntax
 @cindex property syntax
 @cindex drawer, for properties
@@ -5198,7 +5188,7 @@ file, use a line like
 @end example
 
 Contrary to properties set from a special drawer, you have to refresh the
-buffer with @kbd{C-c C-c} to activate this changes.
+buffer with @kbd{C-c C-c} to activate this change.
 
 If you want to add to the value of an existing property, append a @code{+} to
 the property name.  The following results in the property @code{var} having
@@ -5267,7 +5257,7 @@ Compute the property at point, using the operator and scope from the
 nearest column format definition.
 @end table
 
-@node Special properties, Property searches, Property syntax, Properties and Columns
+@node Special properties
 @section Special properties
 @cindex properties, special
 
@@ -5318,7 +5308,7 @@ ITEM         @r{The headline of the entry.}
 FILE         @r{The filename the entry is located in.}
 @end example
 
-@node Property searches, Property inheritance, Special properties, Properties and Columns
+@node Property searches
 @section Property searches
 @cindex properties, searching
 @cindex searching, of properties
@@ -5355,7 +5345,7 @@ value.  If you enclose the value in curly braces, it is interpreted as
 a regular expression and matched against the property values.
 @end table
 
-@node Property inheritance, Column view, Property searches, Properties and Columns
+@node Property inheritance
 @section Property Inheritance
 @cindex properties, inheritance
 @cindex inheritance, of properties
@@ -5399,7 +5389,7 @@ The LOGGING property may define logging settings for an entry or a
 subtree (@pxref{Tracking TODO state changes}).
 @end table
 
-@node Column view, Property API, Property inheritance, Properties and Columns
+@node Column view
 @section Column view
 
 A great way to view and edit properties in an outline tree is
@@ -5413,7 +5403,7 @@ view (@kbd{S-@key{TAB} S-@key{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 (@pxref{Agenda Views}) where
+Column view also works in agenda buffers (@pxref{Agenda views}) where
 queries have collected selected items, possibly from a number of files.
 
 @menu
@@ -5422,7 +5412,7 @@ queries have collected selected items, possibly from a number of files.
 * Capturing column view::       A dynamic block for column view
 @end menu
 
-@node Defining columns, Using column view, Column view, Column view
+@node Defining columns
 @subsection Defining columns
 @cindex column view, for properties
 @cindex properties, column view
@@ -5435,7 +5425,7 @@ done by defining a column format line.
 * Column attributes::           Appearance and content of a column
 @end menu
 
-@node Scope of column definitions, Column attributes, Defining columns, Defining columns
+@node Scope of column definitions
 @subsubsection Scope of column definitions
 
 To define a column format for an entire file, use a line like
@@ -5462,7 +5452,7 @@ 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.
 
-@node Column attributes,  , Scope of column definitions, Defining columns
+@node Column attributes
 @subsubsection Column attributes
 A column definition sets the attributes of a column.  The general
 definition looks like this:
@@ -5554,7 +5544,7 @@ an @samp{[X]} status if all children have been checked.  The
 sums of CLOCK intervals in the subtree, either for all clocks or just for
 today.
 
-@node Using column view, Capturing column view, Defining columns, Column view
+@node Using column view
 @subsection Using column view
 
 @table @kbd
@@ -5600,7 +5590,7 @@ View the full value of this property.  This is useful if the width of
 the column is smaller than that of the value.
 @orgcmd{a,org-columns-edit-allowed}
 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
+in the hierarchy, the modified value 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.
 @tsubheading{Modifying the table structure}
@@ -5612,7 +5602,7 @@ Insert a new column, to the left of the current column.
 Delete the current column.
 @end table
 
-@node Capturing column view,  , Using column view, Column view
+@node Capturing column view
 @subsection Capturing column view
 
 Since column view is just an overlay over a buffer, it cannot be
@@ -5689,7 +5679,7 @@ distributed with the main distribution of Org (visit
 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.
 
-@node Property API,  , Column view, Properties and Columns
+@node Property API
 @section The Property API
 @cindex properties, API
 @cindex API, for properties
@@ -5699,7 +5689,7 @@ be used by Emacs Lisp programs to work with properties and to implement
 features based on them.  For more information see @ref{Using the
 property API}.
 
-@node Dates and Times, Capture - Refile - Archive, Properties and Columns, Top
+@node Dates and times
 @chapter Dates and times
 @cindex dates
 @cindex times
@@ -5709,7 +5699,7 @@ property API}.
 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 @emph{timestamp} in Org mode.  This may be a
-little confusing because timestamp is often used as indicating when
+little confusing because timestamp is often used to indicate when
 something was created or last changed.  However, in Org mode this term
 is used in a much wider sense.
 
@@ -5724,7 +5714,7 @@ is used in a much wider sense.
 @end menu
 
 
-@node Timestamps, Creating timestamps, Dates and Times, Dates and Times
+@node Timestamps
 @section Timestamps, deadlines, and scheduling
 @cindex timestamps
 @cindex ranges, time
@@ -5775,7 +5765,7 @@ following will show up in the agenda every Wednesday:
 For more complex date specifications, Org mode supports using the special
 sexp diary entries implemented in the Emacs calendar/diary
 package@footnote{When working with the standard diary sexp functions, you
-need to be very careful with the order of the arguments.  That order depend
+need to be very careful with the order of the arguments.  That order depends
 evilly on the variable @code{calendar-date-style} (or, for older Emacs
 versions, @code{european-calendar-style}).  For example, to specify a date
 December 12, 2005, the call might look like @code{(diary-date 12 1 2005)} or
@@ -5818,7 +5808,7 @@ angular ones.  These timestamps are inactive in the sense that they do
 
 @end table
 
-@node Creating timestamps, Deadlines and scheduling, Timestamps, Dates and Times
+@node Creating timestamps
 @section Creating timestamps
 @cindex creating timestamps
 @cindex timestamps, creating
@@ -5889,7 +5879,7 @@ the following column).
 * Custom time format::          Making dates look different
 @end menu
 
-@node The date/time prompt, Custom time format, Creating timestamps, Creating timestamps
+@node The date/time prompt
 @subsection The date/time prompt
 @cindex date, reading in minibuffer
 @cindex time, reading in minibuffer
@@ -6015,7 +6005,7 @@ on, the current interpretation of your input will be displayed live in the
 minibuffer@footnote{If you find this distracting, turn the display off with
 @code{org-read-date-display-live}.}.
 
-@node Custom time format,  , The date/time prompt, Creating timestamps
+@node Custom time format
 @subsection Custom time format
 @cindex custom date/time format
 @cindex time format, custom
@@ -6063,7 +6053,7 @@ format is shorter, things do work as expected.
 @end itemize
 
 
-@node Deadlines and scheduling, Clocking work time, Creating timestamps, Dates and Times
+@node Deadlines and scheduling
 @section Deadlines and scheduling
 
 A timestamp may be preceded by special keywords to facilitate planning:
@@ -6090,9 +6080,9 @@ until the entry is marked DONE@.  An example:
 @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
+deadline using the following syntax.  Here is an example with a warning
 period of 5 days @code{DEADLINE: <2004-02-29 Sun -5d>}.  This warning is
-deactivated if the task get scheduled and you set
+deactivated if the task gets scheduled and you set
 @code{org-agenda-skip-deadline-prewarning-if-scheduled} to @code{t}.
 
 @item SCHEDULED
@@ -6152,7 +6142,7 @@ sexp entry matches.
 * Repeated tasks::              Items that show up again and again
 @end menu
 
-@node Inserting deadline/schedule, Repeated tasks, Deadlines and scheduling, Deadlines and scheduling
+@node Inserting deadline/schedule
 @subsection Inserting deadlines or schedules
 
 The following commands allow you to quickly insert@footnote{The @samp{SCHEDULED} and
@@ -6210,7 +6200,7 @@ 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.
 
-@node Repeated tasks,  , Inserting deadline/schedule, Deadlines and scheduling
+@node Repeated tasks
 @subsection Repeated tasks
 @cindex tasks, repeated
 @cindex repeated tasks
@@ -6299,7 +6289,7 @@ subtree, with dates shifted in each copy.  The command @kbd{C-c C-x c} was
 created for this purpose, it is described in @ref{Structure editing}.
 
 
-@node Clocking work time, Effort estimates, Deadlines and scheduling, Dates and Times
+@node Clocking work time
 @section Clocking work time
 @cindex clocking time
 @cindex time clocking
@@ -6311,7 +6301,7 @@ stopped and the corresponding time interval is recorded.  It also computes
 the total time spent on each subtree@footnote{Clocking only works if all
 headings are indented with less than 30 stars.  This is a hardcoded
 limitation of `lmax' in `org-clock-sum'.} of a project.  And it remembers a
-history or tasks recently clocked, to that you can jump quickly between a
+history or tasks recently clocked, so that you can jump quickly between a
 number of tasks absorbing your time.
 
 To save the clock history across Emacs sessions, use
@@ -6331,7 +6321,7 @@ what to do with it.
 * Resolving idle time::         Resolving time when you've been idle
 @end menu
 
-@node Clocking commands, The clock table, Clocking work time, Clocking work time
+@node Clocking commands
 @subsection Clocking commands
 
 @table @kbd
@@ -6376,7 +6366,7 @@ mode line entry will pop up a menu with clocking options.
 @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{=>
+the resulting time and inserts it after the time range as @samp{=>
 HH:MM}.  See the variable @code{org-log-note-clock-out} for the
 possibility to record an additional note together with the clock-out
 timestamp@footnote{The corresponding in-buffer setting is:
@@ -6431,7 +6421,7 @@ worked on or closed during a day.
 @code{org-clock-in-last} can have a global keybinding and will not
 modify the window disposition.
 
-@node The clock table, Resolving idle time, Clocking commands, Clocking work time
+@node The clock table
 @subsection The clock table
 @cindex clocktable, dynamic block
 @cindex report, of clocked time
@@ -6471,7 +6461,7 @@ buffer with the @kbd{C-c C-x C-r} command:
 @end example
 @noindent
 @vindex org-clocktable-defaults
-The @samp{BEGIN} line and specify a number of options to define the scope,
+The @samp{BEGIN} line specifies 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 @code{org-clocktable-defaults}.
 
@@ -6491,7 +6481,7 @@ be selected:
              file-with-archives    @r{current file and its archives}
              agenda-with-archives  @r{all agenda files, including archives}
 :block       @r{The time block to consider.  This block is specified either}
-             @r{absolute, or relative to the current time and may be any of}
+             @r{absolutely, or relative to the current time and may be any of}
              @r{these formats:}
              2007-12-31    @r{New year eve 2007}
              2007-12       @r{December 2007}
@@ -6520,7 +6510,7 @@ be selected:
              @r{@ref{Matching tags and properties} for the match syntax.}
 @end example
 
-Then there are options which determine the formatting of the table.  There
+Then there are options which determine the formatting of the table.  These
 options are interpreted by the function @code{org-clocktable-write-default},
 but you can specify your own function using the @code{:formatter} parameter.
 @example
@@ -6579,7 +6569,7 @@ would be
 #+END: clocktable
 @end example
 
-@node Resolving idle time,  , The clock table, Clocking work time
+@node Resolving idle time
 @subsection Resolving idle time and continuous clocking
 
 @subsubheading Resolving idle time
@@ -6664,7 +6654,7 @@ 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 @code{org-clock-in} and two @kbd{C-u C-u} with @code{org-clock-in-last}.
 
-@node Effort estimates, Relative timer, Clocking work time, Dates and Times
+@node Effort estimates
 @section Effort estimates
 @cindex effort estimates
 
@@ -6727,7 +6717,7 @@ with the @kbd{/} key in the agenda (@pxref{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.
 
-@node Relative timer, Countdown timer, Effort estimates, Dates and Times
+@node Relative timer
 @section Taking notes with a relative timer
 @cindex relative timer
 
@@ -6767,7 +6757,7 @@ by a certain amount.  This can be used to fix timer strings if the timer was
 not started at exactly the right moment.
 @end table
 
-@node Countdown timer,  , Relative timer, Dates and Times
+@node Countdown timer
 @section Countdown timer
 @cindex Countdown timer
 @kindex C-c C-x ;
@@ -6781,7 +6771,7 @@ countdown timer in the modeline.  @code{org-timer-default-timer} sets the
 default countdown value.  Giving a prefix numeric argument overrides this
 default value.
 
-@node Capture - Refile - Archive, Agenda Views, Dates and Times, Top
+@node Capture - Refile - Archive
 @chapter Capture - Refile - Archive
 @cindex capture
 
@@ -6795,13 +6785,13 @@ trees to an archive file keeps the system compact and fast.
 @menu
 * Capture::                     Capturing new stuff
 * Attachments::                 Add files to tasks
-* RSS Feeds::                   Getting input from RSS feeds
+* RSS feeds::                   Getting input from RSS feeds
 * Protocols::                   External (e.g., Browser) access to Emacs and Org
 * Refile and copy::             Moving/copying a tree from one place to another
 * Archiving::                   What to do with finished projects
 @end menu
 
-@node Capture, Attachments, Capture - Refile - Archive, Capture - Refile - Archive
+@node Capture
 @section Capture
 @cindex capture
 
@@ -6828,7 +6818,7 @@ customization.
 * Capture templates::           Define the outline of different note types
 @end menu
 
-@node Setting up capture, Using capture, Capture, Capture
+@node Setting up capture
 @subsection Setting up capture
 
 The following customization sets a default target file for notes, and defines
@@ -6843,7 +6833,7 @@ suggestion.}  for capturing new material.
 @end group
 @end smalllisp
 
-@node Using capture, Capture templates, Setting up capture, Capture
+@node Using capture
 @subsection Using capture
 
 @table @kbd
@@ -6900,7 +6890,7 @@ automatically be created unless you set @code{org-capture-bookmark} to
 To insert the capture at point in an Org buffer, call @code{org-capture} with
 a @code{C-0} prefix argument.
 
-@node Capture templates,  , Using capture, Capture
+@node Capture templates
 @subsection Capture templates
 @cindex templates, for Capture
 
@@ -6959,7 +6949,7 @@ like this:
 * Templates in contexts::       Only show a template in a specific context
 @end menu
 
-@node Template elements, Template expansion, Capture templates, Capture templates
+@node Template elements
 @subsubsection Template elements
 
 Now lets look at the elements of a template definition.  Each entry in
@@ -7106,7 +7096,7 @@ buffer again after capture is completed.
 @end table
 @end table
 
-@node Template expansion, Templates in contexts, Template elements, Capture templates
+@node Template expansion
 @subsubsection Template expansion
 
 In the template itself, special @kbd{%}-escapes@footnote{If you need one of
@@ -7186,7 +7176,7 @@ To place the cursor after template expansion use:
 %?          @r{After completing the template, position cursor here.}
 @end smallexample
 
-@node Templates in contexts,  , Template expansion, Capture templates
+@node Templates in contexts
 @subsubsection Templates in contexts
 
 @vindex org-capture-templates-contexts
@@ -7210,7 +7200,7 @@ template.  In that case, add this command key like this:
 
 See the docstring of the variable for more information.
 
-@node Attachments, RSS Feeds, Capture, Capture - Refile - Archive
+@node Attachments
 @section Attachments
 @cindex attachments
 
@@ -7298,7 +7288,7 @@ same directory for attachments as the parent does.
 @end table
 @end table
 
-@node RSS Feeds, Protocols, Attachments, Capture - Refile - Archive
+@node RSS feeds
 @section RSS feeds
 @cindex RSS feeds
 @cindex Atom feeds
@@ -7336,17 +7326,12 @@ 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:
-
-@example
-#+DRAWERS: LOGBOOK PROPERTIES FEEDSTATUS
-@end example
+adding the same item several times.
 
 For more information, including how to read atom feeds, see
 @file{org-feed.el} and the docstring of @code{org-feed-alist}.
 
-@node Protocols, Refile and copy, RSS Feeds, Capture - Refile - Archive
+@node Protocols
 @section Protocols for external access
 @cindex protocols, for external access
 @cindex emacsserver
@@ -7360,7 +7345,7 @@ a remote website you are looking at with the browser.  See
 @uref{http://orgmode.org/worg/org-contrib/org-protocol.php} for detailed
 documentation and setup instructions.
 
-@node Refile and copy, Archiving, Protocols, Capture - Refile - Archive
+@node Refile and copy
 @section Refile and copy
 @cindex refiling notes
 @cindex copying notes
@@ -7417,7 +7402,7 @@ setting @code{org-refile-use-cache}.  To make the command see new possible
 targets, you have to clear the cache with this command.
 @end table
 
-@node Archiving,  , Refile and copy, Capture - Refile - Archive
+@node Archiving
 @section Archiving
 @cindex archiving
 
@@ -7438,7 +7423,7 @@ Archive the current entry using the command specified in the variable
 * Internal archiving::          Switch off a tree but keep it in the file
 @end menu
 
-@node Moving subtrees, Internal archiving, Archiving, Archiving
+@node Moving subtrees
 @subsection Moving a tree to the archive file
 @cindex external archiving
 
@@ -7485,7 +7470,7 @@ archive locations in a buffer is using properties.}:
 @noindent
 If you would like to have a special ARCHIVE location for a single entry
 or a (sub)tree, give the entry an @code{:ARCHIVE:} property with the
-location as the value (@pxref{Properties and Columns}).
+location as the value (@pxref{Properties and columns}).
 
 @vindex org-archive-save-context-info
 When a subtree is moved, it receives a number of special properties that
@@ -7495,7 +7480,7 @@ outline path the archiving time etc.  Configure the variable
 added.
 
 
-@node Internal archiving,  , Moving subtrees, Archiving
+@node Internal archiving
 @subsection Internal archiving
 
 If you want to just switch off (for agenda views) certain subtrees without
@@ -7518,7 +7503,7 @@ archived subtrees are not exposed, unless you configure the option
 @code{org-sparse-tree-open-archived-trees}.
 @item
 @vindex org-agenda-skip-archived-trees
-During agenda view construction (@pxref{Agenda Views}), the content of
+During agenda view construction (@pxref{Agenda views}), the content of
 archived trees is ignored unless you configure the option
 @code{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
@@ -7558,7 +7543,7 @@ outline.
 @end table
 
 
-@node Agenda Views, Markup, Capture - Refile - Archive, Top
+@node Agenda views
 @chapter Agenda views
 @cindex agenda views
 
@@ -7615,11 +7600,11 @@ window configuration is restored when the agenda exits:
 * Presentation and sorting::    How agenda items are prepared for display
 * Agenda commands::             Remote editing of Org trees
 * Custom agenda views::         Defining special searches and views
-* Exporting Agenda Views::      Writing a view to a file
+* Exporting agenda views::      Writing a view to a file
 * Agenda column view::          Using column view for collected entries
 @end menu
 
-@node Agenda files, Agenda dispatcher, Agenda Views, Agenda Views
+@node Agenda files
 @section Agenda files
 @cindex agenda files
 @cindex files for agenda
@@ -7696,7 +7681,7 @@ effect immediately.
 Lift the restriction.
 @end table
 
-@node Agenda dispatcher, Built-in agenda views, Agenda files, Agenda Views
+@node Agenda dispatcher
 @section The agenda dispatcher
 @cindex agenda dispatcher
 @cindex dispatching agenda commands
@@ -7759,7 +7744,7 @@ 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.  @xref{Custom agenda views}.
 
-@node Built-in agenda views, Presentation and sorting, Agenda dispatcher, Agenda Views
+@node Built-in agenda views
 @section The built-in agenda views
 
 In this section we describe the built-in views.
@@ -7773,7 +7758,7 @@ In this section we describe the built-in views.
 * Stuck projects::              Find projects you need to review
 @end menu
 
-@node Weekly/daily agenda, Global TODO list, Built-in agenda views, Built-in agenda views
+@node Weekly/daily agenda
 @subsection The weekly/daily agenda
 @cindex agenda
 @cindex weekly agenda
@@ -7912,7 +7897,7 @@ It also reads a @code{APPT_WARNTIME} property which will then override the
 value of @code{appt-message-warning-time} for this appointment.  See the
 docstring for details.
 
-@node Global TODO list, Matching tags and properties, Weekly/daily agenda, Built-in agenda views
+@node Global TODO list
 @subsection The global TODO list
 @cindex global TODO list
 @cindex TODO list, global
@@ -7923,7 +7908,7 @@ collected into a single place.
 @table @kbd
 @orgcmd{C-c a t,org-todo-list}
 Show the global TODO list.  This collects the TODO items from all agenda
-files (@pxref{Agenda Views}) into a single buffer.  By default, this lists
+files (@pxref{Agenda views}) into a single buffer.  By default, this lists
 items with a state the is not a DONE state.  The buffer is in
 @code{agenda-mode}, so there are commands to examine and manipulate the TODO
 entries directly from that buffer (@pxref{Agenda commands}).
@@ -7973,7 +7958,7 @@ and omit the sublevels from the global list.  Configure the variable
 @code{org-agenda-todo-list-sublevels} to get this behavior.
 @end itemize
 
-@node Matching tags and properties, Timeline, Global TODO list, Built-in agenda views
+@node Matching tags and properties
 @subsection Matching tags and properties
 @cindex matching, of tags
 @cindex matching, of properties
@@ -7981,7 +7966,7 @@ and omit the sublevels from the global list.  Configure the variable
 @cindex match view
 
 If headlines in the agenda files are marked with @emph{tags} (@pxref{Tags}),
-or have properties (@pxref{Properties and Columns}), you can select headlines
+or have properties (@pxref{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}.
@@ -8046,13 +8031,13 @@ Group tags (@pxref{Tag groups}) are expanded as regular expressions.  E.g.,
 if @samp{:work:} is a group tag for the group @samp{:work:lab:conf:}, then
 searching for @samp{work} will search for @samp{@{\(?:work\|lab\|conf\)@}}
 and searching for @samp{-work} will search for all headlines but those with
-one of the tag in the group (i.e., @samp{-@{\(?:work\|lab\|conf\)@}}).
+one of the tags in the group (i.e., @samp{-@{\(?:work\|lab\|conf\)@}}).
 
 @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 (@pxref{Properties and Columns}) at the same
+You may also test for properties (@pxref{Properties and columns}) at the same
 time as matching tags.  The properties may be real properties, or special
 properties that represent other metadata (@pxref{Special properties}).  For
 example, the ``property'' @code{TODO} represents the TODO keyword of the
@@ -8061,8 +8046,8 @@ the entry.  The ITEM special property cannot currently be used in tags/property
 searches@footnote{But @pxref{x-agenda-skip-entry-regexp,
 ,skipping entries based on regexp}.}.
 
-Except the @pxref{Special properties}, one other ``property'' can also be
-used. @code{LEVEL} represents the level of an entry.  So a search
+In addition to the @pxref{Special properties}, one other ``property'' can
+also be used. @code{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 @emph{not} marked with the TODO keyword DONE@.
 In buffers with @code{org-odd-levels-only} set, @samp{LEVEL} does not count
@@ -8153,7 +8138,7 @@ Select @samp{:work:}-tagged TODO lines that are either @samp{WAITING} or
 @samp{NEXT}.
 @end table
 
-@node Timeline, Search view, Matching tags and properties, Built-in agenda views
+@node Timeline
 @subsection Timeline for a single file
 @cindex timeline, single file
 @cindex time-sorted view
@@ -8173,7 +8158,7 @@ When called with a @kbd{C-u} prefix, all unfinished TODO entries
 The commands available in the timeline buffer are listed in
 @ref{Agenda commands}.
 
-@node Search view, Stuck projects, Timeline, Built-in agenda views
+@node Search view
 @subsection Search view
 @cindex search view
 @cindex text search
@@ -8203,7 +8188,7 @@ the docstring of the command @code{org-search-view}.
 Note that in addition to the agenda files, this command will also search
 the files listed in @code{org-agenda-text-search-extra-files}.
 
-@node Stuck projects,  , Search view, Built-in agenda views
+@node Stuck projects
 @subsection Stuck projects
 @pindex GTD, Getting Things Done
 
@@ -8251,7 +8236,7 @@ correct customization for this is
 Note that if a project is identified as non-stuck, the subtree of this entry
 will still be searched for stuck projects.
 
-@node Presentation and sorting, Agenda commands, Built-in agenda views, Agenda Views
+@node Presentation and sorting
 @section Presentation and sorting
 @cindex presentation, of agenda items
 
@@ -8273,7 +8258,7 @@ associated with the item.
 * Filtering/limiting agenda items::  Dynamically narrow the agenda
 @end menu
 
-@node Categories, Time-of-day specifications, Presentation and sorting, Presentation and sorting
+@node Categories
 @subsection Categories
 
 @cindex category
@@ -8307,7 +8292,7 @@ longer than 10 characters.
 You can set up icons for category by customizing the
 @code{org-agenda-category-icon-alist} variable.
 
-@node Time-of-day specifications, Sorting agenda items, Categories, Presentation and sorting
+@node Time-of-day specifications
 @subsection Time-of-day specifications
 @cindex time-of-day specification
 
@@ -8358,7 +8343,7 @@ The time grid can be turned on and off with the variable
 @code{org-agenda-use-time-grid}, and can be configured with
 @code{org-agenda-time-grid}.
 
-@node Sorting agenda items, Filtering/limiting agenda items, Time-of-day specifications, Presentation and sorting
+@node Sorting agenda items
 @subsection Sorting agenda items
 @cindex sorting, of agenda items
 @cindex priorities, of agenda items
@@ -8392,14 +8377,14 @@ Sorting can be customized using the variable
 @code{org-agenda-sorting-strategy}, and may also include criteria based on
 the estimated effort of an entry (@pxref{Effort estimates}).
 
-@node Filtering/limiting agenda items,  , Sorting agenda items, Presentation and sorting
+@node Filtering/limiting agenda items
 @subsection Filtering/limiting agenda items
 
 Agenda built-in or customized commands are statically defined.  Agenda
 filters and limits provide two ways of dynamically narrowing down the list of
-agenda entries: @emph{fitlers} and @emph{limits}.  Filters only act on the
+agenda entries: @emph{filters} and @emph{limits}.  Filters only act on the
 display of the items, while limits take effect before the list of agenda
-entries is built.  Filter are more often used interactively, while limits are
+entries is built.  Filters are more often used interactively, while limits are
 mostly useful when defined as local variables within custom agenda commands.
 
 @subsubheading Filtering in the agenda
@@ -8548,8 +8533,8 @@ Limit the number of tagged entries.
 @end table
 
 When set to a positive integer, each option will exclude entries from other
-catogories: for example, @code{(setq org-agenda-max-effort 100)} will limit
-the agenda to 100 minutes of effort and exclude any entry that as no effort
+categories: for example, @code{(setq org-agenda-max-effort 100)} will limit
+the agenda to 100 minutes of effort and exclude any entry that has no effort
 property.  If you want to include entries with no effort property, use a
 negative value for @code{org-agenda-max-effort}.
 
@@ -8575,7 +8560,7 @@ are lost when rebuilding the agenda.}:
 This prompts for the type of limit to apply and its value.
 @end table
 
-@node Agenda commands, Custom agenda views, Presentation and sorting, Agenda Views
+@node Agenda commands
 @section Commands in the agenda buffer
 @cindex commands, in agenda buffer
 
@@ -9103,7 +9088,7 @@ visit Org files will not be removed.
 @end table
 
 
-@node Custom agenda views, Exporting Agenda Views, Agenda commands, Agenda Views
+@node Custom agenda views
 @section Custom agenda views
 @cindex custom agenda views
 @cindex agenda views, custom
@@ -9116,10 +9101,10 @@ dispatcher (@pxref{Agenda dispatcher}), just like the default commands.
 @menu
 * Storing searches::            Type once, use often
 * Block agenda::                All the stuff you need in a single buffer
-* Setting Options::             Changing the rules
+* Setting options::             Changing the rules
 @end menu
 
-@node Storing searches, Block agenda, Custom agenda views, Custom agenda views
+@node Storing searches
 @subsection Storing searches
 
 The first application of custom searches is the definition of keyboard
@@ -9211,7 +9196,7 @@ Peter, or Kim) as additional tag to match.
 Note that the @code{*-tree} agenda views need to be called from an
 Org buffer as they operate on the current buffer only.
 
-@node Block agenda, Setting Options, Storing searches, Custom agenda views
+@node Block agenda
 @subsection Block agenda
 @cindex block agenda
 @cindex agenda, with block views
@@ -9245,7 +9230,7 @@ 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.
 
-@node Setting Options,  , Block agenda, Custom agenda views
+@node Setting options
 @subsection Setting options for custom commands
 @cindex options, for custom agenda views
 
@@ -9319,7 +9304,7 @@ yourself.
 @vindex org-agenda-custom-commands-contexts
 To control whether an agenda command should be accessible from a specific
 context, you can customize @code{org-agenda-custom-commands-contexts}.  Let's
-say for example that you have an agenda commands @code{"o"} displaying a view
+say for example that you have an agenda command @code{"o"} displaying a view
 that you only need when reading emails.  Then you would configure this option
 like this:
 
@@ -9338,8 +9323,8 @@ command key @code{"r"}.  In that case, add this command key like this:
 
 See the docstring of the variable for more information.
 
-@node Exporting Agenda Views, Agenda column view, Custom agenda views, Agenda Views
-@section Exporting Agenda Views
+@node Exporting agenda views
+@section Exporting agenda views
 @cindex agenda views, exporting
 
 If you are away from your computer, it can be very useful to have a printed
@@ -9477,7 +9462,7 @@ processing by other programs.  See @ref{Extracting agenda information}, for
 more information.
 
 
-@node Agenda column view,  , Exporting Agenda Views, Agenda Views
+@node Agenda column view
 @section Using column view in the agenda
 @cindex column view, in agenda
 @cindex agenda, column view
@@ -9541,12 +9526,12 @@ spent (via @code{CLOCKSUM}) and with the planned total effort for it.
 @end enumerate
 
 
-@node Markup, Exporting, Agenda Views, Top
+@node Markup
 @chapter Markup for rich export
 
 When exporting Org mode documents, the exporter tries to reflect the
 structure of the document as accurately as possible in the back-end.  Since
-export targets like HTML, @LaTeX{} allow much richer formatting, Org mode has
+export targets like HTML and @LaTeX{} 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.
 
@@ -9561,7 +9546,7 @@ markup rules used in an Org mode buffer.
 * Special blocks::              Containers targeted at export back-ends
 @end menu
 
-@node Structural markup elements, Images and tables, Markup, Markup
+@node Structural markup elements
 @section Structural markup elements
 
 @menu
@@ -9576,7 +9561,7 @@ markup rules used in an Org mode buffer.
 * Comment lines::               What will *not* be exported
 @end menu
 
-@node Document title, Headings and sections, Structural markup elements, Structural markup elements
+@node Document title
 @subheading Document title
 @cindex document title, markup rules
 
@@ -9590,20 +9575,20 @@ The title of the exported document is taken from the special line
 
 @noindent
 If this line does not exist, the title will be the name of the file
-associated to buffer, without extension, or the buffer name.
+associated with the buffer, without extension, or the buffer name.
 
 @cindex property, EXPORT_TITLE
 If you are exporting only a subtree, its heading will become the title of the
 document.  If the subtree has a property @code{EXPORT_TITLE}, that will take
 precedence.
 
-@node Headings and sections, Table of contents, Document title, Structural markup elements
+@node Headings and sections
 @subheading Headings and sections
 @cindex headings and sections, markup rules
 
 @vindex org-export-headline-levels
 The outline structure of the document as described in @ref{Document
-Structure}, forms the basis for defining sections of the exported 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
@@ -9615,7 +9600,7 @@ per-file basis with a line
 #+OPTIONS: H:4
 @end example
 
-@node Table of contents, Lists, Headings and sections, Structural markup elements
+@node Table of contents
 @subheading Table of contents
 @cindex table of contents, markup rules
 
@@ -9658,7 +9643,7 @@ contents.  However, it is possible to specify an alternative title by
 setting @code{ALT_TITLE} property accordingly.  It will then be used when
 building the table.
 
-@node Lists, Paragraphs, Table of contents, Structural markup elements
+@node Lists
 @subheading Lists
 @cindex lists, markup rules
 
@@ -9666,7 +9651,7 @@ Plain lists as described in @ref{Plain lists}, are translated to the back-end's
 syntax for such lists.  Most back-ends support unordered, ordered, and
 description lists.
 
-@node Paragraphs, Footnote markup, Lists, Structural markup elements
+@node Paragraphs
 @subheading Paragraphs, line breaks, and quoting
 @cindex paragraphs, markup rules
 
@@ -9709,7 +9694,7 @@ but not any simpler
 @end example
 
 
-@node Footnote markup, Emphasis and monospace, Paragraphs, Structural markup elements
+@node Footnote markup
 @subheading Footnote markup
 @cindex footnotes, markup rules
 @cindex @file{footnote.el}
@@ -9718,7 +9703,7 @@ Footnotes defined in the way described in @ref{Footnotes}, will be exported
 by all back-ends.  Org allows multiple references to the same note, and
 multiple footnotes side by side.
 
-@node Emphasis and monospace, Horizontal rules, Footnote markup, Structural markup elements
+@node Emphasis and monospace
 @subheading Emphasis and monospace
 
 @cindex underlined text, markup rules
@@ -9743,13 +9728,13 @@ can tweak @code{org-emphasis-regexp-components}.  Beware that changing one of
 the above variables will no take effect until you reload Org, for which you
 may need to restart Emacs.
 
-@node Horizontal rules, Comment lines, Emphasis and monospace, Structural markup elements
+@node Horizontal rules
 @subheading  Horizontal rules
 @cindex horizontal rules, markup rules
 A line consisting of only dashes, and at least 5 of them, will be exported as
 a horizontal line.
 
-@node Comment lines,  , Horizontal rules, Structural markup elements
+@node Comment lines
 @subheading Comment lines
 @cindex comment lines
 @cindex exporting, not
@@ -9768,7 +9753,7 @@ Toggle the COMMENT keyword at the beginning of an entry.
 @end table
 
 
-@node Images and tables, Literal examples, Structural markup elements, Markup
+@node Images and tables
 @section Images and Tables
 
 @cindex tables, markup rules
@@ -9816,7 +9801,7 @@ the same caption mechanism can apply to many others (e.g., @LaTeX{}
 equations, source code blocks).  Depending on the export back-end, those may
 or may not be handled.
 
-@node Literal examples, Include files, Images and tables, Markup
+@node Literal examples
 @section Literal examples
 @cindex literal examples, markup rules
 @cindex code line references, markup rules
@@ -9855,8 +9840,8 @@ achieved using either the listings or the
 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@footnote{Code in
 @samp{src} blocks may also be evaluated either interactively or on export.
-See @pxref{Working With Source Code} for more information on evaluating code
-blocks.}, see @ref{Easy Templates} for shortcuts to easily insert code
+See @pxref{Working with source code} for more information on evaluating code
+blocks.}, see @ref{Easy templates} for shortcuts to easily insert code
 blocks.
 @cindex #+BEGIN_SRC
 
@@ -9904,8 +9889,8 @@ HTML export also allows examples to be published as text areas (@pxref{Text
 areas in HTML export}).
 
 Because the @code{#+BEGIN_...} and @code{#+END_...} patterns need to be added
-so often, shortcuts are provided using the Easy Templates facility
-(@pxref{Easy Templates}).
+so often, shortcuts are provided using the Easy templates facility
+(@pxref{Easy templates}).
 
 @table @kbd
 @kindex C-c '
@@ -9932,7 +9917,7 @@ label is stored as a link @samp{(label)}, for retrieval with @kbd{C-c C-l}.
 @end table
 
 
-@node Include files, Index entries, Literal examples, Markup
+@node Include files
 @section Include files
 @cindex include files, markup rules
 
@@ -9980,7 +9965,7 @@ obvious defaults.
 Visit the include file at point.
 @end table
 
-@node Index entries, Macro replacement, Include files, Markup
+@node Index entries
 @section Index entries
 @cindex index entries, for publishing
 
@@ -9998,7 +9983,7 @@ an index} for more information.
 
 
 
-@node Macro replacement, Embedded @LaTeX{}, Index entries, Markup
+@node Macro replacement
 @section Macro replacement
 @cindex macro replacement, during export
 @cindex #+MACRO
@@ -10026,7 +10011,7 @@ and to the modification time of the file being exported, respectively.
 Macro expansion takes place during export.
 
 
-@node Embedded @LaTeX{}, Special blocks, Macro replacement, Markup
+@node Embedded @LaTeX{}
 @section Embedded @LaTeX{}
 @cindex @TeX{} interpretation
 @cindex @LaTeX{} interpretation
@@ -10049,7 +10034,7 @@ readily processed to produce pretty output for a number of export back-ends.
 * CDLaTeX mode::                Speed up entering of formulas
 @end menu
 
-@node Special symbols, Subscripts and superscripts, Embedded @LaTeX{}, Embedded @LaTeX{}
+@node Special symbols
 @subsection Special symbols
 @cindex math symbols
 @cindex special symbols
@@ -10097,7 +10082,7 @@ buffer content which remains plain ASCII, but it overlays the UTF-8 character
 for display purposes only.
 @end table
 
-@node Subscripts and superscripts, @LaTeX{} fragments, Special symbols, Embedded @LaTeX{}
+@node Subscripts and superscripts
 @subsection Subscripts and superscripts
 @cindex subscript
 @cindex superscript
@@ -10127,7 +10112,7 @@ In addition to showing entities as UTF-8 characters, this command will also
 format sub- and superscripts in a WYSIWYM way.
 @end table
 
-@node @LaTeX{} fragments, Previewing @LaTeX{} fragments, Subscripts and superscripts, Embedded @LaTeX{}
+@node @LaTeX{} fragments
 @subsection @LaTeX{} fragments
 @cindex @LaTeX{} fragments
 
@@ -10200,7 +10185,7 @@ lines:
 #+OPTIONS: tex:verbatim   @r{Verbatim export, for jsMath or so}
 @end example
 
-@node Previewing @LaTeX{} fragments, CDLaTeX mode, @LaTeX{} fragments, Embedded @LaTeX{}
+@node Previewing @LaTeX{} fragments
 @subsection Previewing @LaTeX{} fragments
 @cindex @LaTeX{} fragments, preview
 
@@ -10244,7 +10229,7 @@ To disable it, simply use
 #+STARTUP: nolatexpreview
 @end example
 
-@node CDLaTeX mode,  , Previewing @LaTeX{} fragments, Embedded @LaTeX{}
+@node CDLaTeX mode
 @subsection Using CD@LaTeX{} to enter math
 @cindex CD@LaTeX{}
 
@@ -10305,13 +10290,13 @@ modification will work only inside @LaTeX{} fragments; outside the quote
 is normal.
 @end itemize
 
-@node Special blocks,  , Embedded @LaTeX{}, Markup
+@node Special blocks
 @section Special blocks
 @cindex Special blocks
 
 Org syntax includes pre-defined blocks (@pxref{Paragraphs} and @ref{Literal
 examples}).  It is also possible to create blocks containing raw code
-targeted at a specific back-ends (e.g., @samp{#+BEGIN_LATEX}).
+targeted at a specific back-end (e.g., @samp{#+BEGIN_LATEX}).
 
 Any other block is a @emph{special block}.  Each export back-end decides if
 they should be exported, and how.  When the block is ignored, its contents
@@ -10320,7 +10305,7 @@ exporting a @samp{#+BEGIN_TEST} block, HTML back-end wraps its contents
 within @samp{<div name="test">} tag.  Refer to back-end specific
 documentation for more information.
 
-@node Exporting, Publishing, Markup, Top
+@node Exporting
 @chapter Exporting
 @cindex exporting
 
@@ -10341,7 +10326,7 @@ export can extract entries with deadlines or appointments to produce a file
 in the iCalendar format.
 
 @menu
-* The Export Dispatcher::       The main exporter interface
+* The export dispatcher::       The main exporter interface
 * Export back-ends::            Built-in export formats
 * Export settings::             Generic export settings
 * ASCII/Latin-1/UTF-8 export::  Exporting to flat files with encoding
@@ -10349,15 +10334,15 @@ in the iCalendar format.
 * HTML export::                 Exporting to HTML
 * @LaTeX{} and PDF export::     Exporting to @LaTeX{}, and processing to PDF
 * Markdown export::             Exporting to Markdown
-* OpenDocument Text export::    Exporting to OpenDocument Text
+* OpenDocument text export::    Exporting to OpenDocument Text
 * iCalendar export::            Exporting to iCalendar
 * Other built-in back-ends::    Exporting to @code{Texinfo}, a man page, or Org
 * Export in foreign buffers::   Author tables in lists in Org syntax
 * Advanced configuration::      Fine-tuning the export output
 @end menu
 
-@node The Export Dispatcher, Export back-ends, Exporting, Exporting
-@section The Export Dispatcher
+@node The export dispatcher
+@section The export dispatcher
 @vindex org-export-dispatch-use-expert-ui
 @cindex Export, dispatcher
 
@@ -10425,7 +10410,7 @@ With the exception of asynchronous export, a successful export process writes
 its output to the kill-ring. You can configure this behavior by altering the
 option @code{org-export-copy-to-kill-ring}.
 
-@node Export back-ends, Export settings, The Export Dispatcher, Exporting
+@node Export back-ends
 @section Export back-ends
 @cindex Export, back-ends
 
@@ -10455,22 +10440,23 @@ Built-in back-ends include:
 Other back-ends might be found in the @code{contrib/} directory
 (@pxref{Installation}).
 
-@node Export settings, ASCII/Latin-1/UTF-8 export, Export back-ends, Exporting
+@node Export settings
 @section Export settings
 @cindex Export, settings
 
+@cindex #+OPTIONS
 Export options can be set: globally with variables; for an individual file by
 making variables buffer-local with in-buffer settings (@pxref{In-buffer
 settings}), by setting individual keywords, or by specifying them in a
 compact form with the @code{#+OPTIONS} keyword; or for a tree by setting
-properties (@pxref{Properties and Columns}).  Options set at a specific level
+properties (@pxref{Properties and columns}).  Options set at a specific level
 override options set at a more general level.
 
 @cindex #+SETUPFILE
 In-buffer settings may appear anywhere in the file, either directly or
 indirectly through a file included using @samp{#+SETUPFILE: filename} syntax.
 Option keyword sets tailored to a particular back-end can be inserted from
-the export dispatcher (@pxref{The Export Dispatcher}) using the @code{Insert
+the export dispatcher (@pxref{The export dispatcher}) using the @code{Insert
 template} command by pressing @key{#}.  To insert keywords individually,
 a good way to make sure the keyword is correct is to type @code{#+} and then
 to use @kbd{M-<TAB>} for completion.
@@ -10480,34 +10466,41 @@ variables, include:
 
 @table @samp
 @item AUTHOR
+@cindex #+AUTHOR
 @vindex user-full-name
 The document author (@code{user-full-name}).
 
 @item CREATOR
+@cindex #+CREATOR
 @vindex org-export-creator-string
 Entity responsible for output generation (@code{org-export-creator-string}).
 
 @item DATE
+@cindex #+DATE
 @vindex org-export-date-timestamp-format
 A date or a time-stamp@footnote{The variable
 @code{org-export-date-timestamp-format} defines how this time-stamp will be
 exported.}.
 
 @item DESCRIPTION
+@cindex #+DESCRIPTION
 The document description.  Back-ends handle it as they see fit (e.g., for the
 XHTML meta tag), if at all.  You can use several such keywords for long
 descriptions.
 
 @item EMAIL
+@cindex #+EMAIL
 @vindex user-mail-address
 The email address (@code{user-mail-address}).
 
 @item KEYWORDS
+@cindex #+KEYWORDS
 The keywords defining the contents of the document.  Back-ends handle it as
 they see fit (e.g., for the XHTML meta tag), if at all.  You can use several
 such keywords if the list is long.
 
 @item LANGUAGE
+@cindex #+LANGUAGE
 @vindex org-export-default-language
 The language used for translating some strings
 (@code{org-export-default-language}).  E.g., @samp{#+LANGUAGE: fr} will tell
@@ -10515,6 +10508,7 @@ Org to translate @emph{File} (english) into @emph{Fichier} (french) in the
 clocktable.
 
 @item SELECT_TAGS
+@cindex #+SELECT_TAGS
 @vindex org-export-select-tags
 The tags that select a tree for export (@code{org-export-select-tags}).  The
 default value is @code{:export:}.  Within a subtree tagged with
@@ -10522,12 +10516,15 @@ default value is @code{:export:}.  Within a subtree tagged with
 below).
 
 @item EXCLUDE_TAGS
+@cindex #+EXCLUDE_TAGS
+@vindex org-export-exclude-tags
 The tags that exclude a tree from export (@code{org-export-exclude-tags}).
 The default value is @code{:noexport:}.  Entries with the @code{:noexport:}
 tag will be unconditionally excluded from the export, even if they have an
 @code{:export:} tag.
 
 @item TITLE
+@cindex #+TITLE
 The title to be shown (otherwise derived from buffer's name).  You can use
 several such keywords for long titles.
 @end table
@@ -10633,6 +10630,11 @@ Toggle export of planning information (@code{org-export-with-planning}).
 @vindex org-export-with-priority
 Toggle inclusion of priority cookies (@code{org-export-with-priority}).
 
+@item prop:
+@vindex org-export-with-properties
+Toggle inclusion of property drawers, or list properties to include
+(@code{org-export-with-properties}).
+
 @item stat:
 @vindex org-export-with-statistics-cookies
 Toggle inclusion of statistics cookies
@@ -10692,7 +10694,7 @@ can become buffer-local during export by using the BIND keyword.  Its syntax
 is @samp{#+BIND: variable value}.  This is particularly useful for in-buffer
 settings that cannot be changed using specific keywords.
 
-@node ASCII/Latin-1/UTF-8 export, Beamer export, Export settings, Exporting
+@node ASCII/Latin-1/UTF-8 export
 @section ASCII/Latin-1/UTF-8 export
 @cindex ASCII export
 @cindex Latin-1 export
@@ -10756,7 +10758,7 @@ specified using an @code{ATTR_ASCII} line, directly preceding the rule.
 -----
 @end example
 
-@node Beamer export, HTML export, ASCII/Latin-1/UTF-8 export, Exporting
+@node Beamer export
 @section Beamer export
 @cindex Beamer export
 
@@ -10972,7 +10974,7 @@ Here is a simple example Org document that is intended for Beamer export.
     Please test this stuff!
 @end smallexample
 
-@node HTML export, @LaTeX{} and PDF export, Beamer export, Exporting
+@node HTML export
 @section HTML export
 @cindex HTML export
 
@@ -10994,7 +10996,7 @@ language, but with additional support for tables.
 * JavaScript support::          Info and Folding in a web browser
 @end menu
 
-@node HTML Export commands, HTML doctypes, HTML export, HTML export
+@node HTML Export commands
 @subsection HTML export commands
 
 @table @kbd
@@ -11022,7 +11024,7 @@ Export to a temporary buffer.  Do not create a file.
 @c @noindent
 @c creates two levels of headings and does the rest as items.
 
-@node HTML doctypes, HTML preamble and postamble, HTML Export commands, HTML export
+@node HTML doctypes
 @subsection HTML doctypes
 @vindex org-html-doctype
 @vindex org-html-doctype-alist
@@ -11113,7 +11115,7 @@ Headlines cannot appear within special blocks.  To wrap a headline and its
 contents in e.g. <section> or <article> tags, set the @code{HTML_CONTAINER}
 property on the headline itself.
 
-@node HTML preamble and postamble, Quoting HTML tags, HTML doctypes, HTML export
+@node HTML preamble and postamble
 @subsection HTML preamble and postamble
 @vindex org-html-preamble
 @vindex org-html-postamble
@@ -11141,7 +11143,7 @@ the creator and the date, and build the postamble from these values.  Setting
 relevant format string found in @code{org-html-postamble-format}.  Setting it
 to @code{nil} will not insert any postamble.
 
-@node Quoting HTML tags, Links in HTML export, HTML preamble and postamble, HTML export
+@node Quoting HTML tags
 @subsection Quoting HTML tags
 
 Plain @samp{<} and @samp{>} are always transformed to @samp{&lt;} and
@@ -11166,7 +11168,7 @@ All lines between these markers are exported literally
 @end example
 
 
-@node Links in HTML export, Tables in HTML export, Quoting HTML tags, HTML export
+@node Links in HTML export
 @subsection Links in HTML export
 
 @cindex links, in HTML export
@@ -11193,8 +11195,8 @@ and @code{style} attributes for a link:
 [[http://orgmode.org]]
 @end example
 
-@node Tables in HTML export, Images in HTML export, Links in HTML export, HTML export
-@subsection Tables
+@node Tables in HTML export
+@subsection Tables in HTML export
 @cindex tables, in HTML
 @vindex org-html-table-default-attributes
 
@@ -11215,7 +11217,7 @@ You can also modify the default tags used for each row by setting
 @code{org-html-table-row-tags}.  See the docstring for an example on
 how to use this option.
 
-@node Images in HTML export, Math formatting in HTML export, Tables in HTML export, HTML export
+@node Images in HTML export
 @subsection Images in HTML export
 
 @cindex images, inline in HTML
@@ -11252,7 +11254,7 @@ support text viewers and accessibility, and align it to the right.
 @noindent
 You could use @code{http} addresses just as well.
 
-@node Math formatting in HTML export, Text areas in HTML export, Images in HTML export, HTML export
+@node Math formatting in HTML export
 @subsection Math formatting in HTML export
 @cindex MathJax
 @cindex dvipng
@@ -11295,7 +11297,7 @@ or:
 #+OPTIONS: tex:imagemagick
 @end example
 
-@node Text areas in HTML export, CSS support, Math formatting in HTML export, HTML export
+@node Text areas in HTML export
 @subsection Text areas in HTML export
 
 @cindex text areas, in HTML
@@ -11318,7 +11320,7 @@ the example, and 80, respectively.  For example
 @end example
 
 
-@node CSS support, JavaScript support, Text areas in HTML export, HTML export
+@node CSS support
 @subsection CSS support
 @cindex CSS, for HTML export
 @cindex HTML export, CSS
@@ -11399,7 +11401,7 @@ property.
 @c FIXME: More about header and footer styles
 @c FIXME: Talk about links and targets.
 
-@node JavaScript support,  , CSS support, HTML export
+@node JavaScript support
 @subsection JavaScript supported display of web pages
 
 @cindex Rose, Sebastian
@@ -11463,7 +11465,7 @@ You can choose default values for these options by customizing the variable
 @code{org-html-infojs-options}.  If you always want to apply the script to your
 pages, configure the variable @code{org-html-use-infojs}.
 
-@node @LaTeX{} and PDF export, Markdown export, HTML export, Exporting
+@node @LaTeX{} and PDF export
 @section @LaTeX{} and PDF export
 @cindex @LaTeX{} export
 @cindex PDF export
@@ -11495,7 +11497,7 @@ description.
 * @LaTeX{} specific attributes::  Controlling @LaTeX{} output
 @end menu
 
-@node @LaTeX{} export commands, Header and sectioning, @LaTeX{} and PDF export, @LaTeX{} and PDF export
+@node @LaTeX{} export commands
 @subsection @LaTeX{} export commands
 
 @table @kbd
@@ -11511,7 +11513,7 @@ Export as @LaTeX{} and then process to PDF.
 Export as @LaTeX{} and then process to PDF, then open the resulting PDF file.
 @end table
 
-@node Header and sectioning, Quoting @LaTeX{} code, @LaTeX{} export commands, @LaTeX{} and PDF export
+@node Header and sectioning
 @subsection Header and sectioning structure
 @cindex @LaTeX{} class
 @cindex @LaTeX{} sectioning structure
@@ -11569,7 +11571,7 @@ An example is shown below.
   some text
 @end example
 
-@node Quoting @LaTeX{} code, @LaTeX{} specific attributes, Header and sectioning, @LaTeX{} and PDF export
+@node Quoting @LaTeX{} code
 @subsection Quoting @LaTeX{} code
 
 Embedded @LaTeX{} as described in @ref{Embedded @LaTeX{}}, will be correctly
@@ -11588,7 +11590,7 @@ All lines between these markers are exported literally
 #+END_LATEX
 @end example
 
-@node @LaTeX{} specific attributes,  , Quoting @LaTeX{} code, @LaTeX{} and PDF export
+@node @LaTeX{} specific attributes
 @subsection @LaTeX{} specific attributes
 @cindex #+ATTR_LATEX
 
@@ -11835,7 +11837,7 @@ respectively, @code{:width} and @code{:thickness} attributes:
 -----
 @end example
 
-@node Markdown export, OpenDocument Text export, @LaTeX{} and PDF export, Exporting
+@node Markdown export
 @section Markdown export
 @cindex Markdown export
 
@@ -11871,8 +11873,8 @@ that one (@pxref{Export settings}).
 
 @c begin opendocument
 
-@node OpenDocument Text export, iCalendar export, Markdown export, Exporting
-@section OpenDocument Text export
+@node OpenDocument text export
+@section OpenDocument text export
 @cindex ODT
 @cindex OpenDocument
 @cindex export, OpenDocument
@@ -11899,13 +11901,13 @@ are compatible with LibreOffice 3.4.
 * Advanced topics in ODT export::  Read this if you are a power user
 @end menu
 
-@node Pre-requisites for ODT export, ODT export commands, OpenDocument Text export, OpenDocument Text export
+@node Pre-requisites for ODT export
 @subsection Pre-requisites for ODT export
 @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.
 
-@node ODT export commands, Extending ODT export, Pre-requisites for ODT export, OpenDocument Text export
+@node ODT export commands
 @subsection ODT export commands
 
 @subsubheading Exporting to ODT
@@ -11943,7 +11945,7 @@ file instead.  @xref{x-export-to-other-formats, , Automatically exporting to
 other formats}.
 @end table
 
-@node Extending ODT export, Applying custom styles, ODT export commands, OpenDocument Text export
+@node Extending ODT export
 @subsection Extending ODT export
 
 The ODT exporter can interface with a variety of document
@@ -11961,7 +11963,7 @@ also use your own favorite converter or tweak the default settings of the
 @file{LibreOffice} and @samp{unoconv} converters.  @xref{Configuring a
 document converter}.
 
-@subsubsection Automatically exporting to other formats
+@subsubheading Automatically exporting to other formats
 @anchor{x-export-to-other-formats}
 
 @vindex org-odt-preferred-output-format
@@ -11973,7 +11975,7 @@ preferred output format by customizing the variable
 (@pxref{x-export-to-odt,,Exporting to ODT}) can be extended to export to a
 format that is of immediate interest to you.
 
-@subsubsection Converting between document formats
+@subsubheading Converting between document formats
 @anchor{x-convert-to-other-formats}
 
 There are many document converters in the wild which support conversion to
@@ -11990,7 +11992,7 @@ Convert an existing document from one format to another.  With a prefix
 argument, also open the newly produced file.
 @end table
 
-@node Applying custom styles, Links in ODT export, Extending ODT export, OpenDocument Text export
+@node Applying custom styles
 @subsection Applying custom styles
 @cindex styles, custom
 @cindex template, custom
@@ -12003,7 +12005,7 @@ 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.
 
-@subsubsection Applying custom styles: the easy way
+@subsubheading Applying custom styles: the easy way
 
 @enumerate
 @item
@@ -12042,7 +12044,7 @@ or
 
 @end enumerate
 
-@subsubsection Using third-party styles and templates
+@subsubheading Using third-party styles and templates
 
 You can use third-party styles and templates for customizing your output.
 This will produce the desired output only if the template provides all
@@ -12051,7 +12053,7 @@ met, the output is going to be less than satisfactory.  So it is highly
 recommended that you only work with templates that are directly derived from
 the factory settings.
 
-@node Links in ODT export, Tables in ODT export, Applying custom styles, OpenDocument Text export
+@node Links in ODT export
 @subsection Links in ODT export
 @cindex links, in ODT export
 
@@ -12065,7 +12067,7 @@ A @samp{\ref@{label@}}-style reference to an image, table etc. is replaced
 with a cross-reference and sequence number of the labeled entity.
 @xref{Labels and captions in ODT export}.
 
-@node Tables in ODT export, Images in ODT export, Links in ODT export, OpenDocument Text export
+@node Tables in ODT export
 @subsection Tables in ODT export
 @cindex tables, in ODT export
 
@@ -12111,7 +12113,7 @@ If you are not satisfied with the above formatting options, you can create
 custom table styles and associate them with a table using the
 @code{#+ATTR_ODT} line.  @xref{Customizing tables in ODT export}.
 
-@node Images in ODT export, Math formatting in ODT export, Tables in ODT export, OpenDocument Text export
+@node Images in ODT export
 @subsection Images in ODT export
 @cindex images, embedding in ODT
 @cindex embedding images in ODT
@@ -12212,7 +12214,7 @@ To create an image that is anchored to a page, do the following:
 [[./img.png]]
 @end example
 
-@node Math formatting in ODT export, Labels and captions in ODT export, Images in ODT export, OpenDocument Text export
+@node Math formatting in ODT export
 @subsection Math formatting in ODT export
 
 The ODT exporter has special support for handling math.
@@ -12222,8 +12224,8 @@ The ODT exporter has special support for handling math.
 * Working with MathML or OpenDocument formula files::  How to embed equations in native format
 @end menu
 
-@node Working with @LaTeX{} math snippets, Working with MathML or OpenDocument formula files, Math formatting in ODT export, Math formatting in ODT export
-@subsubsection Working with @LaTeX{} math snippets
+@node Working with @LaTeX{} math snippets
+@subsubheading Working with @LaTeX{} math snippets
 
 @LaTeX{} math snippets (@pxref{@LaTeX{} fragments}) can be embedded in the ODT
 document in one of the following ways:
@@ -12295,8 +12297,8 @@ that the @file{dvipng} program or @file{imagemagick} suite be available on
 your system.
 @end enumerate
 
-@node Working with MathML or OpenDocument formula files,  , Working with @LaTeX{} math snippets, Math formatting in ODT export
-@subsubsection Working with MathML or OpenDocument formula files
+@node Working with MathML or OpenDocument formula files
+@subsubheading Working with MathML or OpenDocument formula files
 
 For various reasons, you may find embedding @LaTeX{} math snippets in an
 ODT document less than reliable.  In that case, you can embed a
@@ -12313,7 +12315,7 @@ or
 [[./equation.odf]]
 @end example
 
-@node Labels and captions in ODT export, Literal examples in ODT export, Math formatting in ODT export, OpenDocument Text export
+@node Labels and captions in ODT export
 @subsection Labels and captions in ODT export
 
 You can label and caption various category of objects---an inline image, a
@@ -12357,7 +12359,7 @@ document.
 Illustration 2: Bell curve
 @end example
 
-@node Literal examples in ODT export, Advanced topics in ODT export, Labels and captions in ODT export, OpenDocument Text export
+@node Literal examples in ODT export
 @subsection Literal examples in ODT export
 
 Export of literal examples (@pxref{Literal examples}) with full fontification
@@ -12377,7 +12379,7 @@ so by customizing the option
 You can turn off fontification of literal examples by customizing the
 option @code{org-odt-fontify-srcblocks}.
 
-@node Advanced topics in ODT export,  , Literal examples in ODT export, OpenDocument Text export
+@node Advanced topics in ODT export
 @subsection Advanced topics in ODT export
 
 If you rely heavily on ODT export, you may want to exploit the full
@@ -12392,8 +12394,8 @@ that would be of interest to power users.
 * Validating OpenDocument XML::  How to debug corrupt OpenDocument files
 @end menu
 
-@node Configuring a document converter, Working with OpenDocument style files, Advanced topics in ODT export, Advanced topics in ODT export
-@subsubsection Configuring a document converter
+@node Configuring a document converter
+@subsubheading Configuring a document converter
 @cindex convert
 @cindex doc, docx, rtf
 @cindex converter
@@ -12429,8 +12431,8 @@ Select the newly added converter as the preferred one by customizing the
 option @code{org-odt-convert-process}.
 @end enumerate
 
-@node Working with OpenDocument style files, Creating one-off styles, Configuring a document converter, Advanced topics in ODT export
-@subsubsection Working with OpenDocument style files
+@node Working with OpenDocument style files
+@subsubheading Working with OpenDocument style files
 @cindex styles, custom
 @cindex template, custom
 
@@ -12440,7 +12442,7 @@ interested in exploring the automatic and custom OpenDocument styles used by
 the exporter.
 
 @anchor{x-factory-styles}
-@subsubheading Factory styles
+@subsubheading a) 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
@@ -12487,7 +12489,7 @@ etc.---are numbered.
 @end itemize
 
 @anchor{x-overriding-factory-styles}
-@subsubheading Overriding factory styles
+@subsubheading b) 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
@@ -12533,8 +12535,8 @@ Use this variable to specify the blank @file{content.xml} that will be used
 in the final output.
 @end itemize
 
-@node Creating one-off styles, Customizing tables in ODT export, Working with OpenDocument style files, Advanced topics in ODT export
-@subsubsection Creating one-off styles
+@node Creating one-off styles
+@subsubheading Creating one-off styles
 
 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
@@ -12600,8 +12602,8 @@ This paragraph is specially formatted and uses bold text.
 
 @end enumerate
 
-@node Customizing tables in ODT export, Validating OpenDocument XML, Creating one-off styles, Advanced topics in ODT export
-@subsubsection Customizing tables in ODT export
+@node Customizing tables in ODT export
+@subsubheading Customizing tables in ODT export
 @cindex tables, in ODT export
 
 @cindex #+ATTR_ODT
@@ -12614,8 +12616,6 @@ OpenDocument-v1.2
 specification.@footnote{@url{http://docs.oasis-open.org/office/v1.2/OpenDocument-v1.2.html,
 OpenDocument-v1.2 Specification}}
 
-@subsubheading Custom table styles: an illustration
-
 @vindex org-odt-table-styles
 To have a quick preview of this feature, install the below setting and
 export the table that follows:
@@ -12647,7 +12647,6 @@ Table Template} in @file{OrgOdtContentTemplate.xml}
 (@pxref{x-orgodtcontenttemplate-xml,,Factory styles}).  If you need
 additional templates you have to define these styles yourselves.
 
-@subsubheading Custom table styles: the nitty-gritty
 To use this feature proceed as follows:
 
 @enumerate
@@ -12766,8 +12765,8 @@ the @code{ATTR_ODT} line as shown below.
 @end example
 @end enumerate
 
-@node Validating OpenDocument XML,  , Customizing tables in ODT export, Advanced topics in ODT export
-@subsubsection Validating OpenDocument XML
+@node Validating OpenDocument XML
+@subsubheading Validating OpenDocument XML
 
 Occasionally, you will discover that the document created by the
 ODT exporter cannot be opened by your favorite application.  One of
@@ -12788,7 +12787,7 @@ will take care of updating the @code{rng-schema-locating-files} for you.
 
 @c end opendocument
 
-@node iCalendar export, Other built-in back-ends, OpenDocument Text export, Exporting
+@node iCalendar export
 @section iCalendar export
 @cindex iCalendar export
 
@@ -12857,7 +12856,7 @@ and the description from the body (limited to
 How this calendar is best read and updated, depends on the application
 you are using.  The FAQ covers this issue.
 
-@node Other built-in back-ends, Export in foreign buffers, iCalendar export, Exporting
+@node Other built-in back-ends
 @section Other built-in back-ends
 @cindex export back-ends, built-in
 @vindex org-export-backends
@@ -12870,14 +12869,14 @@ On top of the aforemetioned back-ends, Org comes with other built-in ones:
 @item @file{ox-org.el}: export to an Org document.
 @end itemize
 
-To activate these export back-end, customize @code{org-export-backends} or
+To activate these export back-ends, customize @code{org-export-backends} or
 load them directly with e.g., @code{(require 'ox-texinfo)}.  This will add
-new keys in the export dispatcher (@pxref{The Export Dispatcher}).
+new keys in the export dispatcher (@pxref{The export dispatcher}).
 
 See the comment section of these files for more information on how to use
 them.
 
-@node Export in foreign buffers, Advanced configuration, Other built-in back-ends, Exporting
+@node Export in foreign buffers
 @section Export in foreign buffers
 
 Most built-in back-ends come with a command to convert the selected region
@@ -12900,7 +12899,7 @@ buffers.  E.g., in a HTML buffer, you can turn on @code{orgstruct-mode}, then
 use Org commands for editing a list, and finally select and convert the list
 with @code{M-x org-html-convert-region-to-html RET}.
 
-@node Advanced configuration,  , Export in foreign buffers, Exporting
+@node Advanced configuration
 @section Advanced configuration
 
 @subheading Hooks
@@ -12940,7 +12939,7 @@ object or element into another language, all functions within a given filter
 type are called in turn on the string produced.  The string returned by the
 last function will be the one used in the final output.
 
-There are filters sets for each type of element or object, for plain text,
+There are filter sets for each type of element or object, for plain text,
 for the parse tree, for the export options and for the final output.  They
 are all named after the same scheme: @code{org-export-filter-TYPE-functions},
 where @code{TYPE} is the type targeted by the filter.  Valid types are:
@@ -13028,6 +13027,25 @@ ignore the third argument for most purposes.  Note the use of
 be applied when using @code{latex} back-end or any other back-end derived
 from it (e.g., @code{beamer}).
 
+@subheading Defining filters for individual files
+
+You can customize the export for just a specific file by binding export
+filter variables using @code{#+BIND}.  Here is an example where we introduce
+two filters, one to remove brackets from time stamps, and one to entirely
+remove any strike-through text.  The functions doing the filtering are
+defined in an src block that allows the filter function definitions to exist
+in the file itself and ensures that the functions will be there when needed.
+
+@example
+#+BIND: org-export-filter-timestamp-functions (tmp-f-timestamp)
+#+BIND: org-export-filter-strike-through-functions (tmp-f-strike-through)
+#+begin_src emacs-lisp :exports results :results none
+  (defun tmp-f-timestamp (s backend info)
+    (replace-regexp-in-string "&[lg]t;\\|[][]" "" s))
+  (defun tmp-f-strike-through (s backend info) "")
+#+end_src
+@end example
+
 @subheading Extending an existing back-end
 
 This is obviously the most powerful customization, since the changes happen
@@ -13084,7 +13102,8 @@ back-end is calling the following from an Org buffer:
 It is obviously possible to write an interactive function for this, install
 it in the export dispatcher menu, and so on.
 
-@node Publishing, Working With Source Code, Exporting, Top
+
+@node Publishing
 @chapter Publishing
 @cindex publishing
 
@@ -13106,7 +13125,7 @@ Publishing has been contributed to Org by David O'Toole.
 * Triggering publication::      Publication commands
 @end menu
 
-@node Configuration, Uploading files, Publishing, Publishing
+@node Configuration
 @section Configuration
 
 Publishing needs significant configuration to specify files, destination
@@ -13123,7 +13142,7 @@ and many other properties of a project.
 * Generating an index::         An index that reaches across pages
 @end menu
 
-@node Project alist, Sources and destinations, Configuration, Configuration
+@node Project alist
 @subsection The variable @code{org-publish-project-alist}
 @cindex org-publish-project-alist
 @cindex projects, for publishing
@@ -13150,7 +13169,7 @@ together files requiring different publishing options.  When you publish such
 a ``meta-project'', all the components will also be published, in the
 sequence given.
 
-@node Sources and destinations, Selecting files, Project alist, Configuration
+@node Sources and destinations
 @subsection Sources and destinations for files
 @cindex directories, for publishing
 
@@ -13179,7 +13198,7 @@ project property list is scoped into this call as the variable
 @end multitable
 @noindent
 
-@node Selecting files, Publishing action, Sources and destinations, Configuration
+@node Selecting files
 @subsection Selecting files
 @cindex files, selecting for publishing
 
@@ -13205,7 +13224,7 @@ and @code{:exclude}.
 @tab non-@code{nil} means, check base-directory recursively for files to publish.
 @end multitable
 
-@node Publishing action, Publishing options, Selecting files, Configuration
+@node Publishing action
 @subsection Publishing action
 @cindex action, for publishing
 
@@ -13244,7 +13263,7 @@ 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.
 
-@node Publishing options, Publishing links, Publishing action, Configuration
+@node Publishing options
 @subsection Options for the exporters
 @cindex options, for publishing
 
@@ -13272,6 +13291,7 @@ string of these options for details.
 @vindex org-export-with-latex
 @vindex org-export-with-planning
 @vindex org-export-with-priority
+@vindex org-export-with-properties
 @vindex org-export-with-section-numbers
 @vindex org-export-with-special-strings
 @vindex org-export-with-sub-superscripts
@@ -13282,7 +13302,6 @@ string of these options for details.
 @vindex org-export-with-toc
 @vindex org-export-with-todo-keywords
 @vindex user-mail-address
-
 @multitable @columnfractions 0.32 0.68
 @item @code{:archived-trees}        @tab @code{org-export-with-archived-trees}
 @item @code{:exclude-tags}          @tab @code{org-export-exclude-tags}
@@ -13302,6 +13321,7 @@ string of these options for details.
 @item @code{:with-latex}            @tab @code{org-export-with-latex}
 @item @code{:with-planning}         @tab @code{org-export-with-planning}
 @item @code{:with-priority}         @tab @code{org-export-with-priority}
+@item @code{:with-properties}       @tab @code{org-export-with-properties}
 @item @code{:with-special-strings}  @tab @code{org-export-with-special-strings}
 @item @code{:with-sub-superscript}  @tab @code{org-export-with-sub-superscripts}
 @item @code{:with-tables}           @tab @code{org-export-with-tables}
@@ -13352,7 +13372,7 @@ setting overrides the value of the corresponding user variable (if any)
 during publishing.  Options set within a file (@pxref{Export settings}),
 however, override everything.
 
-@node Publishing links, Sitemap, Publishing options, Configuration
+@node Publishing links
 @subsection Links between published files
 @cindex links, publishing
 
@@ -13370,7 +13390,7 @@ with relative file names, and provided you have also configured Org to upload
 the related files, these links will work too.  See @ref{Complex example}, for
 an example of this usage.
 
-@node Sitemap, Generating an index, Publishing links, Configuration
+@node Sitemap
 @subsection Generating a sitemap
 @cindex sitemap, of published pages
 
@@ -13430,7 +13450,7 @@ Defaults to @code{nil}.
 
 @end multitable
 
-@node Generating an index,  , Sitemap, Configuration
+@node Generating an index
 @subsection Generating an index
 @cindex index, in a publishing project
 
@@ -13447,7 +13467,7 @@ The file will be created when first publishing a project with the
 "theindex.inc"}.  You can then build around this include statement by adding
 a title, style information, etc.
 
-@node Uploading files, Sample configuration, Configuration, Publishing
+@node Uploading files
 @section Uploading files
 @cindex rsync
 @cindex unison
@@ -13480,7 +13500,7 @@ benefit of re-including any changed external files such as source example
 files you might include with @code{#+INCLUDE:}.  The timestamp mechanism in
 Org is not smart enough to detect if included files have been modified.
 
-@node Sample configuration, Triggering publication, Uploading files, Publishing
+@node Sample configuration
 @section Sample configuration
 
 Below we provide two example configurations.  The first one is a simple
@@ -13492,7 +13512,7 @@ more complex, with a multi-component project.
 * Complex example::             A multi-component publishing example
 @end menu
 
-@node Simple example, Complex example, Sample configuration, Sample configuration
+@node Simple example
 @subsection Example: simple publishing configuration
 
 This example publishes a set of Org files to the @file{public_html}
@@ -13510,7 +13530,7 @@ directory on the local machine.
                     type=\"text/css\"/>")))
 @end lisp
 
-@node Complex example,  , Simple example, Sample configuration
+@node Complex example
 @subsection Example: complex publishing configuration
 
 This more complicated example publishes an entire website, including
@@ -13560,7 +13580,7 @@ right place on the web server, and publishing images to it.
          ("website" :components ("orgfiles" "images" "other"))))
 @end lisp
 
-@node Triggering publication,  , Sample configuration, Publishing
+@node Triggering publication
 @section Triggering publication
 
 Once properly configured, Org can publish with the following commands:
@@ -13584,10 +13604,8 @@ above, or by customizing the variable @code{org-publish-use-timestamps-flag}.
 This may be necessary in particular if files include other files via
 @code{#+SETUPFILE:} or @code{#+INCLUDE:}.
 
-@comment  node-name,  next,  previous,  up
-@comment Working With Source Code, Miscellaneous, Publishing, Top
 
-@node Working With Source Code, Miscellaneous, Publishing, Top
+@node Working with source code
 @chapter Working with source code
 @cindex Schulte, Eric
 @cindex Davison, Dan
@@ -13628,10 +13646,8 @@ The following sections describe Org mode's code block handling facilities.
 * Batch execution::             Call functions from the command line
 @end menu
 
-@comment  node-name,  next,  previous,  up
-@comment  Structure of code blocks, Editing source code, Working With Source Code, Working With Source Code
 
-@node Structure of code blocks, Editing source code, Working With Source Code, Working With Source Code
+@node Structure of code blocks
 @section Structure of code blocks
 @cindex code block, structure
 @cindex source code, block structure
@@ -13640,7 +13656,7 @@ The following sections describe Org mode's code block handling facilities.
 
 Live code blocks can be specified with a @samp{src} block or
 inline.@footnote{Note that @samp{src} blocks may be inserted using Org mode's
-@ref{Easy Templates} system}  The structure of a @samp{src} block is
+@ref{Easy templates} system}  The structure of a @samp{src} block is
 
 @example
 #+NAME: <name>
@@ -13693,10 +13709,8 @@ basis using properties.
 Source code in the specified language.
 @end table
 
-@comment  node-name,  next,  previous,  up
-@comment  Editing source code, Exporting code blocks, Structure of code blocks, Working With Source Code
 
-@node Editing source code, Exporting code blocks, Structure of code blocks, Working With Source Code
+@node Editing source code
 @section Editing source code
 @cindex code block, editing
 @cindex source code, editing
@@ -13736,10 +13750,8 @@ variable to @code{nil} to switch without asking.
 To turn on native code fontification in the @emph{Org} buffer, configure the
 variable&nb