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

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

[elpa] externals/org c9b80f06d4 3/3: org-fold-core-next-folding-state-ch


From: ELPA Syncer
Subject: [elpa] externals/org c9b80f06d4 3/3: org-fold-core-next-folding-state-change: Optimize performance
Date: Thu, 13 Jul 2023 12:58:41 -0400 (EDT)

branch: externals/org
commit c9b80f06d4cf085adc373af50c8a80ffc27f4cd0
Author: Ihor Radchenko <yantar92@posteo.net>
Commit: Ihor Radchenko <yantar92@posteo.net>

    org-fold-core-next-folding-state-change: Optimize performance
    
    * lisp/org-fold-core.el (org-fold-core-next-folding-state-change):
    Avoid repetitive searches all to way to LIMIT.  Instead, limit the
    next searches by the limit computer by previous.
---
 lisp/org-fold-core.el | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/lisp/org-fold-core.el b/lisp/org-fold-core.el
index f14881b045..e6a9d5a2b5 100644
--- a/lisp/org-fold-core.el
+++ b/lisp/org-fold-core.el
@@ -910,14 +910,19 @@ Search backwards when PREVIOUS-P is non-nil."
   (unless spec-or-alias
     (setq spec-or-alias (org-fold-core-folding-spec-list)))
   (setq pos (or pos (point)))
-  (apply (if previous-p
-            #'max
-          #'min)
-         (mapcar (if previous-p
-                    (lambda (prop) (max (or limit (point-min)) 
(previous-single-char-property-change pos prop nil (or limit (point-min)))))
-                  (lambda (prop) (next-single-char-property-change pos prop 
nil (or limit (point-max)))))
-                 (mapcar (lambda (el) 
(org-fold-core--property-symbol-get-create el nil t))
-                        spec-or-alias))))
+  (let ((limit (or limit (if previous-p (point-min) (point-max)))))
+    (catch :limit
+      (dolist (prop (mapcar
+                     (lambda (el)
+                       (org-fold-core--property-symbol-get-create el nil t))
+                     spec-or-alias))
+        (when (= limit pos) (throw :limit limit))
+        (setq
+         limit
+         (if previous-p
+             (previous-single-char-property-change pos prop nil limit)
+           (next-single-char-property-change pos prop nil limit))))
+      limit)))
 
 (defun org-fold-core-previous-folding-state-change (&optional spec-or-alias 
pos limit)
   "Call `org-fold-core-next-folding-state-change' searching backwards."



reply via email to

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