Pārlūkot izejas kodu

Fix `org-insert-heading'

* lisp/org.el (org-insert-heading): Fix some corner case when point is
  in an invisible list.

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

Reported-by: Luke Crook <luke@balooga.com>
<http://permalink.gmane.org/gmane.emacs.orgmode/92619>
Nicolas Goaziou 10 gadi atpakaļ
vecāks
revīzija
59111b77ef
2 mainītis faili ar 31 papildinājumiem un 3 dzēšanām
  1. 1 3
      lisp/org.el
  2. 30 0
      testing/lisp/test-org.el

+ 1 - 3
lisp/org.el

@@ -7621,9 +7621,7 @@ command."
 	       (insert "\n* ")))
       (run-hooks 'org-insert-heading-hook))
 
-     ((and itemp (not (member arg '((4) (16)))))
-      ;; Insert an item
-      (org-insert-item))
+     ((and itemp (not (member arg '((4) (16)))) (org-insert-item)))
 
      (t
       ;; Maybe move at the end of the subtree

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

@@ -429,6 +429,36 @@
 	    (let ((org-M-RET-may-split-line '((default . nil))))
 	      (org-insert-heading))
 	    (buffer-string))))
+  ;; When on a list, insert an item instead, unless called with an
+  ;; universal argument or if list is invisible.  In this case, create
+  ;; a new headline after contents.
+  (should
+   (equal "* H\n- item\n- "
+	  (org-test-with-temp-text "* H\n- item<point>"
+	    (let ((org-insert-heading-respect-content nil))
+	      (org-insert-heading))
+	    (buffer-string))))
+  (should
+   (equal "* H\n- item\n- item 2\n* "
+	  (org-test-with-temp-text "* H\n- item<point>\n- item 2"
+	    (let ((org-insert-heading-respect-content nil))
+	      (org-insert-heading '(4)))
+	    (buffer-string))))
+  (should
+   (equal "* H\n- item\n* "
+	  (org-test-with-temp-text "* H\n- item"
+	    (org-cycle)
+	    (goto-char (point-max))
+	    (let ((org-insert-heading-respect-content nil)) (org-insert-heading))
+	    (buffer-string))))
+  ;; When called with two universal arguments, insert a new headline
+  ;; at the end of the grandparent subtree.
+  (should
+   (equal "* H1\n** H3\n- item\n** H2\n** "
+	  (org-test-with-temp-text "* H1\n** H3\n- item<point>\n** H2"
+	    (let ((org-insert-heading-respect-content nil))
+	      (org-insert-heading '(16)))
+	    (buffer-string))))
   ;; Corner case: correctly insert a headline after an empty one.
   (should
    (equal "* \n* "