Mercurial > hg > xemacs-beta
diff lisp/packages/metamail.el @ 0:376386a54a3c r19-14
Import from CVS: tag r19-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:45:50 +0200 |
parents | |
children | ac2d302a0011 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/packages/metamail.el Mon Aug 13 08:45:50 2007 +0200 @@ -0,0 +1,124 @@ +;;; metamail.el --- Metamail interface for GNU Emacs +;; Keywords: mail, news, mime, multimedia + +;; Copyright (C) 1993 Masanobu UMEDA + +;; Author: Masanobu UMEDA <umerin@mse.kyutech.ac.jp> +;; Version: Header: /cadillac-inferno-5/cvs-master/lemacs/lisp/packages/metamail.el,v 1.1 1993/12/01 08:54:51 jwz Exp +;; Keywords: mail, news, mime, multimedia + +;; This file is part of XEmacs. + +;; XEmacs 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. + +;; XEmacs is distributed in the hope that it will be useful, but +;; WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;; General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with XEmacs; see the file COPYING. If not, write to the Free +;; Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + +;;; Synched up with: Very similar to but not quite synched with +;;; FSF 19.30. + +;;; Commentary: + +;; LCD Archive Entry: +;; metamail|Masanobu UMEDA|umerin@mse.kyutech.ac.jp| +;; Metamail interface for GNU Emacs| +;; !Date: 1993/12/01 08:54:51 !|!Revision: 1.1 !|~/misc/metamail.el.Z| + +;; Note: Metamail does not have all options which is compatible with +;; the environment variables. For that reason, matamail.el have to +;; hack the environment variables. In addition, there is no way to +;; display all header fields without extra informative body messages +;; which is suppressed by "-q" option. + +;; The idea of using metamail to process MIME messages is from +;; gnus-mime.el by Spike <Spike@world.std.com>. + +;;; Code: + +(defvar metamail-program-name "metamail" + "*Metamail program name.") + +(defvar metamail-environment "KEYHEADS='*';export KEYHEADS;" + "*Environment variables for Metamail. +It must be an emtpy string or a string terminated with ';'.") + +(defvar metamail-switches '("-m" "emacs" "-x" "-d" "-z") + "*Switches for Metamail program. +-z is required to remove zap file.") + +(defun metamail-buffer (&optional buffer) + "Process current buffer through 'metamail'. +Optional argument BUFFER specifies a buffer to be filled (nil means current)." + (interactive) + (metamail-region (point-min) (point-max) buffer)) + +(defun metamail-region (beg end &optional buffer) + "Process current region through 'metamail'. +Optional argument BUFFER specifies a buffer to be filled (nil means current)." + (interactive "r") + (let ((curbuf (current-buffer)) + (buffer-read-only nil) + (metafile (make-temp-name "/tmp/metamail"))) + (save-excursion + ;; Gee! Metamail does not ouput to stdout if input comes from + ;; stdin. + (write-region beg end metafile nil 'nomessage) + (if buffer + (set-buffer buffer)) + (setq buffer-read-only nil) + ;; Clear destination buffer. + (if (eq curbuf (current-buffer)) + (delete-region beg end) + (delete-region (point-min) (point-max))) + ;; We have to pass the environment variable KEYHEADS to /bin/sh + ;; to display all header fields. Metamail should have an + ;; optional argument to pass such information directly. + (apply (function call-process) + "/bin/sh" + nil + t ;Output to current buffer + t ;Force redisplay + (list "-c" + ;; Construct environment and the command. + (concat + metamail-environment + metamail-program-name + " " + (mapconcat (function identity) metamail-switches " ") + " " + metafile + ))) + ))) + +;(defun metamail-region (beg end &optional buffer) +; "Process current region through 'metamail'. +;Optional argument BUFFER specifies a buffer to be filled (nil means current)." +; (interactive "r") +; (let ((curbuf (current-buffer)) +; (buffer-read-only nil) +; (metafile (make-temp-name "/tmp/metamail"))) +; (save-excursion +; (write-region (point-min) (point-max) metafile nil 'nomessage) +; (if (eq curbuf +; (if buffer (get-buffer buffer) (current-buffer))) +; (delete-region (point-min) (point-max))) +; (apply (function call-process) +; metamail-program-name +; nil +; (or buffer t) ;BUFFER or current buffer +; nil ;don't redisplay +; (append metamail-switches (list metafile))) +; ))) + +(provide 'metamail) + +;;; metamail.el ends here