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

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

[elpa] externals/org 54534ee 2/2: org-element-cache: Handle some edits i


From: ELPA Syncer
Subject: [elpa] externals/org 54534ee 2/2: org-element-cache: Handle some edits in top-level property drawer
Date: Tue, 7 Dec 2021 21:57:26 -0500 (EST)

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

    org-element-cache: Handle some edits in top-level property drawer
    
    * lisp/org-element.el (org-element--cache-sensitive-re): Make proprety
    drawer lines sensitive.
    (org-element--cache-for-removal): Make sensitive edits inside cache
    gap right after org-data re-parse the org-data.  Make sensitive
    top-section edits re-parse org-data.
    
    The specific error has been reported in
    https://github.com/yantar92/org/issues/40
    The recepy involves loading org-contrib:
    1. emacs -Q -L ~/.emacs.d/.local/straight/repos/org/lisp -L 
~/.emacs.d/.local/straight/repos/org-contrib/lisp -l org
     -l org-eldoc
     2. Create a test.org file with the following content:
     :PROPERTIES:
    :ID:       test
    :END:
    
    Test.
    3.
    (goto-char (point-min))
    (org-entry-put nil "ID" "test")
    (save-buffer)
    (org-entry-get nil "ID")
    Return value is nil, while should be "test"
---
 lisp/org-element.el | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/lisp/org-element.el b/lisp/org-element.el
index 7385733..5c52318 100644
--- a/lisp/org-element.el
+++ b/lisp/org-element.el
@@ -6495,7 +6495,7 @@ If you observe Emacs hangs frequently, please report this 
to Org mode mailing li
    org-list-full-item-re "\\|"
    ":\\(?: \\|$\\)" "\\|"
    "\\\\begin{[A-Za-z0-9*]+}" "\\|"
-   ":\\(?:\\w\\|[-_]\\)+:[ \t]*$"
+   ":\\(?:\\w\\|[-_]\\)+:[ \t]*.*$"
    "\\)")
   "Regexp matching a sensitive line, structure wise.
 A sensitive line is a headline, inlinetask, block, drawer, or
@@ -6619,6 +6619,11 @@ known element in cache (it may start after END)."
     (if (not before) after
       (let ((up before)
            (robust-flag t))
+        (when (and (eq 'org-data (org-element-type up))
+                   org-element--cache-change-warning)
+          ;; We may be doing changes in first section that affect
+          ;; org-data.
+          (setq org-element--cache-change-warning 'org-data))
        (while up
          (if (let ((type (org-element-type up)))
                 (or (and (memq type '( center-block dynamic-block
@@ -6644,7 +6649,17 @@ known element in cache (it may start after END)."
                          (pcase type
                            ;; Sensitive change in section.  Need to
                            ;; re-parse.
-                           (`section (not org-element--cache-change-warning))
+                           (`section
+                            (or (not org-element--cache-change-warning) ; 
robust
+                                (when (and org-element--cache-change-warning
+                                           (eq 'org-data
+                                               (org-element-type 
(org-element-property :parent up))))
+                                  ;; Breaking change in section
+                                  ;; potentially breaks org-data
+                                  ;; (i.e. top property drawer change).
+                                  (setq org-element--cache-change-warning 
'org-data)
+                                  ;; Not robust
+                                  nil)))
                            ;; Headline might be inserted.  This is non-robust
                            ;; change when `up' is a `headline' or `section'
                            ;; with `>' level compared to the inserted headline.



reply via email to

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