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

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

[elpa] externals/org 4eab5bd: org-element: Allow force-quitting during c


From: ELPA Syncer
Subject: [elpa] externals/org 4eab5bd: org-element: Allow force-quitting during cache sync
Date: Thu, 21 Oct 2021 08:57:22 -0400 (EDT)

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

    org-element: Allow force-quitting during cache sync
    
    * lisp/org-element.el (org-element--cache-interrupt-C-g,
    org-element--cache-interrupt-C-g-max-count,
    org-element--cache-interrupt-C-g-count): New variables controlling
    force-quitting cache sync process.  If
    `org-element--cache-interrupt-C-g' is non-nil, user can force
    terminating syncronisation request even in the middle of sync process
    by invoking `keyboard-quit'
    `org-element--cache-interrupt-C-g-max-count' times.
    `org-element--cache-interrupt-C-g-count' stores the number of
    invokations during current sync process.
    
    (org-element--cache-sync): Initialise
    `org-element--cache-interrupt-C-g-count' before processing sync
    request.
    (org-element--parse-to): Handle interruption in potentially infinite
    loop.
---
 lisp/org-element.el | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/lisp/org-element.el b/lisp/org-element.el
index e07f631..ca9ba67 100644
--- a/lisp/org-element.el
+++ b/lisp/org-element.el
@@ -5772,6 +5772,10 @@ Properties are modified by side-effect."
                        (plist-get properties key))))
        (and value (plist-put properties key (+ offset value)))))))
 
+(defvar org-element--cache-interrupt-C-g nil)
+(defvar org-element--cache-interrupt-C-g-max-count 5)
+(defvar org-element--cache-interrupt-C-g-count 0)
+
 (defun org-element--cache-sync (buffer &optional threshold future-change)
   "Synchronize cache with recent modification in BUFFER.
 
@@ -5797,6 +5801,7 @@ updated before current modification are actually 
submitted."
                           this-command)
             (org-element-cache-reset))
         (let ((inhibit-quit t) request next)
+          (setq org-element--cache-interrupt-C-g-count 0)
          (when org-element--cache-sync-timer
            (cancel-timer org-element--cache-sync-timer))
           (let ((time-limit (time-add nil org-element-cache-sync-duration)))
@@ -6262,8 +6267,17 @@ the process stopped before finding the expected result."
            (while t
             (when (org-element--cache-interrupt-p time-limit)
                (throw 'interrupt nil))
+             (when (and inhibit-quit org-element--cache-interrupt-C-g)
+               (when quit-flag
+                (cl-incf org-element--cache-interrupt-C-g-count)
+                 (setq quit-flag nil))
+               (when (> org-element--cache-interrupt-C-g-count
+                        org-element--cache-interrupt-C-g-max-count)
+                 (setq quit-flag t)
+                 (org-element-cache-reset)
+                 (error "org-element: Parsing aborted by user.  Cache has been 
cleared.")))
             (unless element
-               ;; Do not try to parse withi blank at EOB.
+               ;; Do not try to parse within blank at EOB.
                (unless (save-excursion
                          (org-skip-whitespace)
                          (eobp))



reply via email to

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