org-get-buffer-tags: Use cache

This commit is contained in:
Ihor Radchenko 2021-11-23 17:41:41 +08:00
parent 912cf21494
commit dd173bf451
No known key found for this signature in database
GPG Key ID: 6470762A7DA11D8B
1 changed files with 15 additions and 6 deletions

View File

@ -12660,12 +12660,21 @@ Inherited tags have the `inherited' text property."
(defun org-get-buffer-tags ()
"Get a table of all tags used in the buffer, for completion."
(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))))))
(org-with-point-at 1
(let (tags)
(while (re-search-forward org-tag-line-re nil t)
(setq tags (nconc (split-string (match-string-no-properties 2) ":")
tags)))
(mapcar #'list (delete-dups (append org-file-tags tags))))))
(mapcar #'list (delete-dups (append org-file-tags tags)))))))
;;;; The mapping API