Fix `org-insert-heading' at buffer boundaries

* lisp/org.el (org-insert-heading): Do not error out when inserting is
  to be done at one of the buffer's boundaries.
* testing/lisp/test-org.el: Add tests.
This commit is contained in:
Nicolas Goaziou 2013-10-29 09:55:01 +01:00
parent 8eadca98a6
commit a7e5a74e2c
2 changed files with 26 additions and 3 deletions

View File

@ -7569,7 +7569,8 @@ This is important for non-interactive uses of the command."
(and (ignore-errors (org-back-to-heading invisible-ok))
(org-at-heading-p))))
(or arg (not itemp))))
;; At beginning of buffer or so hight up that only a heading makes sense.
;; At beginning of buffer or so high up that only a heading
;; makes sense.
(insert
(if (or (bobp) (org-previous-line-empty-p)) "" "\n")
(if (org-in-src-block-p) ",* " "* "))
@ -7631,9 +7632,9 @@ This is important for non-interactive uses of the command."
(org-end-of-subtree nil t)
(skip-chars-backward " \r\n")
(and (looking-at "[ \t]+") (replace-match ""))
(forward-char 1)
(unless (eobp) (forward-char 1))
(when (looking-at "^\\*")
(backward-char 1)
(unless (bobp) (backward-char 1))
(insert "\n")))
;; If we are splitting, grab the text that should be moved to the new headline

View File

@ -407,6 +407,28 @@
(beginning-of-line)
(looking-at "- $")))))
(ert-deftest test-org/insert-todo-heading-respect-content ()
"Test `org-insert-todo-heading-respect-content' specifications."
;; Create a TODO heading.
(should
(org-test-with-temp-text "* H1\n Body"
(org-insert-todo-heading-respect-content)
(nth 2 (org-heading-components))))
;; Add headline after body of current subtree.
(should
(org-test-with-temp-text "* H1\nBody"
(org-insert-todo-heading-respect-content)
(eobp)))
(should
(org-test-with-temp-text "* H1\n** H2\nBody"
(org-insert-todo-heading-respect-content)
(eobp)))
;; In a list, do not create a new item.
(should
(org-test-with-temp-text "* H\n- an item\n- another one"
(search-forward "an ")
(org-insert-todo-heading-respect-content)
(and (eobp) (org-at-heading-p)))))