Browse Source

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.
Nicolas Goaziou 11 years ago
parent
commit
a7e5a74e2c
2 changed files with 26 additions and 3 deletions
  1. 4 3
      lisp/org.el
  2. 22 0
      testing/lisp/test-org.el

+ 4 - 3
lisp/org.el

@@ -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

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

@@ -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)))))