Browse Source

footnote: Allow new footnotes in empty cells

* lisp/org-footnote.el (org-footnote--allow-reference-p): allow
inserting new footnotes in empty cells.
* testing/lisp/test-org-footnote.el (test-org-footnote/new): Add
tests.

Reported-by: Uwe Brauer <oub@mat.ucm.es>
<http://lists.gnu.org/r/emacs-orgmode/2021-05/msg00940.html>
Nicolas Goaziou 3 years ago
parent
commit
13c78a5900
2 changed files with 23 additions and 0 deletions
  1. 4 0
      lisp/org-footnote.el
  2. 19 0
      testing/lisp/test-org-footnote.el

+ 4 - 0
lisp/org-footnote.el

@@ -288,6 +288,10 @@ otherwise."
        ((= (point) (org-element-property :begin context)))
        ;; Within recursive object too, but not in a link.
        ((eq type 'link) nil)
+       ((eq type 'table-cell)
+        ;; :contents-begin is not reliable on empty cells, so special
+        ;; case it.
+        (<= (point) (org-element-property :contents-end context)))
        ((let ((cbeg (org-element-property :contents-begin context))
 	      (cend (org-element-property :contents-end context)))
 	  (and cbeg (>= (point) cbeg) (<= (point) cend))))))))

+ 19 - 0
testing/lisp/test-org-footnote.el

@@ -90,6 +90,25 @@
     (org-test-with-temp-text " *bold*<point>"
       (let ((org-footnote-auto-label t)) (org-footnote-new))
       (buffer-string))))
+  ;; Arrow new footnotes in empty cells.
+  (should
+   (string-match-p
+    " \\[fn:1\\]"
+    (org-test-with-temp-text "| <point> |"
+      (let ((org-footnote-auto-label t)) (org-footnote-new))
+      (buffer-string))))
+  (should
+   (string-match-p
+    "|\\[fn:1\\]"
+    (org-test-with-temp-text "|<point> |"
+      (let ((org-footnote-auto-label t)) (org-footnote-new))
+      (buffer-string))))
+  (should
+   (string-match-p
+    " \\[fn:1\\]"
+    (org-test-with-temp-text "| <point>|"
+      (let ((org-footnote-auto-label t)) (org-footnote-new))
+      (buffer-string))))
   ;; When creating a new footnote, move to its definition.
   (should
    (string=