* lisp/org-footnote.el (org-footnote-new): Cannot insert an inline
footnote at beginning of line anymore.
(org-footnote-at-reference-p): Don't recognize inline footnotes at
beginning of line.
It is technically possible to allow inline footnotes at beginning of
line, their syntax being different enough from standard references.
Though, after normalizing them, they will become standard footnotes
still at beginning of line, which will break them.
Additionally, replace one
(or (org-mode-p) (derived-mode-p 'org-mode))
with
(derived-mode-p 'org-mode)
cause that is reflexive anyway (returns true, if the current mode is
org-mode).
Delete one check testing for org-mode or org derived mode
Hi all,
org-footnote-renumber-fn:N invalidates footnotes that appear as the
first thing on a line. Here's a test file including the recipe.
--8<---------------cut here---------------start------------->8---
* Bla
This is a line in which the following footnote that is inserted exactly
[fn:1] is the first thing in that line. And now invoke
org-footnote-renumber-fn:N and see it breaking.
* Footnotes
[fn:1] Test
--8<---------------cut here---------------end--------------->8---
Note, that in larger org files, it's likely that you don't even notice
that the footnotes break.
Once I added a patch on patchwork that fixed this issue, and that's
shown as "accepted".
http://patchwork.newartisans.com/patch/705/
I think, I've marked it as deferred or so myself because I've thought
the issue was fixed in the meantime, but that doesn't seem to be true.
Here's an updated patch.
* lisp/org-footnote.el (org-footnote-goto-definition): This patch
makes sure the function says when a definition has been found.
Thus, moving from the reference to the definition doesn't offer to
create the latter again.
* lisp/org-footnote.el (org-footnote-create-definition): When the tag
is missing, it is created before any existing footnote, or at end of
buffer. In the latter case, the marker pointing at the position
where the new footnote is going to be inserted (at end of buffer)
stays before the tag. This patch makes sure that the marker will be
kept after the tag.
* lisp/org-footnote.el (org-footnote-normalize): be sure to separate
the last footnote definition from the rest of the buffer.
Thanks to Jambunathan K for reporting this.
* lisp/org-footnote.el (org-footnote-get-definition): the function has
to widen buffer if definition has not been found in the current
narrowed part. Be sure to restore that restriction once the
definition is found.
Also remove blank lines before the ";;; org*el ends here" declarations.
Having a "Version" header forced us to update every file when releasing a
new version of Org; it also forced us to update every file when merging Org
with Emacs trunk, thus cluttering the diffs between the previously merged
version and the new one with useless information.
Glenn Morris suggested this in emacs-devel:
http://lists.gnu.org/archive/html/emacs-devel/2011-08/msg00322.html
* lisp/org-footnote.el (org-footnote-normalize): effectively remove
any footnote tag in non Org buffers, as detailled in
org-footnote-tag-for-non-org-mode-files doc-string.
* lisp/org-footnote.el (org-footnote-tag-for-non-org-mode-files):
notify the opportunity to set the variable to the empty string.
(org-footnote-normalize, org-footnote-create-definition): carefully
check for inserted newlines and presence of the footnote
tag.
* lisp/org-footnote.el (org-footnote-new): use ido or iswitchb when
available when prompted for a label. Also rename a local variable to
avoid confusion with an existing function.
* lisp/org-footnote.el (org-footnote-in-valid-context-p): check
`org-protected' property before allowing to match a footnote.
(org-footnote-at-reference-p): remove an obsolete test. It's now done
in the previous function.
* lisp/org-footnote.el (org-footnote-next-reference-or-definition): if
no more footnote is found, be sure to go back to the original
position. Otherwise, point might be left on a footnote-like element
that has been dished out.
* lisp/org-footnote.el (org-footnote-create-definition): when skipping
already written footnotes definition, the algorithme would assume
each one was only one-line long.
* lisp/org-footnote.el (org-footnote-in-valid-context-p): avoid cited
lines and headers in message-mode.
(org-footnote-at-reference-p): remove check for cited lines, this is
now handled by the previous function. Refactor.
* lisp/org-footnote.el (org-footnote-at-reference-p): test if match is
in cited text, when replying to a message.
(org-footnote-new): do not create a new footnote at bol, as it might
be seen as a definition.
(org-footnote-at-definition-p): ignore definitions in forbidden
blocks, as it is already the case for references.
Use `org-outline-regexp' instead or `outline-regexp'. Also use the
new defconst `org-outline-regexp-bol' to match `org-outline-regexp'
at the beginning of line.
* org.el (org-outline-regexp-bol): New defconst.
(org-outline-level, org-set-font-lock-defaults, org-cycle)
(org-overview, org-content, org-flag-drawer)
(org-first-headline-recenter, org-insert-todo-heading)
(org-map-region, org-move-subtree-down, org-paste-subtree)
(org-kill-is-subtree-p, org-context-p, org-refile)
(org-refile-new-child, org-toggle-comment, org-todo)
(org-add-planning-info, org-add-log-setup, org-scan-tags)
(org-set-tags, org-insert-property-drawer)
(org-prepare-agenda-buffers, org-preview-latex-fragment)
(org-speed-command-default-hook, org-check-for-hidden)
(org-toggle-item, org-toggle-heading)
(org-indent-line-function, org-set-autofill-regexps)
(org-fill-paragraph, org-toggle-fixed-width-section)
(org-yank-generic, org-yank-folding-would-swallow-text)
(org-first-sibling-p, org-goto-sibling)
(org-goto-first-child, org-show-entry): Use
`org-outline-regexp' and `org-outline-regexp-bol'.
* org-remember.el (org-remember-handler): Use
`org-outline-regexp-bol'.
* org-mouse.el (org-mouse-match-todo-keyword, org-mode-hook)
(org-mouse-move-tree, org-mouse-transform-to-outline): Use
`org-outline-regexp' and `org-outline-regexp-bol'.
* org-macs.el (org-with-limited-levels)
(org-get-limited-outline-regexp): Use `org-outline-regexp'.
* org-indent.el (org-indent-outline-re)
(org-indent-refresh-section, org-indent-refresh-to): Use
`org-outline-regexp' and `org-outline-regexp-bol'.
* org-html.el (org-export-as-html): Use
`org-outline-regexp-bol'.
* org-footnote.el (org-footnote-at-definition-p)
(org-footnote-normalize): Use `org-outline-regexp' and
`org-outline-regexp-bol'.
* org-exp.el (org-export-preprocess-string): Don't redefine
`outline-regexp'.
* org-docbook.el (org-export-as-docbook): Use
`org-outline-regexp-bol'.
* org-colview.el (org-columns, org-columns-compute): Use
`org-outline-regexp' and `org-outline-regexp-bol'.
* org-colview-xemacs.el (org-columns, org-columns-compute):
Use `org-outline-regexp-bol'.
* org-clock.el (org-clock-insert-selection-line)
(org-clock-in, org-clock-out, org-dblock-write:clocktable):
Use `org-outline-regexp' and `org-outline-regexp-bol'.
* org-ascii.el (org-export-as-ascii)
(org-export-ascii-push-links): Use `org-outline-regexp' and
`org-outline-regexp-bol'.
* org-archive.el (org-archive-to-archive-sibling)
(org-archive-all-done): Use `org-outline-regexp' and
`org-outline-regexp-bol'.
* org-agenda.el (org-agenda, org-search-view)
(org-agenda-list-stuck-projects, org-agenda-get-timestamps)
(org-agenda-get-progress, org-agenda-get-blocks): Use
`org-outline-regexp' and `org-outline-regexp-bol'.
* lisp/org-exp.el (org-export-preprocess-string): add the possibility
to call recursively the function. Also change order of some function
calls. Comment export process for footnotes.
* lisp/org-footnote.el (org-footnote-normalize): change the export
specific parameter to hold properties of export. Thus, the function
can send every footnote definition in the buffer through
`org-export-process-string'.
* lisp/org.el (org-in-block-p): new function.
* lisp/org-footnote.el (org-footnote-forbidden-blocks): new variable.
(org-footnote-in-valid-context-p): new function.
(org-footnote-at-reference-p): use new function. Allow inline
footnotes to start at bol.
* lisp/org-footnote.el (org-footnote-at-reference-p): verify that what
looks like a footnote doesn't belong to a link.
(org-footnote-next-reference-or-definition): check more strictly
footnote definitions.
* lisp/org-footnote.el (org-footnote-at-reference-p): first check if
point is at the beginning of a footnote. Indeed `org-in-regexp'
first checks backwards and might find an incorrect footnote if they
are side-by-side.
* lisp/org-footnote.el (org-footnote-re): avoid matching inactive
time-stamps or check-box cookies.
(org-footnote-next-reference-or-definition): adapt to the new regexp.
* lisp/org-footnote.el (org-footnote-normalize): add `org-footnote'
property to footnote markers when preparing for exportation.
* lisp/org-html.el (org-export-as-html): read new property to decide
when to export a footnote.
* lisp/org-docbook.el (org-export-as-docbook): read new property to
decide when to export a footnote.
* lisp/org-latex.el (org-export-latex-preprocess): ensure footnote at
column 0 cannot end a list containing it by adding
`original-indentation' property to it.
* lisp/org-exp.el (org-export-footnotes-markers,
org-export-footnotes-data): new variables.
(org-export-preprocess-string): use a more explicit argument.
* lisp/org-html.el (org-export-as-html): initialize new variables.
* lisp/org-docbook.el (org-export-as-docbook): initialize new variables.
* lisp/org-latex.el (org-export-latex-footmark-seen): new variable.
(org-export-as-latex): initialize new variables.
(org-export-latex-preprocess): allow to export two or more footnotes
in a row. Also permit to have footnotes refering to previously
defined footnotes.
* lisp/org-ascii.el (org-export-as-ascii): feed org-footnote-normalize
with data so it can normalize footnotes before first headline, or
footnotes with their definition outside exported region.
* lisp/org-footnote.el (org-footnote-goto-definition): now,
determining if point is at a footnote reference is entirely
determined by `org-footnote-at-reference-p'. No need to check if
pattern isn't at beginning of the line elsewhere.
* lisp/org-footnote.el (org-footnote-next-reference-or-definition):
new function.
* lisp/org.el (org-activate-footnote-links): activate the whole
footnote, but only fontify its label.
* lisp/org-footnote.el (org-footnote-normalize): make use of changes
to `org-footnote-at-reference-p' and creation of various functions..
Also comment code.
(org-footnote-get-next-reference, org-footnote-delete-references,
org-footnote-delete-definitions): new functions
(org-footnote-goto-previous-reference, org-footnote-all-labels,
org-insert-footnote-reference-near-definition, org-footnote-delete):
rewrite to use org-footnote-get-next-reference.
* lisp/org-footnote.el (org-footnote-re): don't end an inline footnote
at unrelated closing square brackets.
(org-footnote-at-reference-p): improve accuracy of the function to
determine if point is at a reference and to extract definition of an
inline footnote.
(org-footnote-all-labels, org-footnote-action, org-footnote-delete,
org-footnote-auto-adjust-maybe): make use of previous function.
PATCH-5/5 org-odt compatibility patch
From 22c4feee78ff9a1ab7cc48275ec29d322a3472a1 Mon Sep 17 00:00:00 2001
From: Jambunathan K <kjambunathan@gmail.com>
Date: Thu, 23 Jun 2011 13:17:18 +0530
Subject: [PATCH 5/5] Control insertion point for footnote definitions during pre-process.
* lisp/org-footnote.el
(org-footnote-insert-pos-for-preprocessor): New variable.
(org-footnote-normalize): Use it.
* lisp/org-footnote.el: (org-footnote-auto-label): New random option
* lisp/org-footnote.el: (org-footnote-new): Create random footnote
labels with unique ids
* lisp/org-footnote.el: (org-footnote-create-definition): Allow for
footnote sections above the current footnote insertion point.
Fixes bug in which org-mode will create a new footnote section if the
current footnote section is not beneath the current insertion point.
* lisp/org-footnote.el: (org-footnote-create-definition): Don't search
for last footnote when in org-mode file.
The recent changes to accommodate signatures in message-mode instruct
org-mode to search for the last footnote in the entire buffer when
inserting a new footnote definition. This causes problems in org
buffers, since org-footnote-goto-local-insertion-point already finds
the correct insertion point. (I.e., the insertion point is always
placed in beneath the last footnote in the buffer, even if
org-footnote-section is nil.) This patch invokes the search only if in
non org-mode buffers.
* org-footnote.el (org-footnote-create-definition): Place Footnotes
section before message-signature-separator also in modes derived
from message-mode.
* lisp/org-footnote.el (org-footnote-create-definition)
(org-footnote-goto-local-insertion-point): Add footnotes before
signature when in message-mode.
Scot Beker writes:
> I cite my references in org like
> this.\autocite[231]{bibtexkey_2009}, where '231' is the
> relevant page number. When exporting to LaTeX, Org thinks
> that the value in square brackets is a footnote number and
> produces a document with a "footnote definition not found:
> 231" error message at the bottom of the document. My
> settings are below, and I've searched pretty hard through
> them to look for anything that might have caused it. Any
> ideas?
Matt Lundin writes:
> I have org-footnote-section set to "Footnotes." If I insert a new
> footnote while...
>
> 1. the "* Footnotes" tree already exists and
>
> 2. the "* Footnotes" tree is folded
>
> ...the footnote definition label is inserted, but the "* Footnotes"
> subtree remains folded and the cursor jumps to the "* Footnotes"
> headline rather than the definition line.
>
> I've tried using org-reveal (C-c C-r) to open the "Footnotes" section,
> but nothing happens. I've tried typing C-c C-c to go back to the
> footnote, but since the cursor is on a headline, the result is a tag
> prompt. When I hit TAB to cycle, the cursor remains on the headline.
Nick Dokos writes:
> I define a LaTeX macro at the top of my document, like so:
>
> ,----
> | ...
> | #+LATEX_HEADER: \newcommand{\rowstyle}[1]{\gdef\currentrowstyle{#1}%
> | #+LATEX_HEADER: #1\ignorespaces
> | #+LATEX_HEADER: }
> | ...
> `----
>
> and export - I get the following inserted:
>
> ,----
> | ...
> | \begin{document}
> |
> |
> |
> |
> |
> | \$\^{}{1}\$ FOOTNOTE DEFINITION NOT FOUND: 1
> | ...
> `----
>
> Obviously, the macro argument spec is mistaken for a footnote.
Customize the new variable org-footnote-auto-adjust or use the STARTUP
option fnadjust to get automatic renumbering and sorting of footnotes
after each insertion/deletion.
This commit adds a new action to the footnote actions:
It allows to renumber footnote marks that have the simple form
fn:N where N is a number. After this action, numbers will start from
1 and increase through the document.