1 <!doctype sinfo system>
2 <!-- $Id: tm-view-en.sgml,v 4.0 1997/01/31 14:02:02 morioka Exp $ -->
4 <title>tm-view 7.80 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 previous content
362 goes to the next content
366 goes to the next content
382 goes to the next line
386 goes to the previous line
390 goes to the beginning of message
394 goes to the end of message
398 playbacks a part (*2)
402 extracts a file from a part (*2)
410 displays X-Face in the message
414 drives mouse button in preview-buffer.
416 For content-button, it playbacks a part (*2)
418 For URL-button, it drives WWW browser
422 <memo title="Notice">
424 (*1) Not return to the Summary mode unless tm-view has been setup
425 using tm-mh-e, tm-vm, gnus-mime, tm-gnus, tm-rmail etc.
427 (*2) Actual playback/extract/print will be performed by a method.
431 <h1> Mechanism of decoding
434 In <code>mime/viewer-mode</code>, you can do play (<kbd>v</kbd>),
435 extract (<kbd>e</kbd>), or print (<kbd>C-c C-p</kbd>) for each parts.
436 These operations are called <concept>decoding operation(s) (for a
437 part)</concept>. And kind of decoding operations are called
438 <concept>decoding-mode</concept>.
440 When decoding operation is driven, tm-view calls a procedure matched
441 for the condition, such as <dref file="tm-en">content-type</dref> of
442 the part or its environment. This procedure is called
443 <concept>method</concept>.
445 There are two kinds of methods. One is Emacs Lisp function, called
446 <concept>internal method</concept>. Another one is external program,
447 called <concept>external method</concept>.
449 Internal method operates in Emacs, so it can do carefully.
451 External method is called as asynchronous process, so Emacs does not
452 wait while method is running. So it is good for big data, such as
453 audio, image or video.
456 <h2> Setting decoding condition for parts
457 <node> decoding-condition
459 When decoding operation is driven, tm-view calls a method matched for
460 the condition searched from the variable
461 <code>mime/content-decoding-condition</code>.
463 Variable <code>mime/content-decoding-condition</code> is defined as a
464 list with the following syntax:
467 (condition_1 condition_2 ...)
470 Each condition are association-list with the following syntax:
473 ((field-type_1 . value_1)
474 (field-type_2 . value_2)
478 For example, if you want to call the external method named tm-plain to
479 decode every <dref file="tm-en">text/plain</dref> type parts, you can
480 define the condition like:
483 ((type . "text/plain")
484 (method "tm-plain" nil 'file 'type 'encoding 'mode 'name))
487 This condition definition will match all parts whose <dref
488 file="tm-en">content-type</dref> are text/plain. Here is an another
492 ((type . "text/plain")
493 (method "tm-plain" nil 'file 'type 'encoding 'mode 'name)
497 This will match the part whose type is text/plain and the mode is
500 Here is an another example:
503 ((method "metamail" t "-m" "tm" "-x" "-d" "-z" "-e" 'file)
507 This will match all parts which have a mode of play.
509 The conditions defined in a variable
510 <code>mime/content-decoding-condition</code> are examined from top to
511 bottom. The first matching condition becomes valid and the method
512 specified in that condition definition will be executed.
515 <h3> Format of method value
518 You can specify the method field of the decoding-condition definition
519 in two different ways,
529 (method STRING FLAG arg1 arg2 ...)
535 When a symbol is specified in the method field, a function whose name
536 is SYMBOL will be called as an internal method.
538 When a list is specified in the method field, it will be called as an
541 The list below shows the meaning of the parameters when the external
542 method is specified in the method field.
546 <dd>name of an external method
549 <dd>If <code>t</code>, both the content-header and the content-body
550 are passed to an external method.
552 If <code>nil</code>, only the content-body is passed to an external
556 <dd>list of arguments passed to an external method
560 An argument passed to an external method can be in one of the
568 <dd>value gotten using SYMBOL as a key from decoding-condition
571 <dd>value gotten using STRING as a key from decoding-condition
575 <code>'SYMBOL</code> can be one of the following:
579 <dd>name of a file holding the original content
582 <dd>content-type/sub-type of Content-Type field
585 <dd>field body of Content-Transfer-Encoding field
591 <dd>name of a file created by decode operation
596 <code>'STRING</code> is used to search a parameter of the Content-Type
597 field whose name matches with it, and pass the value of that parameter
598 to the external method.
601 <h3> Example of decoding-condition
602 <node> Example of decoding-condition
604 Following is an example of decoding-condition:
607 (defvar mime/content-decoding-condition
608 '(((type . "text/plain")
609 (method "tm-plain" nil 'file 'type 'encoding 'mode 'name))
610 ((type . "text/x-latex")
611 (method "tm-latex" nil 'file 'type 'encoding 'mode 'name))
612 ((type . "audio/basic")
613 (method "tm-au" nil 'file 'type 'encoding 'mode 'name))
614 ((type . "image/gif")
615 (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
616 ((type . "image/jpeg")
617 (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
618 ((type . "image/tiff")
619 (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
620 ((type . "image/x-tiff")
621 (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
622 ((type . "image/x-xbm")
623 (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
624 ((type . "image/x-pic")
625 (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
626 ((type . "video/mpeg")`
627 (method "tm-mpeg" nil 'file 'type 'encoding 'mode 'name))
628 ((type . "application/octet-stream")
629 (method "tm-file" nil 'file 'type 'encoding 'mode 'name))
630 ((type . "message/partial")
631 (method . mime/decode-message/partial-region))
632 ((method "metamail" t
633 "-m" "tm" "-x" "-d" "-z" "-e" 'file)(mode . "play"))
638 For example, if you want to use metamail to decode any contents,
641 (setq mime/content-decoding-condition
643 ((method "metamail" t "-m" "tm" "-x" "-d" "-z" "-e" 'file))
650 Variable <code>mime/content-decoding-condition</code> provides you of
651 very flexible way to define the conditions of decoding. It can be
652 simple if you only need the a few decoding methods, while it can be
653 very complicated if you want to use the separate decoding method for
654 each type/mode combination.
656 Following function may be useful to set decoding-condition. It is a
657 function of <file>tl-atype.el</file>.
660 <defun name="set-atype">
663 Add condition <var>alist</var> to <var>symbol</var>.
665 <memo title="Example">
668 (set-atype 'mime/content-decoding-condition
669 '((type . "message/external-body")
670 ("access-type" . "anon-ftp")
671 (method . mime/decode-message/external-ftp)
678 <h2> Environment variables
679 <node> environment variables
681 Standard methods of tm-view reference some environment variables. You
682 can specify them to customize.
687 Directory for temporary files or extracted files. If it is omitted,
688 <file>/tmp/</file> is used.
692 Dither for mpeg_play. If it is omitted, `gray' is used.
696 WWW browser name. If it is omitted, `netscape' is used.
700 <h1> raw-article-buffer and preview-buffer
701 <node> Two buffers for an article
703 tm-view managements two buffers, one is for raw message called
704 <concept>raw-article-buffer</concept>, another one is to preview for
705 user called <concept>preview-buffer</concept>. major-mode of
706 raw-article-buffer is same as major-mode for article of original MUA,
707 major-mode of preview-buffer is <a
708 node="mime/viewer-mode"><code>mime/viewer-mode</code></a>.
710 When called <code>mime/viewer-mode</code>, tm-view analyzes
711 raw-article-buffer, and sets its result to the variable
712 <code>mime::article/content-info</code>.
714 After that, tm-view create a preview-buffer corresponded to the
715 raw-article-buffer. As this time, tm-view modifies header and body of
716 each parts of the message by specified conditions. Filter program for
718 node="content-header"><concept>header-filter</concept></a>, filter
719 program for body is called <a
720 node="content-body"><concept>content-filter</concept></a>, and they
721 are called <concept>filter</concept>.
723 When preview-buffer is made, buffer local variable of preview-buffer
724 <code>mime::preview/content-list</code> is made to register structure
725 of preview-buffer. tm-view manages message by
726 <code>mime::article/content-info</code> in raw-article-buffer and
727 <code>mime::preview/content-list</code> in preview-buffer.
729 <memo title="Notice">
730 In this document, I call ``content-type'' as content-type/subtype of
735 <h2> buffer local variables of raw-article-buffer
736 <node> raw-article-buffer
738 <define type="Structure" name="mime::content-info">
739 <args> rcnum point-min point-max type parameters encoding children
741 structure to represent MIME content in raw-article-buffer. It is
742 called by <concept>content-info</concept>.
744 Please use reference function
745 <code>mime::content-info/SLOT-NAME</code> to reference slot of
746 content-info. Their argument is only content-info.
748 Following is a list of slots of the structure:
751 <dt>rcnum<dd>``reversed content-number'' (list)
753 <dt>point-min<dd>beginning point of region in raw-article-buffer
755 <dt>point-max<dd>end point of region in raw-article-buffer
757 <dt>type<dd>content-type/sub-type (string or nil)
759 <dt>parameters<dd>parameter of Content-Type field (association list)
761 <dt>encoding<dd>Content-Transfer-Encoding (string or nil)
763 <dt>children<dd>parts included in this part (list of content-infos)
767 If a part includes other parts in its contents, such as multipart or
768 message/rfc822, content-infos of other parts are included in
769 <var>children</var>, so content-info become a tree.
772 <defvar name="mime::article/content-info">
774 result of MIME parsing of raw-article-buffer (content-info)
777 <defvar name="mime::article/preview-buffer">
779 preview-buffer corresponded by this buffer
782 <defun name="mime-article/point-content-number">
783 <args> point <opts> cinfo
785 In a region managed by content-info <var>cinfo</var>, it returns
786 content-number corresponded by <var>point</var>.
788 If <var>cinfo</var> is omitted,
789 <code>mime::article/content-info</code> is used as default value.
792 <defun name="mime-article/rcnum-to-cinfo">
793 <args> rcnum <opts> cinfo
795 In a region managed by content-info <var>cinfo</var>, it returns
796 content-info corresponded by reversed-content-number <var>rcnum</var>.
798 If <var>cinfo</var> is omitted,
799 <code>mime::article/content-info</code> is used as default value.
802 <defun name="mime-article/cnum-to-cinfo">
803 <args> rcnum <opts> cinfo
805 In a region managed by content-info <var>cinfo</var>, it returns
806 content-info corresponded by content-number <var>rcnum</var>.
808 If <var>cinfo</var> is omitted,
809 <code>mime::article/content-info</code> is used as default value.
812 <defun name="mime/flatten-content-info">
815 It returns flatten list of content-info from content-info
816 <var>cinfo</var> tree.
818 If <var>cinfo</var> is omitted,
819 <code>mime::article/content-info</code> is used as default value.
823 <h2> Buffer local variables of preview-buffer
824 <node> preview-buffer
826 <defvar name="mime::preview/mother-buffer">
828 Mother buffer of this preview-buffer.
831 <define type="Structure" name="mime::preview-content-info">
832 <args> point-min point-max buffer content-info
834 structure to represent MIME content in preview-buffer. It is called
835 by <concept>preview-content-info</concept>.
837 Please use reference function
838 <code>mime::preview-content-info/SLOT-NAME</code> to reference slot of
839 preview-content-info. Their argument is only preview-content-info.
841 Following is a list of slots of the structure:
844 <dt>point-min<dd>beginning point of region in preview-buffer
846 <dt> point-max<dd>end point of region in preview-buffer
848 <dt>buffer<dd>raw-article-buffer corresponding a part
850 <dt>content-info<dd>content-info corresponding a part
856 <defvar name="mime::preview/content-list">
858 List of preview-content-info to represent structure of this
863 <defvar name="mime::preview/article-buffer">
865 raw-article-buffer corresponded by this preview-buffer.
869 <defvar name="mime::preview/original-major-mode">
871 major-mode of original buffer.
875 <defvar name="mime::preview/original-window-configuration">
877 window-configuration just before made this preview-buffer.
881 <defun name="mime-preview/point-pcinfo">
882 <args> point <opts> pcl
884 In a region of preview-buffer managed by preview-content-info
885 <var>pcl</var>, it returns preview-content-info corresponded by
888 If <var>cinfo</var> is omitted,
889 <code>mime::preview/content-list</code> is used.
893 <h1> Functions to decode MIME message
896 tm-view provides some available functions to decode and navigate MIME
897 message to each <a file="tm-en" node="MUA">MUA</a>s.
899 There are 2 kinds of functions, one is for MIME preview, another one
900 is to decode RFC 1522 <dref file="tm-en">encoded-word</dref>.
903 <h2> Function to preview MIME message
904 <node> API about MIME preview
907 <define type="Command" name="mime/viewer-mode">
908 <opts> mother ctl encoding ibuf obuf mother-keymap
910 Parse <var>ibuf</var> as a MIME message, and create preview-buffer
911 into <var>obuf</var> to display to user, then enter <a
912 node="mime/viewer-mode"><code>mime/viewer-mode</code></a>.
914 If <var>ibuf</var> is omitted, current buffer is used.
916 <var>mother</var> is used to specify original raw-article-buffer. It
917 may be useful when a raw-article-buffer is assembled from
918 message/partial messages.
920 <var>ctl</var> is used to specify <dref file="tm-en">Content-Type
921 field</dref> information. Its format is output format of
922 <code>mime/Content-Type</code>. When <var>ctl</var> is specified,
923 tm-view uses it instead of Content-Type field of the
926 <var>encoding</var> is used to specify field-body of
927 Content-Transfer-Encoding field. When is is specified, tm-view uses
928 it instead of Content-Type field of the raw-article-buffer.
930 If <var>mother-keymap</var> is specified, keymap of
931 <code>mime/viewer-mode</code> includes it.
935 <h2> encoded-word decoder
936 <node> encoded-word decoding
938 tm-view has functions to decode RFC 1522 <dref
939 file="tm-en">encoded-word</dref>.
942 <define type="Command" name="mime/decode-message-header">
944 It decodes encoded-words in message header of current buffer.
946 If an encoded-word is broken or invalid, or it has non supported <a
947 file="tm-en" node="MIME charset">MIME charset</a>, it is not decoded.
951 <define type="Command" name="mime-eword/decode-region">
952 <args> start end <opts> unfolding must-unfold
954 It decodes encoded-words in region <var>start</var> to <var>end</var>.
956 If an encoded-word is broken or invalid, or it has non supported <a
957 file="tm-en" node="MIME charset">MIME charset</a>, it is not decoded.
959 If <var>unfolding</var> is non-nil, it unfolds folded fields.
961 If <var>must-fold</var> is non-nil and decoded result of an
962 encoded-word has folding or raw CR or LF, it unfolds or delete raw CR
967 <defun name="mime-eword/decode-string">
968 <args> string <opts> must-unfold
970 It decodes encoded-words in <var>string</var> and returns decoded
973 If an encoded-word is broken or invalid, or it has non supported <a
974 file="tm-en" node="MIME charset">MIME charset</a>, it is not decoded.
976 If <var>string</var> is folded, it unfolds <var>string</var> before
979 If <var>must-fold</var> is non-nil and decoded result of an
980 encoded-word has folding or raw CR or LF, it unfolds or delete raw CR
986 <node> Acknowledgments
988 First of all, I thank MASUTANI Yasuhiro. He requested me a lot of
989 important features and gave me a lot of suggestions when tm-view was
990 born. tm-view is based on his influence.
992 I thank ENAMI Tsugutomo for work of <file>mime.el</file>, which is an
993 origin of <file>tm-ew-d.el</file> and <file>mel-b.el</file>, and
994 permission to rewrite for tm.
996 I thank OKABE Yasuo for work of internal method for LaTeX and
997 automatic assembling method for message/partial. I thank UENO
998 Hiroshi for work of internal method for tar archive.
1000 Last of all, I thank members of two tm mailing lists, Japanese and
1005 <node> Concept Index
1011 <node> Function Index
1017 <node> Variable Index