Browse Source

Fix headline insertion after an empty headline

* lisp/org.el (org-N-empty-lines-before-current): Make sure to delete
  only empty lines, not trailing whitespaces.

* testing/lisp/test-org.el (test-org/insert-heading): Add test.

Thanks to Oleh for reporting it.
http://permalink.gmane.org/gmane.emacs.orgmode/90876
Nicolas Goaziou 10 years ago
parent
commit
3f484a5277
2 changed files with 12 additions and 7 deletions
  1. 6 7
      lisp/org.el
  2. 6 0
      testing/lisp/test-org.el

+ 6 - 7
lisp/org.el

@@ -7733,13 +7733,12 @@ command."
   "Make the number of empty lines before current exactly N.
 So this will delete or add empty lines."
   (save-excursion
-    (goto-char (point-at-bol))
-    (if (looking-back "\\s-+" nil 'greedy)
-	(replace-match ""))
-    (or (bobp) (insert "\n"))
-    (while (> N 0)
-      (insert "\n")
-      (setq N (1- N)))))
+    (beginning-of-line)
+    (let ((p (point)))
+      (skip-chars-backward " \r\t\n")
+      (unless (bolp) (forward-line))
+      (delete-region (point) p))
+    (when (> N 0) (insert (make-string N ?\n)))))
 
 (defun org-get-heading (&optional no-tags no-todo)
   "Return the heading of the current entry, without the stars.

+ 6 - 0
testing/lisp/test-org.el

@@ -428,6 +428,12 @@
 	  (org-test-with-temp-text "Para<point>graph"
 	    (let ((org-M-RET-may-split-line '((default . nil))))
 	      (org-insert-heading))
+	    (buffer-string))))
+  ;; Corner case: correctly insert a headline after an empty one.
+  (should
+   (equal "* \n* "
+	  (org-test-with-temp-text "* <point>"
+	    (org-insert-heading)
 	    (buffer-string)))))
 
 (ert-deftest test-org/insert-todo-heading-respect-content ()