diff --git a/lisp/org-footnote.el b/lisp/org-footnote.el index c8c4dae80..fcc7579ba 100644 --- a/lisp/org-footnote.el +++ b/lisp/org-footnote.el @@ -281,7 +281,10 @@ otherwise." (save-excursion (goto-char (org-element-property :end context)) (skip-chars-backward " \r\t\n") (if (eq (org-element-class context) 'object) (point) - (1+ (line-beginning-position 2)))))) + (line-beginning-position 2))))) + ;; At the beginning of a footnote definition, right after the + ;; label, is OK. + ((eq type 'footnote-definition) (looking-at (rx space))) ;; Other elements are invalid. ((eq (org-element-class context) 'element) nil) ;; Just before object is fine. diff --git a/testing/lisp/test-org-footnote.el b/testing/lisp/test-org-footnote.el index 6d8ba2f44..8751dc842 100644 --- a/testing/lisp/test-org-footnote.el +++ b/testing/lisp/test-org-footnote.el @@ -90,7 +90,34 @@ (org-test-with-temp-text " *bold*" (let ((org-footnote-auto-label t)) (org-footnote-new)) (buffer-string)))) - ;; Arrow new footnotes in table cells. + ;; Allow new footnotes at the start of a footnote definition. + (should + (string-match-p + "\\[fn:1\\]\\[fn:2\\]" + (org-test-with-temp-text "[fn:1]" + (let ((org-footnote-auto-label t)) (org-footnote-new)) + (buffer-string)))) + (should + (string-match-p + "\\[fn:1\\] \\[fn:2\\]" + (org-test-with-temp-text "[fn:1] " + (let ((org-footnote-auto-label t)) (org-footnote-new)) + (buffer-string)))) + (should + (string-match-p + "\\[fn:1\\]\\[fn:2\\]" + (org-test-with-temp-text "[fn:1] \nParagraph" + (let ((org-footnote-auto-label t)) (org-footnote-new)) + (buffer-string)))) + (should-error + (org-test-with-temp-text "[fn:1]" + (let ((org-footnote-auto-label t)) (org-footnote-new)) + (buffer-string))) + (should-error + (org-test-with-temp-text "[fn:1]" + (let ((org-footnote-auto-label t)) (org-footnote-new)) + (buffer-string))) + ;; Allow new footnotes in table cells. (should (string-match-p " \\[fn:1\\]"