(mime-acting-condition): Use `mime-method-to-save' instead of external
[elisp/semi.git] / mime-play.el
index 43bbf0e..65b9fcf 100644 (file)
@@ -140,15 +140,15 @@ If MODE is specified, play as it.  Default MODE is \"play\"."
                          (list (car method)
                                mime-echo-buffer-name (car method)
                                )
-                         (mime-article/make-method-args cal
-                                                        (cdr (cdr method)))
+                         (mime-make-external-method-args
+                          cal (cdr (cdr method)))
                          ))
              (apply (function start-process) args)
              (mime-show-echo-buffer)
              ))
        ))))
 
-(defun mime-article/make-method-args (cal format)
+(defun mime-make-external-method-args (cal format)
   (mapcar (function
           (lambda (arg)
             (if (stringp arg)
@@ -248,6 +248,39 @@ window.")
   )
 
 
+;;; @ file extraction
+;;;
+
+(defun mime-method-to-save (beg end cal)
+  (goto-char beg)
+  (let* ((name
+         (save-restriction
+           (narrow-to-region beg end)
+           (mime-article/get-filename cal)
+           ))
+        (encoding (cdr (assq 'encoding cal)))
+        (filename
+          (if (and name (not (string-equal name "")))
+             (expand-file-name name
+                               (call-interactively
+                                (function
+                                 (lambda (dir)
+                                   (interactive "DDirectory: ")
+                                   dir))))
+           (call-interactively
+            (function
+             (lambda (file)
+               (interactive "FFilename: ")
+               (expand-file-name file))))))
+        )
+    (if (file-exists-p filename)
+        (or (yes-or-no-p (format "File %s exists. Save anyway? " filename))
+            (error "")))
+    (re-search-forward "\n\n")
+    (mime-write-decoded-region (match-end 0)(point-max) filename encoding)
+    ))
+
+
 ;;; @ mail/news message
 ;;;
 
@@ -263,7 +296,7 @@ It is registered to variable `mime-view-quitting-method-alist'."
     (pop-to-buffer mother)
     ))
 
-(defun mime-display-message/rfc822 (beg end cal)
+(defun mime-method-to-display-message/rfc822 (beg end cal)
   (let* ((cnum (mime-article/point-content-number beg))
         (new-name (format "%s-%s" (buffer-name) cnum))
         (mother mime-view-buffer)
@@ -302,7 +335,7 @@ It is registered to variable `mime-view-quitting-method-alist'."
     (write-region start end file)
     ))
 
-(defun mime-display-message/partial (beg end cal)
+(defun mime-method-to-store-message/partial (beg end cal)
   (goto-char beg)
   (let* ((root-dir
          (expand-file-name
@@ -434,7 +467,7 @@ It is registered to variable `mime-view-quitting-method-alist'."
     (dired dir)
     ))
 
-(defun mime-display-message/external-ftp (beg end cal)
+(defun mime-method-to-display-message/external-ftp (beg end cal)
   (let* ((site (cdr (assoc "site" cal)))
         (directory (cdr (assoc "directory" cal)))
         (name (cdr (assoc "name" cal)))
@@ -451,7 +484,7 @@ It is registered to variable `mime-view-quitting-method-alist'."
 ;;; @ rot13-47
 ;;;
 
-(defun mime-display-caesar (start end cal)
+(defun mime-method-to-display-caesar (start end cal)
   "Internal method for mime-view to display ROT13-47-48 message."
   (let* ((cnum (mime-article/point-content-number start))
         (new-name (format "%s-%s" (buffer-name) cnum))