[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))))