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

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

[elpa] externals/org 97d4d927f2 2/2: org-agenda-prepare-buffers: Avoid e


From: ELPA Syncer
Subject: [elpa] externals/org 97d4d927f2 2/2: org-agenda-prepare-buffers: Avoid excessive memory allocation
Date: Thu, 18 Aug 2022 07:58:00 -0400 (EDT)

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

    org-agenda-prepare-buffers: Avoid excessive memory allocation
    
    * lisp/org.el (org-agenda-prepare-buffers): Avoid creating huge lists
    when computing `org-todo-keywords-for-agenda',
    `org-done-keywords-for-agenda', and
    `org-todo-keyword-alist-for-agenda'.  Instead of using `append' in
    every single agenda file + `org-uniquify' on a giant lists at the end,
    check and add unique list elements in place.
    
    This patch reduces load on Emacs GC when the number of agenda files is
    large.
---
 lisp/org.el | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/lisp/org.el b/lisp/org.el
index fd3f417df9..bc881968fa 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -15192,12 +15192,16 @@ When a buffer is unmodified, it is just killed.  When 
modified, it is saved
                 (org-refresh-effort-properties)))
           (or (memq 'appt org-agenda-ignore-properties)
               (org-refresh-properties "APPT_WARNTIME" 'org-appt-warntime))
-          (setq org-todo-keywords-for-agenda
-                (append org-todo-keywords-for-agenda org-todo-keywords-1))
-          (setq org-done-keywords-for-agenda
-                (append org-done-keywords-for-agenda org-done-keywords))
+           (dolist (el org-todo-keywords-1)
+             (unless (member el org-todo-keywords-for-agenda)
+               (push el org-todo-keywords-for-agenda)))
+           (dolist (el org-done-keywords)
+             (unless (member el org-done-keywords-for-agenda)
+               (push el org-done-keywords-for-agenda)))
           (setq org-todo-keyword-alist-for-agenda
-                (append org-todo-keyword-alist-for-agenda org-todo-key-alist))
+                 (org--tag-add-to-alist
+                 org-todo-key-alist
+                  org-todo-keyword-alist-for-agenda))
           (setq org-tag-alist-for-agenda
                 (org--tag-add-to-alist
                  org-current-tag-alist
@@ -15210,10 +15214,6 @@ When a buffer is unmodified, it is just killed.  When 
modified, it is saved
                 (if old
                     (setcdr old (org-uniquify (append (cdr old) (cdr alist))))
                   (push alist org-tag-groups-alist-for-agenda)))))))))
-    (setq org-todo-keywords-for-agenda
-          (org-uniquify org-todo-keywords-for-agenda))
-    (setq org-todo-keyword-alist-for-agenda
-         (org-uniquify org-todo-keyword-alist-for-agenda))))
     ;; Refresh the menu once after loading all the agenda buffers.
     (when org-agenda-file-menu-enabled
       (org-install-agenda-files-menu))))



reply via email to

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