Function: org--tag-add-to-alist
org--tag-add-to-alist is a byte-compiled function defined in
org.el.gz.
Signature
(org--tag-add-to-alist ALIST1 ALIST2)
Documentation
Merge tags from ALIST1 into ALIST2.
Duplicates tags outside a group are removed. Keywords and order are preserved.
The function assumes ALIST1 and ALIST2 are proper tag alists.
See org-tag-alist for their structure.
Source Code
;; Defined in /usr/src/emacs/lisp/org/org.el.gz
(defun org--tag-add-to-alist (alist1 alist2)
"Merge tags from ALIST1 into ALIST2.
Duplicates tags outside a group are removed. Keywords and order
are preserved.
The function assumes ALIST1 and ALIST2 are proper tag alists.
See `org-tag-alist' for their structure."
(cond
((null alist2) alist1)
((null alist1) alist2)
(t
(let ((to-add nil)
(group-flag nil))
(dolist (tag-pair alist1)
(pcase tag-pair
(`(,(or :startgrouptag :startgroup))
(setq group-flag t)
(push tag-pair to-add))
(`(,(or :endgrouptag :endgroup))
(setq group-flag nil)
(push tag-pair to-add))
(`(,(or :grouptags :newline))
(push tag-pair to-add))
(`(,tag . ,_)
;; Remove duplicates from ALIST1, unless they are in
;; a group. Indeed, it makes sense to have a tag appear in
;; multiple groups.
(when (or group-flag (not (assoc tag alist2)))
(push tag-pair to-add)))
(_ (error "Invalid association in tag alist: %S" tag-pair))))
;; Preserve order of ALIST1.
(append (nreverse to-add) alist2)))))