diff options
| author | Juri Linkov | 2008-04-22 19:51:27 +0000 |
|---|---|---|
| committer | Juri Linkov | 2008-04-22 19:51:27 +0000 |
| commit | a837fe74bfc7b2c4cbaf6cd3eedb932f5bf95dfe (patch) | |
| tree | 1b6b422064c41f3b9b8aa002c3a1718bb47428c3 | |
| parent | a98a2fe87a5d0e16a3b518b5278c4818eb43caec (diff) | |
| download | emacs-a837fe74bfc7b2c4cbaf6cd3eedb932f5bf95dfe.tar.gz emacs-a837fe74bfc7b2c4cbaf6cd3eedb932f5bf95dfe.zip | |
(mailcap-file-default-commands): New function.
| -rw-r--r-- | lisp/gnus/ChangeLog | 4 | ||||
| -rw-r--r-- | lisp/gnus/mailcap.el | 48 |
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 @@ | |||
| 1 | 2008-04-22 Juri Linkov <juri@jurta.org> | ||
| 2 | |||
| 3 | * mailcap.el (mailcap-file-default-commands): New function. | ||
| 4 | |||
| 1 | 2008-04-13 Reiner Steib <Reiner.Steib@gmx.de> | 5 | 2008-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 |