Function: xdg-mime-collect-associations
xdg-mime-collect-associations is a byte-compiled function defined in
xdg.el.gz.
Signature
(xdg-mime-collect-associations MIME FILES)
Documentation
Return a list of desktop file names associated with MIME.
The associations are searched in the list of file names FILES,
which is expected to be ordered by priority as in
xdg-mime-apps-files.
Source Code
;; Defined in /usr/src/emacs/lisp/xdg.el.gz
(defun xdg-mime-collect-associations (mime files)
"Return a list of desktop file names associated with MIME.
The associations are searched in the list of file names FILES,
which is expected to be ordered by priority as in
`xdg-mime-apps-files'."
(let ((regexp (concat (regexp-quote mime) "=\\([^[:cntrl:]]*\\)$"))
res sec defaults added removed cached)
(with-temp-buffer
(dolist (f (reverse files))
(when (file-readable-p f)
(insert-file-contents-literally f nil nil nil t)
(goto-char (point-min))
(let () ;; end
(while (not (or (eobp))) ;; end
(if (= (following-char) ?\[)
(progn (setq sec (char-after (1+ (point))))
(forward-line))
(if (not (looking-at regexp))
(forward-line)
(dolist (str (xdg-desktop-strings (match-string 1)))
(cl-pushnew str
(cond ((eq sec ?D) defaults)
((eq sec ?A) added)
((eq sec ?R) removed)
((eq sec ?M) cached))
:test #'equal))
(while (and (zerop (forward-line))
(/= (following-char) ?\[)))))))
;; Accumulate results into res
(dolist (f cached)
(when (not (member f removed)) (cl-pushnew f res :test #'equal)))
(dolist (f added)
(when (not (member f removed)) (push f res)))
(dolist (f removed)
(setq res (delete f res)))
(dolist (f defaults)
(push f res))
(setq defaults nil added nil removed nil cached nil))))
(delete-dups res)))