mirror of
https://git.savannah.gnu.org/git/emacs/org-mode.git
synced 2024-12-26 10:49:38 +00:00
org-list: Fix infloop when inserting an item
* lisp/org-list.el (org-list-separating-blank-lines-number): When computing number of blank lines separating items, also count those in unparsed blocks, like example blocks. * testing/lisp/test-org-list.el: Add tests. In the following situation, with `org-blank-before-new-entry' set to `auto' for `plain-list-item, a blank line should be inserted when inserting the following item: - item1 #+BEGIN_EXAMPLE contents #+END_EXAMPLE
This commit is contained in:
parent
2aeb28d2af
commit
5dbccdb432
@ -1230,7 +1230,9 @@ some heuristics to guess the result."
|
||||
;; Are there blank lines inside the list so far?
|
||||
((save-excursion
|
||||
(goto-char (org-list-get-top-point struct))
|
||||
(org-list-search-forward
|
||||
;; Do not use `org-list-search-forward' so blank lines
|
||||
;; in blocks can be counted in.
|
||||
(re-search-forward
|
||||
"^[ \t]*$" (org-list-get-item-end-before-blank item struct) t))
|
||||
1)
|
||||
;; Default choice: no blank line.
|
||||
|
@ -626,6 +626,93 @@
|
||||
(search-forward "Text1")
|
||||
(should (org-invisible-p2))))
|
||||
|
||||
(ert-deftest test-org-list/insert-item ()
|
||||
"Test item insertion."
|
||||
;; Blank lines specifications.
|
||||
;;
|
||||
;; Non-nil `org-blank-before-new-entry': insert a blank line, unless
|
||||
;; `org-empty-line-terminates-plain-lists' is non-nil.
|
||||
(should
|
||||
(org-test-with-temp-text "- a"
|
||||
(let ((org-empty-line-terminates-plain-lists nil)
|
||||
(org-blank-before-new-entry '((plain-list-item . t))))
|
||||
(end-of-line)
|
||||
(org-insert-item)
|
||||
(forward-line -1)
|
||||
(looking-at "$"))))
|
||||
(should-not
|
||||
(org-test-with-temp-text "- a"
|
||||
(let ((org-empty-line-terminates-plain-lists t)
|
||||
(org-blank-before-new-entry '((plain-list-item . t))))
|
||||
(end-of-line)
|
||||
(org-insert-item)
|
||||
(forward-line -1)
|
||||
(looking-at "$"))))
|
||||
;; Nil `org-blank-before-new-entry': do not insert a blank line.
|
||||
(should-not
|
||||
(org-test-with-temp-text "- a"
|
||||
(let ((org-empty-line-terminates-plain-lists nil)
|
||||
(org-blank-before-new-entry '((plain-list-item . nil))))
|
||||
(end-of-line)
|
||||
(org-insert-item)
|
||||
(forward-line -1)
|
||||
(looking-at "$"))))
|
||||
;; `org-blank-before-new-entry' set to auto: if there's no blank
|
||||
;; line already in the sole item, do not insert one.
|
||||
(should-not
|
||||
(org-test-with-temp-text "- a"
|
||||
(let ((org-empty-line-terminates-plain-lists nil)
|
||||
(org-blank-before-new-entry '((plain-list-item . auto))))
|
||||
(end-of-line)
|
||||
(org-insert-item)
|
||||
(forward-line -1)
|
||||
(looking-at "$"))))
|
||||
;; `org-blank-before-new-entry' set to `auto': if there's a blank
|
||||
;; line in the sole item, insert another one.
|
||||
(should
|
||||
(org-test-with-temp-text "- a\n\n b"
|
||||
(let ((org-empty-line-terminates-plain-lists nil)
|
||||
(org-blank-before-new-entry '((plain-list-item . auto))))
|
||||
(goto-char (point-max))
|
||||
(org-insert-item)
|
||||
(forward-line -1)
|
||||
(looking-at "$"))))
|
||||
;; `org-blank-before-new-entry' set to `auto': if the user specified
|
||||
;; a blank line, preserve it.
|
||||
(should
|
||||
(org-test-with-temp-text "- a\n\n"
|
||||
(let ((org-empty-line-terminates-plain-lists nil)
|
||||
(org-blank-before-new-entry '((plain-list-item . auto))))
|
||||
(goto-char (point-max))
|
||||
(org-insert-item)
|
||||
(forward-line -1)
|
||||
(looking-at "$"))))
|
||||
;; `org-blank-before-new-entry' set to `auto': if some items in list
|
||||
;; are already separated by blank lines, insert one.
|
||||
(should
|
||||
(org-test-with-temp-text "- a\n\n- b"
|
||||
(let ((org-empty-line-terminates-plain-lists nil)
|
||||
(org-blank-before-new-entry '((plain-list-item . auto))))
|
||||
(goto-char (point-max))
|
||||
(org-insert-item)
|
||||
(forward-line -1)
|
||||
(looking-at "$"))))
|
||||
(should
|
||||
(org-test-with-temp-text "- a\n\n- b"
|
||||
(let ((org-empty-line-terminates-plain-lists nil)
|
||||
(org-blank-before-new-entry '((plain-list-item . auto))))
|
||||
(org-insert-item)
|
||||
(forward-line)
|
||||
(looking-at "$"))))
|
||||
(should
|
||||
(org-test-with-temp-text "- a\n #+BEGIN_EXAMPLE\n\n x\n #+END_EXAMPLE"
|
||||
(let ((org-empty-line-terminates-plain-lists nil)
|
||||
(org-blank-before-new-entry '((plain-list-item . auto))))
|
||||
(goto-char (point-max))
|
||||
(org-insert-item)
|
||||
(forward-line -1)
|
||||
(looking-at "$")))))
|
||||
|
||||
|
||||
(provide 'test-org-list)
|
||||
;;; test-org-list.el ends here
|
||||
|
Loading…
Reference in New Issue
Block a user