emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/org 197d500607: org-element-cache: Setup before/after-c


From: ELPA Syncer
Subject: [elpa] externals/org 197d500607: org-element-cache: Setup before/after-change-functions in indirect buffers
Date: Sat, 25 Jun 2022 21:57:44 -0400 (EDT)

branch: externals/org
commit 197d5006070e3e6eac7e5bea8c46b186583ad564
Author: Ihor Radchenko <yantar92@gmail.com>
Commit: Ihor Radchenko <yantar92@gmail.com>

    org-element-cache: Setup before/after-change-functions in indirect buffers
    
    * lisp/org-element.el (org-element--cache-setup-change-functions): New
    function setting up `org-element--cache-before-change' and
    `org-element--cache-after-change'.
    (org-element-cache-reset): Setup before/after-change-functions inside
    indirect buffers.
---
 lisp/org-element.el | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

diff --git a/lisp/org-element.el b/lisp/org-element.el
index 61dbe4f142..d5b578103c 100644
--- a/lisp/org-element.el
+++ b/lisp/org-element.el
@@ -6782,6 +6782,16 @@ that range.  See `after-change-functions' for more 
information."
         ;; Activate a timer to process the request during idle time.
         (org-element--cache-set-timer (current-buffer))))))
 
+(defun org-element--cache-setup-change-functions ()
+  "Setup `before-change-functions' and `after-change-functions'."
+  (when (and (derived-mode-p 'org-mode) org-element-use-cache)
+    (add-hook 'before-change-functions
+             #'org-element--cache-before-change nil t)
+    ;; Run `org-element--cache-after-change' early to handle cases
+    ;; when other `after-change-functions' require element cache.
+    (add-hook 'after-change-functions
+             #'org-element--cache-after-change -1 t)))
+
 (defvar org-element--cache-avoid-synchronous-headline-re-parsing nil
   "This variable controls how buffer changes are handled by the cache.
 
@@ -7285,10 +7295,16 @@ buffers."
        (setq-local org-element--cache-change-warning nil)
        (setq-local org-element--cache-sync-requests nil)
        (setq-local org-element--cache-sync-timer nil)
-       (add-hook 'before-change-functions
-                 #'org-element--cache-before-change nil t)
-       (add-hook 'after-change-functions
-                 #'org-element--cache-after-change nil t)))))
+        (org-element--cache-setup-change-functions)
+        ;; Make sure that `org-element--cache-after-change' and
+        ;; `org-element--cache-before-change' are working inside properly 
created
+        ;; indirect buffers.  Note that `clone-indirect-buffer-hook'
+        ;; will not work inside indirect buffers not created by
+        ;; calling `clone-indirect-buffer'.  We consider that the code
+        ;; not using `clone-indirect-buffer' to be written with
+        ;; awareness about possible consequences.
+        (add-hook 'clone-indirect-buffer-hook
+                  #'org-element--cache-setup-change-functions)))))
 
 ;;;###autoload
 (defun org-element-cache-refresh (pos)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]