From b956d4077b582f01cc24dbd165a2c402c45dd2fe Mon Sep 17 00:00:00 2001 From: Carsten Dominik Date: Thu, 1 Jan 2009 18:01:07 +0100 Subject: [PATCH] Footnotes: Allow notes to be placed into the current entry. Setting org-footnote-section to nil now causes definitions to be inserted at the end of the current outline node, instead of into a special node names "Footnotes". --- ORGWEBPAGE/Changes.org | 2 +- lisp/org-footnote.el | 49 +++++++++++++++++++++++++----------------- 2 files changed, 30 insertions(+), 21 deletions(-) diff --git a/ORGWEBPAGE/Changes.org b/ORGWEBPAGE/Changes.org index 03536cf9a..e941f70e9 100644 --- a/ORGWEBPAGE/Changes.org +++ b/ORGWEBPAGE/Changes.org @@ -98,7 +98,7 @@ convert them to numbered ones before export. Thanks, Paul! Literal examples introduced with =#+BEGIN_EXAMPLE= or =#+BEGIN_SRC= do now allow optional line numbering in the example. Furthermore, links to specific code lines are supported, greatly -increasing Org-mode utility for writing tutorials and other +increasing Org-mode's utility for writing tutorials and other similar documents. Code references use special labels embedded directly into the diff --git a/lisp/org-footnote.el b/lisp/org-footnote.el index c55893627..488bd514f 100644 --- a/lisp/org-footnote.el +++ b/lisp/org-footnote.el @@ -62,15 +62,17 @@ (defcustom org-footnote-section "Footnotes" "Outline heading containing footnote definitions before export. -During editing, Org-mode places footnote definitions under this -special outline heading. You can have several such sections in a buffer, -Org-mode will always use the nearest. So, for example, each top-level -heading could have its own level-2 child for footnotes. -This is the heading where Org places the definition automatically. However, -by hand you may place definitions *anywhere*. -During export, all subtrees starting with this heading will be removed." +This can be nil, to place footnotes locally at the end of the current +outline node. If can also be the name of a special outline heading +under which footnotes should be put. +This variable defines the place where Org puts the definition +automatically. However, by hand you may place definitions *anywhere*. +If this is a string, during export, all subtrees starting with this +heading will be removed after extracting footnote definitions." :group 'org-footnotes - :type 'string) + :type '(choice + (string :tag "Special outline node name") + (const :tag "Define footnotes in the current outline node" nil))) (defcustom org-footnote-tag-for-non-org-mode-files "Footnotes:" "Tag marking the beginning of footnote section. @@ -205,12 +207,17 @@ or new, let the user edit the definition of the footnote." (let (re p) (cond ((org-mode-p) - (setq re (concat "^\\*+[ \t]+" org-footnote-section "[ \t]*$")) - (unless (or (re-search-forward re nil t) - (and (progn (widen) t) - (re-search-forward re nil t))) - (goto-char (point-max)) - (insert "\n\n* " org-footnote-section)) + (if (not org-footnote-section) + ;; No section, put foornote into the curren outline node + nil + ;; Try to find or make the special node + (setq re (concat "^\\*+[ \t]+" org-footnote-section "[ \t]*$")) + (unless (or (re-search-forward re nil t) + (and (progn (widen) t) + (re-search-forward re nil t))) + (goto-char (point-max)) + (insert "\n\n* " org-footnote-section))) + ;; Now go to the end of this entry and insert there. (outline-next-heading) (setq p (point)) (skip-chars-backward " \t\n\r") @@ -304,10 +311,11 @@ referenced sequence." (goto-char (point-min)) (cond ((org-mode-p) - (if (re-search-forward - (concat "^\\*[ \t]+" (regexp-quote org-footnote-section) - "[ \t]*$") - nil t) + (if (and org-footnote-section + (re-search-forward + (concat "^\\*[ \t]+" (regexp-quote org-footnote-section) + "[ \t]*$") + nil t)) (if for-preprocessor (replace-match "") (org-back-to-heading t) @@ -316,8 +324,9 @@ referenced sequence." (delete-region (point) (org-end-of-subtree t))) (goto-char (point-max)) (unless for-preprocessor - (insert "* " org-footnote-section "\n") - (setq ins-point (point))))) + (when org-footnote-section + (insert "* " org-footnote-section "\n") + (setq ins-point (point)))))) (t (if (re-search-forward (concat "^"