aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuri Linkov2008-04-22 19:51:27 +0000
committerJuri Linkov2008-04-22 19:51:27 +0000
commita837fe74bfc7b2c4cbaf6cd3eedb932f5bf95dfe (patch)
tree1b6b422064c41f3b9b8aa002c3a1718bb47428c3
parenta98a2fe87a5d0e16a3b518b5278c4818eb43caec (diff)
downloademacs-a837fe74bfc7b2c4cbaf6cd3eedb932f5bf95dfe.tar.gz
emacs-a837fe74bfc7b2c4cbaf6cd3eedb932f5bf95dfe.zip
(mailcap-file-default-commands): New function.
-rw-r--r--lisp/gnus/ChangeLog4
-rw-r--r--lisp/gnus/mailcap.el48
2 files changed, 52 insertions, 0 deletions
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 4b19735f824..070ef6e886c 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,7 @@
12008-04-22 Juri Linkov <juri@jurta.org>
2
3 * mailcap.el (mailcap-file-default-commands): New function.
4
12008-04-13 Reiner Steib <Reiner.Steib@gmx.de> 52008-04-13 Reiner Steib <Reiner.Steib@gmx.de>
2 6
3 * message.el (message-signature-separator, message-cite-function): 7 * message.el (message-signature-separator, message-cite-function):
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."
1007 (cdr l)))) 1007 (cdr l))))
1008 mailcap-mime-data))))) 1008 mailcap-mime-data)))))
1009 1009
1010;;;
1011;;; Useful supplementary functions
1012;;;
1013
1014(defun mailcap-file-default-commands (files)
1015 "Return a list of default commands for FILES."
1016 (mailcap-parse-mailcaps)
1017 (mailcap-parse-mimetypes)
1018 (let* ((all-mime-type
1019 ;; All unique MIME types from file extensions
1020 (delete-dups (mapcar (lambda (file)
1021 (mailcap-extension-to-mime
1022 (file-name-extension file t)))
1023 files)))
1024 (all-mime-info
1025 ;; All MIME info lists
1026 (delete-dups (mapcar (lambda (mime-type)
1027 (mailcap-mime-info mime-type 'all))
1028 all-mime-type)))
1029 (common-mime-info
1030 ;; Intersection of mime-infos from different mime-types;
1031 ;; or just the first MIME info for a single MIME type
1032 (if (cdr all-mime-info)
1033 (delq nil (mapcar (lambda (mi1)
1034 (unless (memq nil (mapcar
1035 (lambda (mi2)
1036 (member mi1 mi2))
1037 (cdr all-mime-info)))
1038 mi1))
1039 (car all-mime-info)))
1040 (car all-mime-info)))
1041 (commands
1042 ;; Command strings from `viewer' field of the MIME info
1043 (delete-dups
1044 (delq nil (mapcar (lambda (mime-info)
1045 (let ((command (cdr (assoc 'viewer mime-info))))
1046 (if (stringp command)
1047 (replace-regexp-in-string
1048 ;; Replace mailcap's `%s' placeholder
1049 ;; with dired's `?' placeholder
1050 "%s" "?"
1051 (replace-regexp-in-string
1052 ;; Remove the final filename placeholder
1053 "\s*\\('\\)?%s\\1?\s*\\'" "" command nil t)
1054 nil t))))
1055 common-mime-info)))))
1056 commands))
1057
1010(provide 'mailcap) 1058(provide 'mailcap)
1011 1059
1012;; arch-tag: 1fd4f9c9-c305-4d2e-9747-3a4d45baa0bd 1060;; arch-tag: 1fd4f9c9-c305-4d2e-9747-3a4d45baa0bd