(eval-when-compile (require 'mime-text))
+
+(defvar mime-acting-situation-examples nil)
+
+(defun mime-save-acting-situation-examples ()
+ (let* ((file mime-acting-situation-examples-file)
+ (buffer (get-buffer-create " *mime-example*")))
+ (unwind-protect
+ (save-excursion
+ (set-buffer buffer)
+ (setq buffer-file-name file)
+ (erase-buffer)
+ (insert ";;; " (file-name-nondirectory file) "\n")
+ (insert "\n;; This file is generated automatically by "
+ mime-view-version-string "\n\n")
+ (insert ";;; Code:\n\n")
+ (pp `(setq mime-acting-situation-examples
+ ',mime-acting-situation-examples)
+ (current-buffer))
+ (insert "\n;;; "
+ (file-name-nondirectory file)
+ " ends here.\n")
+ (save-buffer))
+ (kill-buffer buffer))))
+
+(add-hook 'kill-emacs-hook 'mime-save-acting-situation-examples)
+
;;; @ content decoder
;;;
(goto-char mime-preview-after-decoded-position)
)))))
-(defvar mime-user-acting-condition nil)
+(defun mime-sort-situation (situation)
+ (sort situation
+ #'(lambda (a b)
+ (let ((a-t (car a))
+ (b-t (car b))
+ (order '((type . 1)
+ (subtype . 2)
+ (mode . 3)
+ (major-mode . 4)))
+ a-order b-order)
+ (if (symbolp a-t)
+ (let ((ret (assq a-t order)))
+ (if ret
+ (setq a-order (cdr ret))
+ (setq a-order 5)
+ ))
+ (setq a-order 6)
+ )
+ (if (symbolp b-t)
+ (let ((ret (assq b-t order)))
+ (if ret
+ (setq b-order (cdr ret))
+ (setq b-order 5)
+ ))
+ (setq b-order 6)
+ )
+ (if (= a-order b-order)
+ (string< (format "%s" a-t)(format "%s" b-t))
+ (< a-order b-order))
+ )))
+ )
(defun mime-raw-play-entity (entity-info &optional mode)
"Play entity specified by ENTITY-INFO.
(setq cal (cons (cons 'mode mode) cal))
)
(setq ret
- (or (ctree-match-calist mime-user-acting-condition cal)
- (ctree-match-calist-partially
- mime-user-acting-condition cal)
+ (or (ctree-match-calist mime-acting-situation-examples cal)
+ (ctree-match-calist-partially mime-acting-situation-examples
+ cal)
cal))
(setq ret
(or (ctree-find-calist mime-acting-condition ret
(cdr (assq 'method situation)))
situation)))
ret)))
- (ctree-set-calist-strictly 'mime-user-acting-condition ret)
+ (setq ret (mime-sort-situation ret))
+ (ctree-set-calist-strictly 'mime-acting-situation-examples ret)
)
(t
(setq ret (car ret))
(fboundp method))
(funcall method beg end ret)
)
+ ((stringp method)
+ (mime-activate-mailcap-method beg end ret)
+ )
((and (listp method)(stringp (car method)))
(mime-activate-external-method beg end ret)
)
;;; @ external decoder
;;;
+(defun mime-activate-mailcap-method (start end situation)
+ (save-excursion
+ (save-restriction
+ (narrow-to-region start end)
+ (goto-char start)
+ (let ((method (cdr (assoc 'method situation)))
+ (name (mime-raw-get-filename situation)))
+ (mime-write-decoded-region (if (re-search-forward "^$" end t)
+ (1+ (match-end 0))
+ (point-min))
+ end name
+ (cdr (assq 'encoding situation)))
+ (message "External method is starting...")
+ (let ((command
+ (mailcap-format-command
+ method
+ (cons (cons 'filename name) situation))))
+ (start-process command mime-echo-buffer-name
+ shell-file-name shell-command-switch command)
+ )
+ (mime-show-echo-buffer)
+ ))))
+
(defun mime-activate-external-method (beg end cal)
(save-excursion
(save-restriction
(provide 'mime-play)
+(let* ((file mime-acting-situation-examples-file)
+ (buffer (get-buffer-create " *mime-example*")))
+ (if (file-readable-p file)
+ (unwind-protect
+ (save-excursion
+ (set-buffer buffer)
+ (erase-buffer)
+ (insert-file-contents file)
+ (eval-current-buffer)
+ ;; format check
+ (or (eq (car mime-acting-situation-examples) 'type)
+ (setq mime-acting-situation-examples nil))
+ )
+ (kill-buffer buffer))))
+
;;; mime-play.el ends here