aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard M. Stallman1993-07-20 03:02:12 +0000
committerRichard M. Stallman1993-07-20 03:02:12 +0000
commit9ed9f36f4b42ca81482fc952a202900ce87bf22e (patch)
treef80f689410deafb1275f55b0ee050d57fe1578e7
parentf5baea11cb6d3bdf1d6f9e1fbd99274023103a56 (diff)
downloademacs-9ed9f36f4b42ca81482fc952a202900ce87bf22e.tar.gz
emacs-9ed9f36f4b42ca81482fc952a202900ce87bf22e.zip
entered into RCS
-rw-r--r--lisp/mail/metamail.el123
1 files changed, 123 insertions, 0 deletions
diff --git a/lisp/mail/metamail.el b/lisp/mail/metamail.el
new file mode 100644
index 00000000000..31919b8ef50
--- /dev/null
+++ b/lisp/mail/metamail.el
@@ -0,0 +1,123 @@
1;;; metamail.el --- Metamail interface for GNU Emacs
2
3;; Copyright (C) 1993 Masanobu UMEDA
4
5;; Author: Masanobu UMEDA <umerin@mse.kyutech.ac.jp>
6;; Version: $Header: metamail.el,v 1.5 93/07/08 21:56:49 umerin Exp $
7;; Keywords: mail, news, mime, multimedia
8
9;; This file is part of GNU Emacs.
10
11;; GNU Emacs is free software; you can redistribute it and/or modify
12;; it under the terms of the GNU General Public License as published by
13;; the Free Software Foundation; either version 2, or (at your option)
14;; any later version.
15
16;; GNU Emacs is distributed in the hope that it will be useful,
17;; but WITHOUT ANY WARRANTY; without even the implied warranty of
18;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19;; GNU General Public License for more details.
20
21;; You should have received a copy of the GNU General Public License
22;; along with GNU Emacs; see the file COPYING. If not, write to
23;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24
25;;; Commentary:
26
27;; LCD Archive Entry:
28;; metamail|Masanobu UMEDA|umerin@mse.kyutech.ac.jp|
29;; Metamail interface for GNU Emacs|
30;; $Date: 93/07/08 21:56:49 $|$Revision: 1.5 $|~/misc/metamail.el.Z|
31
32;; Note: Metamail does not have all options which is compatible with
33;; the environment variables. For that reason, matamail.el have to
34;; hack the environment variables. In addition, there is no way to
35;; display all header fields without extra informative body messages
36;; which is suppressed by "-q" option.
37
38;; The idea of using metamail to process MIME messages is from
39;; gnus-mime.el by Spike <Spike@world.std.com>.
40
41;;; Code:
42
43(defvar metamail-program-name "metamail"
44 "*Metamail program name.")
45
46(defvar metamail-environment '("KEYHEADS=*")
47 "*Environment variables passed to `metamail'.
48It must ba a list of strings that have the format ENVVARNAME=VALUE.")
49
50(defvar metamail-switches '("-m" "emacs" "-x" "-d" "-z")
51 "*Switches for `metamail' program.
52-z is required to remove zap file.")
53
54(defun metamail-buffer (&optional buffer nodisplay)
55 "Process current buffer through `metamail'.
56Optional 1st argument BUFFER specifies a buffer to be filled (nil
57means current).
58Optional 2nd argument NODISPLAY non-nil means buffer is not
59redisplayed as output is inserted."
60 (interactive)
61 (metamail-region (point-min) (point-max) buffer nodisplay))
62
63(defun metamail-region (beg end &optional buffer nodisplay)
64 "Process current region through 'metamail'.
65Optional 1st argument BUFFER specifies a buffer to be filled (nil
66means current).
67Optional 2nd argument NODISPLAY non-nil means buffer is not
68redisplayed as output is inserted."
69 (interactive "r")
70 (let ((curbuf (current-buffer))
71 (buffer-read-only nil)
72 (metafile (make-temp-name "/tmp/metamail")))
73 (save-excursion
74 ;; Gee! Metamail does not ouput to stdout if input comes from
75 ;; stdin.
76 (write-region beg end metafile nil 'nomessage)
77 (if buffer
78 (set-buffer buffer))
79 (setq buffer-read-only nil)
80 ;; Clear destination buffer.
81 (if (eq curbuf (current-buffer))
82 (delete-region beg end)
83 (delete-region (point-min) (point-max)))
84 ;; We have to pass the environment variable KEYHEADS to display
85 ;; all header fields. Metamail should have an optional argument
86 ;; to pass such information directly.
87 (let ((process-environment
88 (append metamail-environment process-environment)))
89 (apply (function call-process)
90 metamail-program-name
91 nil
92 t ;Output to current buffer
93 (not nodisplay) ;Force redisplay
94 (append metamail-switches (list metafile))))
95 ;; `metamail' may not delete the temporary file!
96 (condition-case error
97 (delete-file metafile)
98 (error nil))
99 )))
100
101;(defun metamail-region (beg end &optional buffer)
102; "Process current region through 'metamail'.
103;Optional argument BUFFER specifies a buffer to be filled (nil means current)."
104; (interactive "r")
105; (let ((curbuf (current-buffer))
106; (buffer-read-only nil)
107; (metafile (make-temp-name "/tmp/metamail")))
108; (save-excursion
109; (write-region (point-min) (point-max) metafile nil 'nomessage)
110; (if (eq curbuf
111; (if buffer (get-buffer buffer) (current-buffer)))
112; (delete-region (point-min) (point-max)))
113; (apply (function call-process)
114; metamail-program-name
115; nil
116; (or buffer t) ;BUFFER or current buffer
117; nil ;don't redisplay
118; (append metamail-switches (list metafile)))
119; )))
120
121(provide 'metamail)
122
123;;; metamail.el ends here