~bzg/org-mode

84e5a4da54c1ef5c01f6d46edeb8f6db938a0e52 — Ihor Radchenko 1 year, 3 months ago f2e71ee
org-element-cache-map: Fix edge case when FUNC removes DATA

* lisp/org-element.el (org-element-cache-map): Fix when DATA is
obsolete after buffer modification.
* testing/lisp/test-org.el (test-org/map-entries): Add test.

Reported-by: Victor A. Stoichita <victor@svictor.net>
Link: https://orgmode.org/list/87v8fzxbfo.fsf@svictor.net
2 files changed, 26 insertions(+), 2 deletions(-)

M lisp/org-element.el
M testing/lisp/test-org.el
M lisp/org-element.el => lisp/org-element.el +2 -1
@@ 7734,7 7734,8 @@ the cache."
                              ;; it to real beginning then despite
                              ;; START being larger.
                              (setq start nil)
                              (move-start-to-next-match nil)
                              (let ((data nil)) ; data may not be valid. ignore it.
                                (move-start-to-next-match nil))
                              ;; The new element may now start before
                              ;; or at already processed position.
                              ;; Make sure that we continue from an

M testing/lisp/test-org.el => testing/lisp/test-org.el +24 -1
@@ 2774,7 2774,30 @@ SCHEDULED: <2014-03-04 tue.>"
               (beginning-of-line 2)
               (insert "test\n")
               (beginning-of-line -1)))
            acc))))))
            acc)))))
  ;; Removing heading being processed.
  (should
   (equal
    "Some text
Some text
Some more text
Let’s stop here
"
    (org-test-with-temp-text
        "* Heading 1
Some text
** Heading 1.1
Some text
* Heading 2
Some more text
** Heading 2.1
Let’s stop here
"
      (org-map-entries
       (lambda ()
         (delete-region (point) (line-beginning-position 2))
         (setq org-map-continue-from (point))))
      (buffer-string)))))

(ert-deftest test-org/edit-headline ()
  "Test `org-edit-headline' specifications."