Synch with the semi-1_14 branch.
[elisp/semi.git] / mime-play.el
index 519659b..a5cbe3e 100644 (file)
@@ -84,27 +84,26 @@ If MODE is specified, play as it.  Default MODE is \"play\"."
 It decodes the entity to call internal or external method.  The method
 is selected from variable `mime-acting-condition'.  If MODE is
 specified, play as it.  Default MODE is \"play\"."
-  (let ((ret
-        (mime-unify-situations (mime-entity-situation entity situation)
-                               mime-acting-condition
-                               mime-acting-situation-example-list
-                               'method ignored-method
-                               mime-play-find-every-situations))
-       method)
+  (let* ((entity-situation (mime-entity-situation entity situation))
+        (ret (mime-unify-situations entity-situation
+                                    mime-acting-condition
+                                    mime-acting-situation-example-list
+                                    'method ignored-method
+                                    mime-play-find-every-situations))
+        method menu s)
     (setq mime-acting-situation-example-list (cdr ret)
          ret (car ret))
     (cond ((cdr ret)
-          (setq ret (mime-popup-menu-select
-                     (cons 
-                      "Methods"
-                      (mapcar
-                       (lambda (situation)
-                         (vector
-                          (format "%s"
-                                  (cdr (assq 'method situation)))
-                          situation t))
-                       ret))))
-          (setq ret (mime-sort-situation ret))
+          (while ret
+            (or (vassoc (setq method
+                              (format "%s"
+                                      (cdr (assq 'method
+                                                 (setq s (pop ret))))))
+                        menu)
+                (push (vector method s t) menu)))
+          (setq ret (mime-sort-situation
+                     (mime-menu-select "Play entity with: "
+                                       (cons "Methods" menu))))
           (add-to-list 'mime-acting-situation-example-list (cons ret 0)))
          (t
           (setq ret (car ret))))
@@ -118,12 +117,13 @@ specified, play as it.  Default MODE is \"play\"."
           ;;  (mime-activate-external-method entity ret)
           ;;  )
          (t
-          (mime-show-echo-buffer "No method are specified for %s\n"
+          (mime-show-echo-buffer "No method is specified for %s\n"
                                  (mime-type/subtype-string
-                                  (cdr (assq 'type situation))
-                                  (cdr (assq 'subtype situation))))
-          (if (y-or-n-p "Do you want to save current entity to disk?")
-              (mime-save-content entity situation))))))
+                                  (cdr (assq 'type entity-situation))
+                                  (cdr (assq 'subtype entity-situation))))
+          (when (y-or-n-p "Do you want to save current entity to disk?")
+            (message "")
+            (mime-save-content entity entity-situation))))))
 
 
 ;;; @ external decoder
@@ -442,7 +442,7 @@ It is registered to variable `mime-preview-quitting-method-alist'."
         (directory (cdr (assoc "directory" cal)))
         (name (cdr (assoc "name" cal)))
         (pathname (concat "/anonymous@" site ":" directory)))
-    (message (concat "Accessing " (expand-file-name name pathname) " ..."))
+    (message (concat "Accessing " (expand-file-name name pathname) "..."))
     (funcall mime-raw-dired-function pathname)
     (goto-char (point-min))
     (search-forward name)))
@@ -451,7 +451,7 @@ It is registered to variable `mime-preview-quitting-method-alist'."
 
 (defun mime-view-message/external-url (entity cal)
   (let ((url (cdr (assoc "url" cal))))
-    (message (concat "Accessing " url " ..."))
+    (message (concat "Accessing " url "..."))
     (funcall mime-raw-browse-url-function url)))