Browse Source

org-footnote: Fix f8c4102cc6e65d48e0b9502cc568843a86f92f1c

* lisp/org-footnote.el (org-footnote-new): Fix
  f8c4102cc6e65d48e0b9502cc568843a86f92f1c.

* testing/lisp/test-org-footnote.el (test-org-footnote/new): Add test.
Nicolas Goaziou 5 years ago
parent
commit
65ded0c7ed
2 changed files with 37 additions and 8 deletions
  1. 13 7
      lisp/org-footnote.el
  2. 24 1
      testing/lisp/test-org-footnote.el

+ 13 - 7
lisp/org-footnote.el

@@ -552,13 +552,19 @@ or new, let the user edit the definition of the footnote."
 	   (org-footnote-auto-adjust-maybe))
 	  (t
 	   (insert "[" label "]")
-	   (org-footnote-create-definition label)
-	   (org-footnote-auto-adjust-maybe)
-	   (if (ignore-errors (org-footnote-goto-definition label))
-	       (forward-char)
-	     ;; Definition was created outside current scope: edit it
-	     ;; remotely.
-	     (org-edit-footnote-reference))))))
+	   (let ((p (org-footnote-create-definition label)))
+	     ;; `org-footnote-goto-definition' needs to be called
+	     ;; after `org-footnote-auto-adjust-maybe'.  Otherwise
+	     ;; both label and location of the definition are lost.
+	     ;; On the contrary, it needs to be called before
+	     ;; `org-edit-footnote-reference' so that the remote
+	     ;; editing buffer can display the correct label.
+	     (if (ignore-errors (org-footnote-goto-definition label p))
+		 (org-footnote-auto-adjust-maybe)
+	       ;; Definition was created outside current scope: edit
+	       ;; it remotely.
+	       (org-footnote-auto-adjust-maybe)
+	       (org-edit-footnote-reference)))))))
 
 (defvar org-blank-before-new-entry) ; Silence byte-compiler.
 (defun org-footnote-create-definition (label)

+ 24 - 1
testing/lisp/test-org-footnote.el

@@ -98,7 +98,30 @@
     " \\*bold\\*\\[fn:1\\]"
     (org-test-with-temp-text " *bold*<point>"
       (let ((org-footnote-auto-label t)) (org-footnote-new))
-      (buffer-string)))))
+      (buffer-string))))
+  ;; When creating a new footnote, move to its definition.
+  (should
+   (string=
+    "[fn:1] "
+    (org-test-with-temp-text "Text<point>"
+      (let ((org-footnote-auto-label t)
+	    (org-footnote-auto-adjust nil))
+	(org-footnote-new))
+      (buffer-substring-no-properties (line-beginning-position) (point)))))
+  ;; Re-order and re-label footnotes properly when
+  ;; `org-footnote-auto-adjust' is non-nil.
+  (should
+   (string=
+    "[fn:1] 1\n\n[fn:2] \n\n[fn:3] 2\n"
+    (org-test-with-temp-text
+	"Text[fn:1]Text<point>Text[fn:2]\n\n[fn:1] 1\n\n[fn:2] 2"
+      (let ((org-footnote-auto-label t)
+	    (org-footnote-auto-adjust t)
+	    (org-footnote-section nil))
+	(org-footnote-new))
+      (buffer-substring-no-properties
+       (line-beginning-position -1)
+       (line-beginning-position 4))))))
 
 (ert-deftest test-org-footnote/delete ()
   "Test `org-footnote-delete' specifications."