1 <!doctype sinfo system>
2 <!-- $Id: tm-view-en.sgml,v 3.0 1996/12/25 19:07:20 morioka Exp $ -->
4 <title>tm-view 7.79 Reference Manual (English Version)
5 <author>MORIOKA Tomohiko <mail>morioka@jaist.ac.jp</mail>
15 This file documents tm-view, a MIME Viewer for GNU Emacs.
22 The tm-view is a general MIME viewer running on GNU Emacs.
24 tm-view provides the major-mode called <a
25 node="mime/viewer-mode"><code>mime/viewer-mode</code> </a> to read
26 MIME message for MUA. <a file="tm-en" node="MUA">MUA</a> implementer
27 can use it to add MIME function.
29 tm-view is a user interface kernel to view and navigate MIME message.
30 tm-view drives some programs to navigate each <dref
31 file="tm-en">content-type</dref>s, they are called <a
32 node="method"><concept>method</concept></a>. tm-view calls some
33 programs to display each contents and headers in preview buffer, they
34 are called <a node="Two buffers for an
35 article"><concept>filter</concept></a>. Method and filters are
36 tm-view application program. They expand tm-view to treat various
40 <h1> Structure of display in mime/viewer-mode
43 In <a node="mime/viewer-mode">mime/viewer-mode</a>, following are
44 displayed for each parts:
54 You can change design or stop to display if you specify for each
55 conditions, such as content-types.
60 From: morioka@jaist.ac.jp (MORIOKA Tomohiko)
62 Newsgroups: zxr.message.mime
63 Date: 22 Oct 93 11:02:44
65 Organization: Japan Advanced Institute of Science and Technology,
69 How to compose MIME message in MIME-Edit mode.
71 Press `C-c C-x ?' then help message will be displayed:
73 C-c C-x C-t insert a text message.
74 C-c C-x TAB insert a (binary) file.
75 C-c C-x C-e insert a reference to external body.
76 C-c C-x C-v insert a voice message.
77 C-c C-x C-y insert a mail or news message.
78 C-c C-x RET insert a mail message.
79 C-c C-x C-s insert a signature file at end.
80 C-c C-x t insert a new MIME tag.
81 C-c C-x a enclose as multipart/alternative.
82 C-c C-x p enclose as multipart/parallel.
83 C-c C-x m enclose as multipart/mixed.
84 C-c C-x d enclose as multipart/digest.
85 C-c C-x s enclose as PGP signed.
86 C-c C-x e enclose as PGP encrypted.
87 C-c C-x C-k insert PGP public key.
88 C-c C-x C-p preview editing MIME message.
91 So press `C-c C-x C-i' and specify file name you want to include.
93 MIME encoding for binary file is normally Base64.
99 In this way, it is finish a message attaching a picture.
101 ======================== A cup of Russian tea ========================
102 ============ * not by jam, not by marmalade, by honey * ============
103 ============ MORIOKA Tomohiko ============
104 =============== Internet E-mail: <morioka@jaist.ac.jp> ===============
109 <node> content-button
111 content-subject displays abstract for the part. It is placed in top
114 In default, it is displayed following design:
117 [1.3 test (text/plain)]
121 First number field represents position of a content in the part. It
122 is called <concept>content-number</concept>. It can be considered as
123 the chapter number in the message.
125 Second string part represents title. It is created by following:
128 <li>name paramater or x-name parameter in <dref
129 file="tm-en">Content-Type field</dref>
131 <li><dref file="tm-en">Content-Description field</dref> or Subject
134 <li> filename of uuencode
138 If they are not exists, space is displayed.
140 Third parenthesis part represents content-type/subtype of the part.
141 If it is non-MIME part, <code>nil</code> is displayed.
143 Content-button is used like icon when <dref>content-header</dref> and
144 <dref>content-body</dref> are hidden. For example:
151 if you press <kbd>v</kbd> key, GIF image is displayed.
153 If mouse operations are available, you can press content-button by
154 mouse button-2 (center button of 3 button-mouse) to play, similarly to
155 press <kbd>v</kbd> key. <cf node="mime/viewer-mode">
157 By the way, it is annoying to display content-button if content-header
158 is displayed. So tm-view provides a mechanism to specify conditions
159 to display content-button.
162 <defvar name="mime-viewer/content-button-ignored-ctype-list">
164 List of content-types.
166 If content-type of a part is a member of this list, its content-button
172 <node> content-header
174 A content header displays the header portion of a part in the
175 preview-buffer. However it is annoying to display header for every
176 parts, so tm-view provides a mechanism to specify its condition.
178 When the function <code>mime-viewer/header-visible-p</code> returns
179 <code>t</code> for reversed-content-number of a part, content-header
182 This judge function returns <code>t</code> when a part is root or
183 content-type of its parent is a member of the variable
184 <code>mime-viewer/childrens-header-showing-Content-Type-list</code>.
186 If you want to change this condition, please redefine it. Notice that
188 <code>mime-viewer/childrens-header-showing-Content-Type-list</code>,
189 however if you redefine function
190 <code>mime-viewer/header-visible-p</code>, it may not work. So if you
191 want to redefine it, it should be refer variable
192 <code>mime-viewer/childrens-header-showing-Content-Type-list</code>.
194 When content-header is displayed, content-header are formated by the
195 program called by <concept>content-header-filter</concept>.
196 Content-header-filter is searched from variable
197 <code>mime-viewer/content-header-filter-alist</code>. Its key is
198 major-mode of the <a node="raw-article-buffer">raw-article-buffer</a>.
199 If not found, function
200 <code>mime-viewer/default-content-header-filter</code> is called.
203 <defvar name="mime-viewer/childrens-header-showing-Content-Type-list">
205 List of content-types. If content-type of parent of a part is a
206 member of this variable, its content-header is displayed. Default
207 value is <code>'("message/rfc822" "message/news")</code>.
209 This variable is referred by the function
210 <code>mime-viewer/header-visible-p</code>.
214 <defun name="mime-viewer/header-visible-p">
215 <args> rcnum cinfo <opts> ctype
217 Returns <code>t</code> if a part which reversed-content-number is
218 <var>rcnum</var> in content-info <var>cinfo</var> is displayed.
220 If you know content-type, you can specify by <var>ctype</var>.
224 <defvar name="mime-viewer/content-header-filter-alist">
226 Association-list whose key is major-mode of a raw-article-buffer,
227 value is content-header-filter.
231 <defun name="mime-viewer/default-content-header-filter">
233 It is called when content-header-filter is not found in variable
234 <code>mime-viewer/content-header-filter-alist</code>.
236 It refers <code>mime-viewer/ignored-field-regexp</code>.
240 <defvar name="mime-viewer/ignored-field-list">
242 List of regular expression to represent invisible fields even if
243 content-header is displayed.
245 Variable <code>mime-viewer/ignored-field-regexp</code> is created from
248 Please use function <code>tm:add-fields</code> or
249 <code>tm:delete-fields</code> to set it.
256 <concept>content-body</concept> represents content of the part.
258 tm-view does not display raw content body. For example, if a content
259 has binary, it is hidden. If a content has text/enriched, it is
260 formated. Namely content body is hidden or formated.
262 Function <code>mime-viewer/body-visible-p</code> is a judge function
263 whether content-body of a content is displayed. If it returns
264 <code>nil</code>, content-body is hidden. In default, it returns
265 non-<code>nil</code> when content-type of a part is a member of
266 variable <code>mime-viewer/default-showing-Content-Type-list</code>.
268 When content-body of a content is displayed, content-body is formated
269 by <concept>content-filter</concept>. Content-filter is searched from
270 variable <code>mime-viewer/content-filter-alist</code>. At this time,
271 major-mode of the <dref>raw-article-buffer</dref> is used as the key.
273 If it is not found, function
274 <code>mime-viewer/default-content-filter</code> is called.
277 <defvar name="mime-viewer/default-showing-Content-Type-list">
279 List of content-type. If content-type of a part is a member of this
280 variable, its body is displayed.
284 <defun name="mime-viewer/body-visible-p">
285 <args> rcnum cinfo <opts> ctype
287 Return non-<code>nil</code>, if content-type of a part is displayed.
288 <var>rcnum</var> is reversed-content-number of a part.
289 <var>cinfo</var> is content-info of the message. If you know
290 content-type of a part, you can specify it as argument
295 <defvar name="mime-viewer/content-filter-alist">
297 Association-list whose key is major-mode of a raw-article-buffer,
298 value is content-filter.
302 <defun name="mime-viewer/default-content-filter">
303 <args> rcnum cinfo ctype params subj
305 It is called when content-body of a part should be displayed and
306 content-filter is not found in
307 <code>mime-viewer/content-filter-alist</code>.
309 In default, it does nothing.
313 <h2> content-separator
314 <node> content-separator
316 <concept>content-separator</concept> is displayed to represent
317 boundary of contents.
319 Content-separator is displayed by function
320 <code>mime-viewer/default-content-separator</code>. In default, it
321 displays line-break when content-header and content-body are not
324 If you want to change this condition, please redefine this function.
327 <defun name="mime-viewer/default-content-separator">
328 <args> rcnum cinfo ctype params subj
330 Display content-separator. <var>cnum</var> is content-number of a
331 content. <var>cinfo</var> is content-info of the message.
332 <var>ctype</var> is content-type of a content. <var>params</var> is
333 Content-Type field parameters of a content. <var>subj</var> is
336 In default, it displays line-break when content-header and
337 content-body are not displayed.
341 <h1> Navigation in mime/viewer-mode
342 <node> mime/viewer-mode
344 <code>mime/viewer-mode</code> has following functions:
349 goes to the upper content (returns to the Summary mode if the cursor
350 is sitting on the top content (*1))
354 goes to the previous content
358 goes to the next content
374 goes to the next line
378 goes to the previous line
382 goes to the beginning of message
386 goes to the end of message
390 playbacks a part (*2)
394 extracts a file from a part (*2)
402 displays X-Face in the message
406 drives mouse button in preview-buffer.
408 For content-button, it playbacks a part (*2)
410 For URL-button, it drives WWW browser
414 <memo title="Notice">
416 (*1) Not return to the Summary mode unless tm-view has been setup
417 using tm-mh-e, tm-vm, gnus-mime, tm-gnus, tm-rmail etc.
419 (*2) Actual playback/extract/print will be performed by a method.
423 <h1> Mechanism of decoding
426 In <code>mime/viewer-mode</code>, you can do play (<kbd>v</kbd>),
427 extract (<kbd>e</kbd>), or print (<kbd>C-c C-p</kbd>) for each parts.
428 These operations are called <concept>decoding operation(s) (for a
429 part)</concept>. And kind of decoding operations are called
430 <concept>decoding-mode</concept>.
432 When decoding operation is driven, tm-view calls a procedure matched
433 for the condition, such as <dref file="tm-en">content-type</dref> of
434 the part or its environment. This procedure is called
435 <concept>method</concept>.
437 There are two kinds of methods. One is Emacs Lisp function, called
438 <concept>internal method</concept>. Another one is external program,
439 called <concept>external method</concept>.
441 Internal method operates in Emacs, so it can do carefully.
443 External method is called as asynchronous process, so Emacs does not
444 wait while method is running. So it is good for big data, such as
445 audio, image or video.
448 <h2> Setting decoding condition for parts
449 <node> decoding-condition
451 When decoding operation is driven, tm-view calls a method matched for
452 the condition searched from the variable
453 <code>mime/content-decoding-condition</code>.
455 Variable <code>mime/content-decoding-condition</code> is defined as a
456 list with the following syntax:
459 (condition_1 condition_2 ...)
462 Each condition are association-list with the following syntax:
465 ((field-type_1 . value_1)
466 (field-type_2 . value_2)
470 For example, if you want to call the external method named tm-plain to
471 decode every <dref file="tm-en">text/plain</dref> type parts, you can
472 define the condition like:
475 ((type . "text/plain")
476 (method "tm-plain" nil 'file 'type 'encoding 'mode 'name))
479 This condition definition will match all parts whose <dref
480 file="tm-en">content-type</dref> are text/plain. Here is an another
484 ((type . "text/plain")
485 (method "tm-plain" nil 'file 'type 'encoding 'mode 'name)
489 This will match the part whose type is text/plain and the mode is
492 Here is an another example:
495 ((method "metamail" t "-m" "tm" "-x" "-d" "-z" "-e" 'file)
499 This will match all parts which have a mode of play.
501 The conditions defined in a variable
502 <code>mime/content-decoding-condition</code> are examined from top to
503 bottom. The first matching condition becomes valid and the method
504 specified in that condition definition will be executed.
507 <h3> Format of method value
510 You can specify the method field of the decoding-condition definition
511 in two different ways,
521 (method STRING FLAG arg1 arg2 ...)
527 When a symbol is specified in the method field, a function whose name
528 is SYMBOL will be called as an internal method.
530 When a list is specified in the method field, it will be called as an
533 The list below shows the meaning of the parameters when the external
534 method is specified in the method field.
538 <dd>name of an external method
541 <dd>If <code>t</code>, both the content-header and the content-body
542 are passed to an external method.
544 If <code>nil</code>, only the content-body is passed to an external
548 <dd>list of arguments passed to an external method
552 An argument passed to an external method can be in one of the
560 <dd>value gotten using SYMBOL as a key from decoding-condition
563 <dd>value gotten using STRING as a key from decoding-condition
567 <code>'SYMBOL</code> can be one of the following:
571 <dd>name of a file holding the original content
574 <dd>content-type/sub-type of Content-Type field
577 <dd>field body of Content-Transfer-Encoding field
583 <dd>name of a file created by decode operation
588 <code>'STRING</code> is used to search a parameter of the Content-Type
589 field whose name matches with it, and pass the value of that parameter
590 to the external method.
593 <h3> Example of decoding-condition
594 <node> Example of decoding-condition
596 Following is an example of decoding-condition:
599 (defvar mime/content-decoding-condition
600 '(((type . "text/plain")
601 (method "tm-plain" nil 'file 'type 'encoding 'mode 'name))
602 ((type . "text/x-latex")
603 (method "tm-latex" nil 'file 'type 'encoding 'mode 'name))
604 ((type . "audio/basic")
605 (method "tm-au" nil 'file 'type 'encoding 'mode 'name))
606 ((type . "image/gif")
607 (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
608 ((type . "image/jpeg")
609 (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
610 ((type . "image/tiff")
611 (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
612 ((type . "image/x-tiff")
613 (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
614 ((type . "image/x-xbm")
615 (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
616 ((type . "image/x-pic")
617 (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
618 ((type . "video/mpeg")`
619 (method "tm-mpeg" nil 'file 'type 'encoding 'mode 'name))
620 ((type . "application/octet-stream")
621 (method "tm-file" nil 'file 'type 'encoding 'mode 'name))
622 ((type . "message/partial")
623 (method . mime/decode-message/partial-region))
624 ((method "metamail" t
625 "-m" "tm" "-x" "-d" "-z" "-e" 'file)(mode . "play"))
630 For example, if you want to use metamail to decode any contents,
633 (setq mime/content-decoding-condition
635 ((method "metamail" t "-m" "tm" "-x" "-d" "-z" "-e" 'file))
642 Variable <code>mime/content-decoding-condition</code> provides you of
643 very flexible way to define the conditions of decoding. It can be
644 simple if you only need the a few decoding methods, while it can be
645 very complicated if you want to use the separate decoding method for
646 each type/mode combination.
648 Following function may be useful to set decoding-condition. It is a
649 function of <file>tl-atype.el</file>.
652 <defun name="set-atype">
655 Add condition <var>alist</var> to <var>symbol</var>.
657 <memo title="Example">
660 (set-atype 'mime/content-decoding-condition
661 '((type . "message/external-body")
662 ("access-type" . "anon-ftp")
663 (method . mime/decode-message/external-ftp)
670 <h2> Environment variables
671 <node> environment variables
673 Standard methods of tm-view reference some environment variables. You
674 can specify them to customize.
679 Directory for temporary files or extracted files. If it is omitted,
680 <file>/tmp/</file> is used.
684 Dither for mpeg_play. If it is omitted, `gray' is used.
688 WWW browser name. If it is omitted, `netscape' is used.
692 <h1> raw-article-buffer and preview-buffer
693 <node> Two buffers for an article
695 tm-view managements two buffers, one is for raw message called
696 <concept>raw-article-buffer</concept>, another one is to preview for
697 user called <concept>preview-buffer</concept>. major-mode of
698 raw-article-buffer is same as major-mode for article of original MUA,
699 major-mode of preview-buffer is <a
700 node="mime/viewer-mode"><code>mime/viewer-mode</code></a>.
702 When called <code>mime/viewer-mode</code>, tm-view analyzes
703 raw-article-buffer, and sets its result to the variable
704 <code>mime::article/content-info</code>.
706 After that, tm-view create a preview-buffer corresponded to the
707 raw-article-buffer. As this time, tm-view modifies header and body of
708 each parts of the message by specified conditions. Filter program for
710 node="content-header"><concept>header-filter</concept></a>, filter
711 program for body is called <a
712 node="content-body"><concept>content-filter</concept></a>, and they
713 are called <concept>filter</concept>.
715 When preview-buffer is made, buffer local variable of preview-buffer
716 <code>mime::preview/content-list</code> is made to register structure
717 of preview-buffer. tm-view manages message by
718 <code>mime::article/content-info</code> in raw-article-buffer and
719 <code>mime::preview/content-list</code> in preview-buffer.
721 <memo title="Notice">
722 In this document, I call ``content-type'' as content-type/subtype of
727 <h2> buffer local variables of raw-article-buffer
728 <node> raw-article-buffer
730 <define type="Structure" name="mime::content-info">
731 <args> rcnum point-min point-max type parameters encoding children
733 structure to represent MIME content in raw-article-buffer. It is
734 called by <concept>content-info</concept>.
736 Please use reference function
737 <code>mime::content-info/SLOT-NAME</code> to reference slot of
738 content-info. Their argument is only content-info.
740 Following is a list of slots of the structure:
743 <dt>rcnum<dd>``reversed content-number'' (list)
745 <dt>point-min<dd>beginning point of region in raw-article-buffer
747 <dt>point-max<dd>end point of region in raw-article-buffer
749 <dt>type<dd>content-type/sub-type (string or nil)
751 <dt>parameters<dd>parameter of Content-Type field (association list)
753 <dt>encoding<dd>Content-Transfer-Encoding (string or nil)
755 <dt>children<dd>parts included in this part (list of content-infos)
759 If a part includes other parts in its contents, such as multipart or
760 message/rfc822, content-infos of other parts are included in
761 <var>children</var>, so content-info become a tree.
764 <defvar name="mime::article/content-info">
766 result of MIME parsing of raw-article-buffer (content-info)
769 <defvar name="mime::article/preview-buffer">
771 preview-buffer corresponded by this buffer
774 <defun name="mime-article/point-content-number">
775 <args> point <opts> cinfo
777 In a region managed by content-info <var>cinfo</var>, it returns
778 content-number corresponded by <var>point</var>.
780 If <var>cinfo</var> is omitted,
781 <code>mime::article/content-info</code> is used as default value.
784 <defun name="mime-article/rcnum-to-cinfo">
785 <args> rcnum <opts> cinfo
787 In a region managed by content-info <var>cinfo</var>, it returns
788 content-info corresponded by reversed-content-number <var>rcnum</var>.
790 If <var>cinfo</var> is omitted,
791 <code>mime::article/content-info</code> is used as default value.
794 <defun name="mime-article/cnum-to-cinfo">
795 <args> rcnum <opts> cinfo
797 In a region managed by content-info <var>cinfo</var>, it returns
798 content-info corresponded by content-number <var>rcnum</var>.
800 If <var>cinfo</var> is omitted,
801 <code>mime::article/content-info</code> is used as default value.
804 <defun name="mime/flatten-content-info">
807 It returns flatten list of content-info from content-info
808 <var>cinfo</var> tree.
810 If <var>cinfo</var> is omitted,
811 <code>mime::article/content-info</code> is used as default value.
815 <h2> Buffer local variables of preview-buffer
816 <node> preview-buffer
818 <defvar name="mime::preview/mother-buffer">
820 Mother buffer of this preview-buffer.
823 <define type="Structure" name="mime::preview-content-info">
824 <args> point-min point-max buffer content-info
826 structure to represent MIME content in preview-buffer. It is called
827 by <concept>preview-content-info</concept>.
829 Please use reference function
830 <code>mime::preview-content-info/SLOT-NAME</code> to reference slot of
831 preview-content-info. Their argument is only preview-content-info.
833 Following is a list of slots of the structure:
836 <dt>point-min<dd>beginning point of region in preview-buffer
838 <dt> point-max<dd>end point of region in preview-buffer
840 <dt>buffer<dd>raw-article-buffer corresponding a part
842 <dt>content-info<dd>content-info corresponding a part
848 <defvar name="mime::preview/content-list">
850 List of preview-content-info to represent structure of this
855 <defvar name="mime::preview/article-buffer">
857 raw-article-buffer corresponded by this preview-buffer.
861 <defvar name="mime::preview/original-major-mode">
863 major-mode of original buffer.
867 <defvar name="mime::preview/original-window-configuration">
869 window-configuration just before made this preview-buffer.
873 <defun name="mime-preview/point-pcinfo">
874 <args> point <opts> pcl
876 In a region of preview-buffer managed by preview-content-info
877 <var>pcl</var>, it returns preview-content-info corresponded by
880 If <var>cinfo</var> is omitted,
881 <code>mime::preview/content-list</code> is used.
885 <h1> Functions to decode MIME message
888 tm-view provides some available functions to decode and navigate MIME
889 message to each <a file="tm-en" node="MUA">MUA</a>s.
891 There are 2 kinds of functions, one is for MIME preview, another one
892 is to decode RFC 1522 <dref file="tm-en">encoded-word</dref>.
895 <h2> Function to preview MIME message
896 <node> API about MIME preview
899 <define type="Command" name="mime/viewer-mode">
900 <opts> mother ctl encoding ibuf obuf mother-keymap
902 Parse <var>ibuf</var> as a MIME message, and create preview-buffer
903 into <var>obuf</var> to display to user, then enter <a
904 node="mime/viewer-mode"><code>mime/viewer-mode</code></a>.
906 If <var>ibuf</var> is omitted, current buffer is used.
908 <var>mother</var> is used to specify original raw-article-buffer. It
909 may be useful when a raw-article-buffer is assembled from
910 message/partial messages.
912 <var>ctl</var> is used to specify <dref file="tm-en">Content-Type
913 field</dref> information. Its format is output format of
914 <code>mime/Content-Type</code>. When <var>ctl</var> is specified,
915 tm-view uses it instead of Content-Type field of the
918 <var>encoding</var> is used to specify field-body of
919 Content-Transfer-Encoding field. When is is specified, tm-view uses
920 it instead of Content-Type field of the raw-article-buffer.
922 If <var>mother-keymap</var> is specified, keymap of
923 <code>mime/viewer-mode</code> includes it.
927 <h2> encoded-word decoder
928 <node> encoded-word decoding
930 tm-view has functions to decode RFC 1522 <dref
931 file="tm-en">encoded-word</dref>.
934 <define type="Command" name="mime/decode-message-header">
936 It decodes encoded-words in message header of current buffer.
938 If an encoded-word is broken or invalid, or it has non supported <a
939 file="tm-en" node="MIME charset">MIME charset</a>, it is not decoded.
943 <define type="Command" name="mime-eword/decode-region">
944 <args> start end <opts> unfolding must-unfold
946 It decodes encoded-words in region <var>start</var> to <var>end</var>.
948 If an encoded-word is broken or invalid, or it has non supported <a
949 file="tm-en" node="MIME charset">MIME charset</a>, it is not decoded.
951 If <var>unfolding</var> is non-nil, it unfolds folded fields.
953 If <var>must-fold</var> is non-nil and decoded result of an
954 encoded-word has folding or raw CR or LF, it unfolds or delete raw CR
959 <defun name="mime-eword/decode-string">
960 <args> string <opts> must-unfold
962 It decodes encoded-words in <var>string</var> and returns decoded
965 If an encoded-word is broken or invalid, or it has non supported <a
966 file="tm-en" node="MIME charset">MIME charset</a>, it is not decoded.
968 If <var>string</var> is folded, it unfolds <var>string</var> before
971 If <var>must-fold</var> is non-nil and decoded result of an
972 encoded-word has folding or raw CR or LF, it unfolds or delete raw CR
978 <node> Acknowledgments
980 First of all, I thank MASUTANI Yasuhiro. He requested me a lot of
981 important features and gave me a lot of suggestions when tm-view was
982 born. tm-view is based on his influence.
984 I thank ENAMI Tsugutomo for work of <file>mime.el</file>, which is an
985 origin of <file>tm-ew-d.el</file> and <file>mel-b.el</file>, and
986 permission to rewrite for tm.
988 I thank OKABE Yasuo for work of internal method for LaTeX and
989 automatic assembling method for message/partial. I thank UENO
990 Hiroshi for work of internal method for tar archive.
992 Last of all, I thank members of two tm mailing lists, Japanese and
1003 <node> Function Index
1009 <node> Variable Index