+(defun elmo-global-flag-replace-referrer (old-folder new-folder)
+ (dolist (flag elmo-global-flags)
+ (let* ((folder (elmo-flag-get-folder flag))
+ (minfo (elmo-flag-folder-minfo-internal folder))
+ modified)
+ (dolist (entry minfo)
+ (let ((pair (assoc old-folder (nth 0 entry))))
+ (when pair
+ (setcar pair new-folder)
+ (setq modified t))))
+ (when modified
+ (elmo-flag-folder-set-minfo folder minfo)
+ (elmo-folder-commit folder)))))
+
+(defun elmo-get-global-flags (&optional flags ignore-preserved)
+ "Get global flags.
+Return value is a subset of optional argument FLAGS.
+If FLAGS is `t', all global flags becomes candidates.
+If optional IGNORE-PRESERVED is non-nil, preserved flags
+\(answered, cached, new, unread\) are not included."
+ (let ((result (copy-sequence (if (eq flags t)
+ (setq flags elmo-global-flags)
+ flags))))
+ (while flags
+ (unless (elmo-global-flag-p (car flags))
+ (setq result (delq (car flags) result)))
+ (setq flags (cdr flags)))
+ (when ignore-preserved
+ (dolist (flag elmo-preserved-flags)
+ (setq result (delq flag result))))
+ result))
+
+(defun elmo-global-flags-initialize (&optional additional-flags)
+ (let ((dir (expand-file-name "flag" elmo-msgdb-directory)))
+ (setq elmo-global-flags
+ (elmo-list-delete
+ elmo-local-flags
+ (elmo-uniq-list
+ (append
+ elmo-global-flags
+ additional-flags
+ (and (file-directory-p dir)
+ (mapcar (lambda (x)
+ (intern (elmo-recover-string-from-filename x)))
+ (elmo-list-delete
+ '(".." ".")
+ (directory-files dir))))))
+ #'delq))))
+