branch: externals/org commit 819409baabf5c146d7ef2bf5d63d6714402e12dd Author: Ihor Radchenko <yanta...@gmail.com> Commit: Ihor Radchenko <yanta...@gmail.com>
org-get-buffer-tags: Improve performance * lisp/org.el (org-get-buffer-tags): Use hash table to accumulate unique tags only. The old approach also used hash tables under the hood of `delete-dups', but required extra memory allocation to store the full tag list. --- lisp/org.el | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lisp/org.el b/lisp/org.el index f40131ecb8..1d9246e4ec 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -11812,12 +11812,13 @@ Inherited tags have the `inherited' text property." (if (org-element--cache-active-p) ;; `org-element-cache-map' is about 2x faster compared to regexp ;; search. - (let ((tags (org-element-cache-map - (lambda (el) (org-element-property :tags el))))) - (mapcar #'list (mapcar #'substring-no-properties - (delete-dups - (append org-file-tags - (apply #'append tags)))))) + (let ((hashed (make-hash-table :test #'equal))) + (org-element-cache-map + (lambda (el) + (dolist (tag (org-element-property :tags el)) + (puthash (list tag) t hashed)))) + (dolist (tag org-file-tags) (puthash (list tag) t hashed)) + (hash-table-keys hashed)) (org-with-point-at 1 (let (tags) (while (re-search-forward org-tag-line-re nil t)