tm / tm-file.el

;;; tm-file.el --- tm-view internal method for file extraction

;; Copyright (C) 1995,1996,1997 Free Software Foundation, Inc.

;; Author: MORIOKA Tomohiko <>
;; modified by Shuhei KOBAYASHI <>
;; Version: $Id$
;; Keywords: mail, news, MIME, multimedia, file, extract

;; This file is part of tm (Tools for MIME).

;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 2, or (at
;; your option) any later version.

;; This program is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING.  If not, write to the
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.

;;; Code:

(require 'tm-view)

(defun mime-article/extract-file (beg end cal)
  (goto-char beg)
  (let* ((name
	    (narrow-to-region beg end)
	    (mime-article/get-filename cal)
	 (encoding (cdr (assq 'encoding cal)))
          (if (and name (not (string-equal name "")))
	      (expand-file-name name
				  (lambda (dir)
				    (interactive "DDirectory: ")
	      (lambda (file)
		(interactive "FFilename: ")
		(expand-file-name file))))))
	 (the-buf (current-buffer))
	 (tmp-buf (generate-new-buffer (file-name-nondirectory filename)))
    (if (file-exists-p filename)
        (or (yes-or-no-p (format "File %s exists. Save anyway? " filename))
            (error "")))
    (re-search-forward "\n\n")
    (append-to-buffer tmp-buf (match-end 0) end)
      (set-buffer tmp-buf)
      (mime-decode-region (point-min)(point-max) encoding)
      (as-binary-output-file (write-file filename))
      (kill-buffer tmp-buf)

;;; @ setup

(set-atype 'mime/content-decoding-condition
	   '((type . "application/octet-stream")
	     (method . mime-article/extract-file)
	   'ignore '(method)

(set-atype 'mime/content-decoding-condition
	   '((mode . "extract")
	     (method . mime-article/extract-file)
	   '((method "tm-file"  nil 'file 'type 'encoding 'mode 'name)
	     (mode . "extract"))

;;; @ end

(provide 'tm-file)

;;; end of tm-file.el
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.