diff options
author | Juri Linkov <juri@jurta.org> | 2008-04-22 19:51:27 +0000 |
---|---|---|
committer | Juri Linkov <juri@jurta.org> | 2008-04-22 19:51:27 +0000 |
commit | a837fe74bfc7b2c4cbaf6cd3eedb932f5bf95dfe (patch) | |
tree | 1b6b422064c41f3b9b8aa002c3a1718bb47428c3 /lisp/gnus/mailcap.el | |
parent | a98a2fe87a5d0e16a3b518b5278c4818eb43caec (diff) | |
download | emacs-a837fe74bfc7b2c4cbaf6cd3eedb932f5bf95dfe.tar.gz |
(mailcap-file-default-commands): New function.
Diffstat (limited to 'lisp/gnus/mailcap.el')
-rw-r--r-- | lisp/gnus/mailcap.el | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/lisp/gnus/mailcap.el b/lisp/gnus/mailcap.el index f9a523f6206..7abb97eadf5 100644 --- a/lisp/gnus/mailcap.el +++ b/lisp/gnus/mailcap.el @@ -1007,6 +1007,54 @@ If FORCE, re-parse even if already parsed." (cdr l)))) mailcap-mime-data))))) +;;; +;;; Useful supplementary functions +;;; + +(defun mailcap-file-default-commands (files) + "Return a list of default commands for FILES." + (mailcap-parse-mailcaps) + (mailcap-parse-mimetypes) + (let* ((all-mime-type + ;; All unique MIME types from file extensions + (delete-dups (mapcar (lambda (file) + (mailcap-extension-to-mime + (file-name-extension file t))) + files))) + (all-mime-info + ;; All MIME info lists + (delete-dups (mapcar (lambda (mime-type) + (mailcap-mime-info mime-type 'all)) + all-mime-type))) + (common-mime-info + ;; Intersection of mime-infos from different mime-types; + ;; or just the first MIME info for a single MIME type + (if (cdr all-mime-info) + (delq nil (mapcar (lambda (mi1) + (unless (memq nil (mapcar + (lambda (mi2) + (member mi1 mi2)) + (cdr all-mime-info))) + mi1)) + (car all-mime-info))) + (car all-mime-info))) + (commands + ;; Command strings from `viewer' field of the MIME info + (delete-dups + (delq nil (mapcar (lambda (mime-info) + (let ((command (cdr (assoc 'viewer mime-info)))) + (if (stringp command) + (replace-regexp-in-string + ;; Replace mailcap's `%s' placeholder + ;; with dired's `?' placeholder + "%s" "?" + (replace-regexp-in-string + ;; Remove the final filename placeholder + "\s*\\('\\)?%s\\1?\s*\\'" "" command nil t) + nil t)))) + common-mime-info))))) + commands)) + (provide 'mailcap) ;; arch-tag: 1fd4f9c9-c305-4d2e-9747-3a4d45baa0bd |