Browse Source

org-footnote: Fix footnote deletion

* lisp/org-footnote.el (org-footnote-delete-definitions): Preserve
  blank lines after the definition.
* testing/lisp/test-org-footnote.el (test-org-footnote/delete): Add
  test.
Nicolas Goaziou 1 year ago
parent
commit
9a8506b7af
2 changed files with 22 additions and 9 deletions
  1. 12 8
      lisp/org-footnote.el
  2. 10 1
      testing/lisp/test-org-footnote.el

+ 12 - 8
lisp/org-footnote.el

@@ -712,14 +712,18 @@ Return the number of footnotes removed."
     (let ((def-re (format "^\\[fn:%s\\]" (regexp-quote label)))
 	  (ndef 0))
       (while (re-search-forward def-re nil t)
-	(let ((full-def (org-footnote-at-definition-p)))
-	  (when full-def
-	    ;; Remove the footnote, and all blank lines before it.
-	    (goto-char (nth 1 full-def))
-	    (skip-chars-backward " \r\t\n")
-	    (unless (bolp) (forward-line))
-	    (delete-region (point) (nth 2 full-def))
-	    (cl-incf ndef))))
+	(pcase (org-footnote-at-definition-p)
+	  (`(,_ ,start ,end ,_)
+	   ;; Remove the footnote, and all blank lines before it.
+	   (delete-region (progn
+			    (goto-char start)
+			    (skip-chars-backward " \r\t\n")
+			    (if (bobp) (point) (line-beginning-position 2)))
+			  (progn
+			    (goto-char end)
+			    (skip-chars-backward " \r\t\n")
+			    (if (bobp) (point) (line-beginning-position 2))))
+	   (cl-incf ndef))))
       ndef)))
 
 (defun org-footnote-delete (&optional label)

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

@@ -166,7 +166,16 @@
 	    (org-test-with-temp-text
 		"Para[fn:1]\n\n[fn:1] para1\n\npara2\n\n\nOutside footnote."
 	      (org-footnote-delete "1")
-	      (org-trim (buffer-string)))))))
+	      (org-trim (buffer-string))))))
+  ;; Remove blank lines above the footnote but preserve those after
+  ;; it.
+  (should
+   (equal "Text\n\n\nOther text."
+	  (let ((org-footnote-section nil))
+	    (org-test-with-temp-text
+		"Text[fn:1]\n\n[fn:1] Definition.\n\n\nOther text."
+	      (org-footnote-delete "1")
+	      (buffer-string))))))
 
 (ert-deftest test-org-footnote/goto-definition ()
   "Test `org-footnote-goto-definition' specifications."