Fix display bug when inserting a heading

* lisp/org.el (org-N-empty-lines-before-current): Do not hide newline
  character before current headline.

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

Reported-by: Rick Frankel <rick@rickster.com>
<http://permalink.gmane.org/gmane.emacs.orgmode/112751>
This commit is contained in:
Nicolas Goaziou 2017-03-16 13:01:39 +01:00
parent e1cd71532f
commit f2e5920f41
2 changed files with 17 additions and 9 deletions

View File

@ -7881,15 +7881,14 @@ unconditionally."
(defun org-N-empty-lines-before-current (n)
"Make the number of empty lines before current exactly N.
So this will delete or add empty lines."
(let ((column (current-column))
(empty-lines (make-string n ?\n)))
(save-excursion
(beginning-of-line)
(let ((p (point)))
(skip-chars-backward " \r\t\n")
(unless (bolp) (forward-line))
(delete-region (point) p))
(insert empty-lines)
(move-to-column column)))
(unless (bobp)
(let ((start (save-excursion
(skip-chars-backward " \r\t\n")
(line-end-position))))
(delete-region start (line-end-position 0))))
(insert (make-string n ?\n))))
(defun org-get-heading (&optional no-tags no-todo no-priority no-comment)
"Return the heading of the current entry, without the stars.

View File

@ -1342,7 +1342,16 @@
(equal "* H1\n* H2\n* \n"
(org-test-with-temp-text "* H1\n* H2<point>\n"
(org-insert-heading)
(buffer-string)))))
(buffer-string))))
;; Preserve visibility at beginning of line. In particular, when
;; removing spurious blank lines, do not visually merge heading with
;; the line visible above.
(should-not
(org-test-with-temp-text "* H1<point>\nContents\n\n* H2\n"
(org-overview)
(let ((org-blank-before-new-entry '((heading . nil))))
(org-insert-heading '(4)))
(invisible-p (line-end-position 0)))))
(ert-deftest test-org/insert-todo-heading-respect-content ()
"Test `org-insert-todo-heading-respect-content' specifications."