diff --git a/lisp/org.el b/lisp/org.el index cd57ec70d..4ffe1e8f4 100755 --- a/lisp/org.el +++ b/lisp/org.el @@ -7881,13 +7881,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. diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el index c1aeaa4f6..c91dcbeb9 100644 --- a/testing/lisp/test-org.el +++ b/testing/lisp/test-org.el @@ -731,6 +731,12 @@ (org-test-with-temp-text "Paragraph" (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 "* " + (org-insert-heading) (buffer-string))))) (ert-deftest test-org/insert-todo-heading-respect-content ()