forked from mirrors/org-mode
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.
This commit is contained in:
parent
93821b431c
commit
819409baab
13
lisp/org.el
13
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)
|
||||
|
|
Loading…
Reference in a new issue