Function: mailcap-file-default-commands

mailcap-file-default-commands is a byte-compiled function defined in mailcap.el.gz.

Signature

(mailcap-file-default-commands FILES)

Documentation

Return a list of default commands for FILES.

Source Code

;; Defined in /usr/src/emacs/lisp/net/mailcap.el.gz
;;;
;;; 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
          (delq nil
                (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)
              (let (res)
                (dolist (mi1 (car all-mime-info))
                  (dolist (mi2 (cdr all-mime-info))
                    (when (member mi1 mi2)
                      (push mi1 res))))
                (nreverse res))
	    (car all-mime-info))))
    ;; Command strings from `viewer' field of the MIME info
    (delete-dups
     (let (res command)
       (dolist (mime-info common-mime-info)
         (setq command (cdr (assq 'viewer mime-info)))
         (when (stringp command)
           (push
            (replace-regexp-in-string
             ;; Replace mailcap's `%s' placeholder
             ;; with dired's `?' placeholder
             "%s" "?"
             (replace-regexp-in-string
              ;; Remove the final filename placeholder
              "[ \t\n]*\\('\\)?%s\\1?[ \t\n]*\\'" ""
              command nil t)
             nil t)
            res)))
       (nreverse res)))))