Merge branch 'bugfix'

This commit is contained in:
Ihor Radchenko 2023-02-01 00:21:06 +03:00
commit b363ec04a2
No known key found for this signature in database
GPG Key ID: 6470762A7DA11D8B
2 changed files with 36 additions and 15 deletions

View File

@ -7411,14 +7411,16 @@ the cache."
(org-element-at-point to-pos)
(cl-macrolet ((cache-root
;; Use the most optimal version of cache available.
() `(if (memq granularity '(headline headline+inlinetask))
(org-element--headline-cache-root)
(org-element--cache-root)))
() `(org-with-base-buffer nil
(if (memq granularity '(headline headline+inlinetask))
(org-element--headline-cache-root)
(org-element--cache-root))))
(cache-size
;; Use the most optimal version of cache available.
() `(if (memq granularity '(headline headline+inlinetask))
org-element--headline-cache-size
org-element--cache-size))
() `(org-with-base-buffer nil
(if (memq granularity '(headline headline+inlinetask))
org-element--headline-cache-size
org-element--cache-size)))
(cache-walk-restart
;; Restart tree traversal after AVL tree re-balance.
() `(when node
@ -7448,8 +7450,9 @@ the cache."
;; Avoid extra staff like timer cancels et al
;; and only call `org-element--cache-sync-requests' when
;; there are pending requests.
(when org-element--cache-sync-requests
(org-element--cache-sync (current-buffer)))
(org-with-base-buffer nil
(when org-element--cache-sync-requests
(org-element--cache-sync (current-buffer))))
;; Call `org-element--parse-to' directly avoiding any
;; kind of `org-element-at-point' overheads.
(if restrict-elements
@ -7520,8 +7523,9 @@ the cache."
tmpnext-start))
;; Check if cache does not have gaps.
(cache-gapless-p
() `(eq org-element--cache-change-tic
(alist-get granularity org-element--cache-gapless))))
() `(org-with-base-buffer nil
(eq org-element--cache-change-tic
(alist-get granularity org-element--cache-gapless)))))
;; The core algorithm is simple walk along binary tree. However,
;; instead of checking all the tree elements from first to last
;; (like in `avl-tree-mapcar'), we begin from FROM-POS skipping
@ -7649,7 +7653,9 @@ the cache."
;; In the process, we may alter the buffer,
;; so also keep track of the cache state.
(progn
(setq modified-tic org-element--cache-change-tic)
(setq modified-tic
(org-with-base-buffer nil
org-element--cache-change-tic))
(setq cache-size (cache-size))
;; When NEXT-RE/FAIL-RE is provided, skip to
;; next regexp match after :begin of the current
@ -7683,7 +7689,7 @@ the cache."
;;
;; Call FUNC. FUNC may move point.
(setq org-element-cache-map-continue-from nil)
(if org-element--cache-map-statistics
(if (org-with-base-buffer nil org-element--cache-map-statistics)
(progn
(setq before-time (float-time))
(push (funcall func data) result)
@ -7723,8 +7729,9 @@ the cache."
start))
(setq start nil))
;; Check if the buffer has been modified.
(unless (and (eq modified-tic org-element--cache-change-tic)
(eq cache-size (cache-size)))
(unless (org-with-base-buffer nil
(and (eq modified-tic org-element--cache-change-tic)
(eq cache-size (cache-size))))
;; START may no longer be valid, update
;; it to beginning of real element.
;; Upon modification, START may lay

View File

@ -2741,6 +2741,7 @@ SCHEDULED: <2014-03-04 tue.>"
(org-element-property
:begin (org-element-at-point))))))
(buffer-string))))
;; Move point.
(should
(= 1
(org-test-with-temp-text "* H1\n** H1.1\n** H1.2\n"
@ -2760,7 +2761,20 @@ SCHEDULED: <2014-03-04 tue.>"
(push (org-element-property :title (org-element-at-point)) acc)
(setq org-map-continue-from
(line-end-position 2))))
(length acc))))))
(length acc)))))
;; Modifications inside indirect buffer.
(should
(= 3
(org-test-with-temp-text "<point>* H1\n** H1.1\n** H1.2\n"
(with-current-buffer (org-get-indirect-buffer)
(let ((acc 0))
(org-map-entries
(lambda ()
(cl-incf acc)
(beginning-of-line 2)
(insert "test\n")
(beginning-of-line -1)))
acc))))))
(ert-deftest test-org/edit-headline ()
"Test `org-edit-headline' specifications."