tm-view 7.80 Reference Manual（日本語版）
*****************************************

This file documents tm-view, a MIME Viewer for GNU Emacs.

GNU Emacs 用の MIME Viewer である `tm-view' について説明します。

tm-view って何？
****************

tm-view は GNU Emacs で動作する汎用的な MIME viewer です。

tm-view は `mime/viewer-mode' (see mime/viewer-mode) という MIME
message を見るための major-mode を MUA (see MUA (tm-ja)) に対して提供
します。MUA の設計者はこの mode を利用することでその MUA に MIME 機能を
付加することができます。

tm-view は MIME message を閲覧するための user interface の核であり、その
上で各 content-type (see content-type (tm-ja)) を扱うための
*method* (see method) と呼ばれるプログラムを動作させます。また、
MIME message の表示の仕方を決める *filter* (see Two buffers for an article)
と呼ばれるプログラムを起動時に呼び出します。method と filter
を tm-view に組み込む事によって、`mime/viewer-mode' でさまざまな MIME
content-type を扱う事ができます。

mime/viewer-mode の画面構成
***************************

mime/viewer-mode (see mime/viewer-mode) では各 part に対して

     	[content-button]
     	(content-header)

     	(content-body)
     	(content-separator)

という情報を表示します。これらは条件に従って design を変更したり、表示を
抑制することができます。

以下に、表示例を示します。

     From: morioka@jaist.ac.jp (守岡 知彦 / MORIOKA Tomohiko)
     Subject: Re: 質問？
     Newsgroups: zxr.message.mime
     Date: 22 Oct 93 11:02:44
     Mime-Version: 1.0
     Organization: Japan Advanced Institute of Science and Technology,
             Ishikawa, Japan

     [1  (text/plain)]
       MIME-Edit mode における、MIME message の作り方。

       C-c C-x ? を押すと help が出てくる。

     C-c C-x C-t	insert a text message.
     C-c C-x TAB	insert a (binary) file.
     C-c C-x C-e	insert a reference to external body.
     C-c C-x C-v	insert a voice message.
     C-c C-x C-y	insert a mail or news message.
     C-c C-x RET	insert a mail message.
     C-c C-x C-s	insert a signature file at end.
     C-c C-x t	insert a new MIME tag.
     C-c C-x a	enclose as multipart/alternative.
     C-c C-x p	enclose as multipart/parallel.
     C-c C-x m	enclose as multipart/mixed.
     C-c C-x d	enclose as multipart/digest.
     C-c C-x s	enclose as PGP signed.
     C-c C-x e	enclose as PGP encrypted.
     C-c C-x C-k	insert PGP public key.
     C-c C-x C-p	preview editing MIME message.
     ...

     って訳で、C-c C-x C-i を押して、挿入したい binary file を指定します。

       binary file の MIME encoding には、普通、Base64 を指定します。

     [2  (image/gif)]

     [3  (text/plain)]

       こんな風に、絵入り message のでき上がり。

     〓〓〓〓〓〓〓〓〓〓〓 ロシアン・ティーを一杯。 〓〓〓〓〓〓〓〓〓〓〓
     〓〓〓〓〓  ☆ ジャムではなくマーマレードでもなく蜂蜜で ☆  〓〓〓〓〓
     〓〓〓〓〓         МОРいОКА  ТОМОХИКО         〓〓〓〓〓
     〓〓〓〓〓〓〓  Internet E-mail: <morioka@jaist.ac.jp>  〓〓〓〓〓〓〓

content-button
==============

*content-button* は part の先頭にあって、その part に関する大まか
な情報を表示する部分です。

標準では

             [1.3 test (text/plain)]

のような感じに表示されます。

最初の数字は message 中のこの part の位置を節番号のように表したもので、
*content-number* と呼びます。

２番目の文字列は表題を表します。この情報は、

  1. Content-Type field (see Content-Type field (tm-ja)) の name
     paramater もしくは x-name parameter に書かれた file 名
  2. Content-Description field (see Content-Description field (tm-ja))
     もしくは Subject field に書かれた表題
  3.  uuencode の場合の file 名

から作ります。どれも存在しない場合は空白が表示されます。

３番目の括弧の中の情報はその part の content-type/subtype を表します。非
MIME part の場合、`nil' が表示されます。

この content-button は content-header (see content-header),
content-body (see content-body) を表示しない場合、icon のような役割
を果たします。例えば、

             [2  (image/gif)]

の上で `v' を押せばここに入っている絵が表示されます。

また、mouse 操作が可能な場合、content-button を第２ボタン（3 button
mouse の場合、中央のボタン）で押せば、同様にその絵が表示されます。(see
mime/viewer-mode)

ところで、content-button を表示するのは鬱陶しい場合があるので、
content-button の表示を条件によって抑制することができます。

 -- Variable: mime-viewer/content-button-ignored-ctype-list

     content-button を表示しない content-type を要素とする list.

content-header
==============

*content-header* はある part の header を表示する部分です。しかし、
全ての part の content-header を表示するのは鬱陶しいので、以下のような
mechanism によって表示するかしないかを決めています。

ある part の reversed-content-number を関数
`mime-viewer/header-visible-p' に与えた時の返り値が `t' になる場合、その
part の content-header が表示されます。

この判定関数は、一番上の part でなく、その part の親の content-type
(see content-type (tm-ja)) が変数
`mime-viewer/childrens-header-showing-Content-Type-list' で指定されてい
る場合に `t' を返します。

この条件を変えたい場合は、この関数を再定義して下さい。但し、標準では、変
数 `mime-viewer/childrens-header-showing-Content-Type-list' を参照します
が、再定義した場合、この変数の有効性は保証されないので注意して下さい。

content-header が表示される場合、content-header は
*content-header-filter* と呼ばれる program によって整形されます。
content-header-filter は raw-article-buffer (see raw-article-buffer)
の major-mode を key として変数
`mime-viewer/content-header-filter-alist' から探されます。もし、
content-header-filter が見つからなかった場合、関数
`mime-viewer/default-content-header-filter' が呼ばれます。

 -- Variable: mime-viewer/childrens-header-showing-Content-Type-list

     ある part の子に当たる content の content-header を表示すべき
     Content-Type を収めた list. 既定値は `"message/rfc822"' である。

     この変数は関数 `mime-viewer/header-visible-p' によって参照される。

 -- Function: mime-viewer/header-visible-p RCNUM CINFO &optional CTYPE

     content-info CINFO 中の reversed-content-number が RCNUM である
     part の header が表示される場合、`t' を返す。その part の
     content-type があらかじめわかっている場合、CTYPE に引数として渡すこ
     とができる。

 -- Variable: mime-viewer/content-header-filter-alist

     raw-article-buffer の major-mode を key とした連想リストで、値部に
     は content-header-filter が入っている。

 -- Function: mime-viewer/default-content-header-filter

     ある part の content-header を表示すべき時、変数
     `mime-viewer/content-header-filter-alist' の中に
     content-header-filter が見つからなかった場合に呼び出される。

     変数 `mime-viewer/ignored-field-regexp' を参照する。

 -- Variable: mime-viewer/ignored-field-list

     content-header を表示する時に、表示しない field を指定する。

     正規表現の list になっており、この値を元に変数
     `mime-viewer/ignored-field-regexp' が作られる。

     この変数は直接操作せず、関数 `tm:add-fields' や `tm:delete-fields'
     を使って操作する。

content-body
============

*content-body* は part の内容を表示する部分です。

全ての part の内容を表示できるとは限らないし、また、表示したくない part
も存在するので、以下のような方法で表示するかしないかを決めています。

ある part の content-body を表示するかどうかは、関数
`mime-viewer/body-visible-p' が `t' になるかどうかで決まります。標準では、
ある part の content-type が変数
`mime-viewer/default-showing-Content-Type-list' に設定されている時に表示
されます。

ある part の content-body が表示される時、preview buffer には part の内
容を *content-filter* と呼ばれる program によって整形されたものが表示さ
れます。呼ばれる content-filter は raw-article-buffer (see
raw-article-buffer) の major-mode を key として変数
`mime-viewer/content-filter-alist' から探されます。もし、この変数に登録
されていなかった場合、関数 `mime-viewer/default-content-filter' が呼ばれ
ます。

 -- Variable: mime-viewer/default-showing-Content-Type-list

     content-body を表示すべき content-type を要素とする list.

 -- Function: mime-viewer/body-visible-p RCNUM CINFO &optional CTYPE

     reversed-content-number が RCNUM である part が表示される場合、`t'
     を返す。その part の content-type があらかじめわかっている場合、
     CTYPE に引数として渡すことができる。

 -- Variable: mime-viewer/content-filter-alist

     raw-article-buffer の major-mode を key とした連想リストで、値部に
     は content-filter が入っている。

 -- Function: mime-viewer/default-content-filter RCNUM CINFO CTYPE PARAMS SUBJ

     ある part の content-body を表示すべき時、変数
     `mime-viewer/content-filter-alist' の中に content-filter が見つから
     なかった場合に呼び出される。

     標準では何もしない。

content-separator
=================

*content-separator* は part の一番最後に part 間の境目を明らかに
するために表示されます。

content-separator は関数 `mime-viewer/default-content-separator'によって
表示されます。標準では、content-header も content-body も表示されない場
合のみ、改行を表示します。

content-separator の設定を変更したい場合は、この関数を再定義して下さい。

 -- Function: mime-viewer/default-content-separator RCNUM CINFO CTYPE PARAMS SUBJ

     content-number が CNUM である part の content-separator を表示する。
     標準では、content-header も content-body も表示されない場合のみ、改
     行を表示する。

mime/viewer-mode での操作
*************************

mime/viewer-mode には以下の機能があります。

`u'
     上の part に戻る（message の一番上の part でこれを行なうと Summary
     mode に戻る (*1)）

`p'
     前の part に移動する

`M-TAB'
     前の part に移動する

`n'
     次の part に移動する

`TAB'
     次の part に移動する

`SPC'
     scroll up する

`M-SPC'
     scroll down する

`DEL'
     scroll down する

`RET'
     次の行に移動する

`M-RET'
     前の行に移動する

`M-RET'
     前の行に移動する

`<'
     message の先頭に移動する

`>'
     message の末尾に移動する

`v'
     part を再生する (*2)

`e'
     part から file を取り出す (*2)

`C-c C-p'
     part を印刷する (*2)

`f'
     message 中の X-Face を表示する

`mouse-button-2'
     preview-buffer 中の mouse button を起動する

     content-button を押せば、その part が再生される(*2)

     URL-button を押せば、その WWW browser が起動される

*[注意]*

     (*1) tm-MUA で tm-view の設定をしていない場合、Summary mode には戻
     りません。

     (*2) 実際の動作は対応する method に依ります。

再生処理の実現
**************

`mime/viewer-mode' では、各 part に対して、play (`v'), extract
(`e'), print (`C-c C-p') という操作を行なうことができます。こう
した操作のことを『（part に対する）decode 操作』と呼ぶことにします。また、
play, extract, print という decode 操作の種類のことを
*decoding-mode* と呼ぶことにします。

decode 操作が行なわれた時、その part の content-type (see
content-type (tm-ja)) などの条件やその場の環境に応じて実際にその操作を
実行する手続きが呼ばれます。この手続きのことを *method* と呼びます。

method には、Emacs Lisp で書かれた *内部 method* と、外部 program で実現
された *外部 method* があります。内部 method は Emacs の機能を使ってきめ
細かい処理を行なうことができます。外部 method は非同期プロセス呼び出しを
使って実現されているので、実行中待たされずにすみます。このため、静止画や
動画などの巨大な data を再生するのに良いでしょう。

part の再生に関する条件の設定
=============================

tm-view は decode 操作が行なわれると、変数
`mime/content-decoding-condition' からその時の条件に合致した method を捜
し出して、それを呼び出します。

変数 `mime/content-decoding-condition' は

             (条件1 条件2 ...)

という形をした list で、各条件は

             ((field-type_1 . value_1)
              (field-type_2 . value_2)
              ...)

という形の連想 list になっています。

例えば、text/plain (see text/plain (tm-ja)) の時、tm-plain を起動する
時、

             ((type . "text/plain")
              (method "tm-plain" nil 'file 'type 'encoding 'mode 'name))

という条件を書きます。この method の value 部の書式については後で詳しく
述べます。

この条件は content-type (see content-type (tm-ja)) が text/plain であ
る part なら全ての decoding-mode で有効です。しかし、

             ((type . "text/plain")
              (method "tm-plain" nil 'file 'type 'encoding 'mode 'name)
              (mode . "play"))

なら、play mode の時しか有効になりません。

逆に、

             ((method "metamail" t "-m" "tm" "-x" "-d" "-z" "-e" 'file)
              (mode . "play"))

なら、全ての content-type の play mode で有効になります。

こうして各条件を前から見て行き、最初に有効になった条件が実行されます。

method の値部の書式
-------------------

decode-condition の method field は

             (method . SYMBOL)

か

             (method  文字列  FLAG  引数1  引数2  ...)

という形をしています。

前者は内部 method を指定するための形式で、decode 操作が行なわれた時、
SYMBOL という関数が関数呼び出しによって内部 method として呼び出されます。

後者は外部 method を指定するための形式で、decode 操作が行なわれた時、文
字列で指定された外部 program が非同期プロセス呼び出しによって外部 method
として呼び出されます。

外部 method を指定する場合の method field の書式は以下の通りです。

`文字列'
     外部 method の名前

`FLAG'
     `t' なら content-header も外部 method に渡す。

     `nil' なら content-body のみを渡す。

`引数列'
     外部 method の引数

また、外部 method の引数は次のような形式で書きます。

`文字列'
     その文字列を渡す

`'SYMBOL'
     SYMBOL を key とした decoding-condition の値を渡す

`'文字列'
     文字列を key とした decoding-condition の値を渡す

'SYMBOL で指定できるものには、

`'file'
     part の情報を渡すための file 名

`'type'
     Content-Type field の content-type/subtype

`'encoding'
     Content-Transfer-Encoding field の field body

`'mode'
     decoding-mode

`'name'
     file に落す場合の file 名

などがあり、`'文字列' では Content-Type field の parameter の値が指定で
きます。

decoding-condition の例
-----------------------

以下に decoding-condition の設定例を示します。

     (defvar mime/content-decoding-condition
       '(((type . "text/plain")
          (method "tm-plain" nil 'file 'type 'encoding 'mode 'name))
         ((type . "text/x-latex")
          (method "tm-latex" nil 'file 'type 'encoding 'mode 'name))
         ((type . "audio/basic")
          (method "tm-au"    nil 'file 'type 'encoding 'mode 'name))
         ((type . "image/gif")
          (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
         ((type . "image/jpeg")
          (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
         ((type . "image/tiff")
          (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
         ((type . "image/x-tiff")
          (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
         ((type . "image/x-xbm")
          (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
         ((type . "image/x-pic")
          (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
         ((type . "video/mpeg")`
          (method "tm-mpeg"  nil 'file 'type 'encoding 'mode 'name))
         ((type . "application/octet-stream")
          (method "tm-file"  nil 'file 'type 'encoding 'mode 'name))
         ((type . "message/partial")
          (method . mime/decode-message/partial-region))
         ((method "metamail" t
                  "-m" "tm" "-x" "-d" "-z" "-e" 'file)(mode . "play"))
         ))

例えば、「全部 metamail 使うんや」という場合、

     (setq mime/content-decoding-condition
           '(
             ((method "metamail" t "-m" "tm" "-x" "-d" "-z" "-e" 'file))
            ))

とすれば OK です。

工夫すれば、かなり複雑な条件が書けるでしょう。

以下に、decoding-condition を設定するための有用な関数を紹介します。

 -- Function: set-atype SYMBOL ALIST

     SYMBOL に条件 ALIST を追加します。

     *[例]*

               (set-atype 'mime/content-decoding-condition
               	   '((type . "message/external-body")
               	     ("access-type" . "anon-ftp")
               	     (method . mime/decode-message/external-ftp)
               	     ))

環境変数
========

以下に tm-view の標準 method が参照する環境変数を示します。

TM_TMP_DIR
     一時的に作成される file や file 出力する場合の default の出力先とし
     て用いられる directory を指定する。省略された場合、`/tmp/' が用いら
     れる。

VIDEO_DITHER
     mpeg_play での dither のかけ方を指定する。既定値は `gray'.

TM_WWW_BROWSER
     WWW browser を指定する。既定値は `netscape'.

raw-article-buffer と preview-buffer
************************************

tm-view は、MIME 処理を行なう前の生の message が入っている
*raw-article-buffer* とその内容を user に簡潔に表示し、user が操
作するための *preview-buffer* という２つの buffer を管理します。
raw-article-buffer の major-mode はもともとの MUA の article 表示用の
major-mode であり、preview-buffer の major-mode は `mime/viewer-mode'
(see mime/viewer-mode) となります。

`mime/viewer-mode' を実行すると、tm-view はまず raw-article-buffer の内
容を解析し、その message の構造を raw-article-buffer の buffer local 変
数 `mime::article/content-info' に記録します。

次に、この結果を元に raw-article-buffer に対応する preview-buffer を作り
ます。この際、content-type に応じて、part 単位で header や body を加工す
ることができます。この header を加工するプログラムを
*header-filter* (see content-header), body を加工するプログラム
を *content-filter* (see content-body) と呼び、これらを総称して
*filter* と呼びます。

preview-buffer を作成する時に、message の表示上の構造を記録した
preview-buffer の buffer local 変数 `mime::preview/content-list' が作ら
れます。tm-view は raw-article-buffer 上の `mime::article/content-info'
と preview-buffer 上の `mime::preview/content-list' を用いて message を
管理します。

*[注意]*
     この説明書では、Content-Type field の content-type/subtype のことを
     称して "content-type" と呼びます。

raw-article-buffer の buffer local 変数
=======================================

 -- Structure: mime::content-info RCNUM POINT-MIN POINT-MAX TYPE PARAMETERS ENCODING CHILDREN

     raw-article-buffer における MIME part に関する情報を格納するための
     構造体。単に *content-info* とも呼ぶ。

     この構造体を参照するには、`mime::content-info/スロット名' という
     content-info を引数にとる関数を用いる。

     この構造体のスロットは以下の通りである：

     RCNUM
          "reversed content-number" (list)

     POINT-MIN
          raw-article-buffer における先頭 point

     POINT-MAX
          raw-article-buffer における末尾 point

     TYPE
          content-type/sub-type（文字列、または、nil）

     PARAMETERS
          Content-Type field の parameter （連想 list）

     ENCODING
          Content-Transfer-Encoding（文字列、または、nil）

     CHILDREN
          この part に含まれる part（content-info の list）

     ある part が multipart もしくは message/rfc822 などの別の part を含
     むような part であった場合、CHILDREN に別の part の content-info が
     含まれる事によって、content-info は木構造になる。

 -- Variable: mime::article/content-info

     raw-article-buffer を MIME message として解析した結果
     (content-info)

 -- Variable: mime::article/preview-buffer

     raw-article-buffer に対応する preview-buffer.

 -- Function: mime-article/point-content-number POINT &optional CINFO

     content-info CINFO で管理される領域において、POINT に対応する
     content-number を返す。

     CINFO が省略された場合は、`mime::article/content-info'が用いられる。

 -- Function: mime-article/rcnum-to-cinfo RCNUM &optional CINFO

     content-info CINFO で管理される領域において、
     reversed-content-number RCNUM に対応する content-info を返す。

     CINFO が省略された場合は、`mime::article/content-info' が用いられる。

 -- Function: mime-article/cnum-to-cinfo RCNUM &optional CINFO

     content-info CINFO で管理される領域において、content-number RCNUM
     に対応する content-info を返す。

     CINFO が省略された場合は、`mime::article/content-info' が用いられる。

 -- Function: mime/flatten-content-info &optional CINFO

     content-info CINFO 中に納められた全 part の content-info の list を
     返す。

     CINFO が省略された場合は、`mime::article/content-info' が用いられる。

preview-buffer の buffer local 変数
===================================

 -- Variable: mime::preview/mother-buffer

     この preview-buffer の親に相当する buffer.

 -- Structure: mime::preview-content-info POINT-MIN POINT-MAX BUFFER CONTENT-INFO

     preview-buffer における MIME content に関する情報を格納するための構
     造体。単に *preview-content-info* とも呼ぶ。

     この構造体を参照するには、`mime::content-info/スロット名' という
     content-info を引数にとる関数を用いる。

     この構造体のスロットは以下の通りである。

     POINT-MIN
          preview-buffer における先頭 point

     POINT-MAX
          preview-buffer における末尾 point

     BUFFER
          この part に対応する raw-article-buffer

     CONTENT-INFO
          この part に対応する content-info

 -- Variable: mime::preview/content-list

     この preview-buffer の構造をあらわす preview-content-info の list.

 -- Variable: mime::preview/article-buffer

     この preview-buffer に対応する raw-article-buffer.

 -- Variable: mime::preview/original-major-mode

     この preview-buffer のもとになった buffer の major-mode.

 -- Variable: mime::preview/original-window-configuration

     `mime/viewer-mode' を実行して、この preview-buffer 作る直前の
     window-configuration.

 -- Function: mime-preview/point-pcinfo POINT &optional PCL

     preview-content-info PCL で管理される preview-buffer 中の領域におい
     て、POINT に対応する part の preview-content-info を返す。

     CINFO が省略された場合は、`mime::preview/content-list' が用いられる。

MIME message の decode に関する関数
***********************************

tm-view の提供する関数を各 MUA (see MUA (tm-ja)) に組み込む事によって、
各 MUA に MIME 再生機能を付加する事ができます。

tm-view が各 MUA に提供する関数は、MIME preview を行うための関数
`mime/viewer-mode' と encoded-word (see encoded-word (tm-ja)) を
decode するための関数群です。

MIME preview に関する関数
=========================

 -- Command: mime/viewer-mode &optional MOTHER CTL ENCODING IBUF OBUF MOTHER-KEYMAP

     IBUF を MIME message として解析して、その内容を閲覧するための
     preview-buffer を OBUF に作成し、`mime/viewer-mode' (see
     mime/viewer-mode)に入ります。

     IBUF が省略された場合、current buffer を用います。

     MOTHER は、解析の対象とする raw-article-buffer が message/partial
     形式の分割された message を結合して作成した場合などにおける元の
     buffer を指定するために使います。

     CTL は Content-Type field (see Content-Type field (tm-ja)) の
     field-body を `mime/Content-Type' の出力正式にしたものを入れます。
     この引数がある場合、raw-article-buffer の Content-Type field よりも
     この引数を優先します。

     ENCODING は Content-Transfer-Encoding field の field-body を入れま
     す。この引数がある場合、raw-article-buffer の
     Content-Transfer-Encoding field よりもこの引数を優先します。

     MOTHER-KEYMAP が指定された場合、`mime/viewer-mode' の keymap はこの
     keymap に加えたものとなります。

encoded-word の復元
===================

tm-view は RFC 1522 で規定された encoded-word (see
encoded-word (tm-ja)) を decode するための関数を持っています。

*[Memo]*
     旧 `tiny-mime.el' にあった RFC 1522 encoded-word を decode するため
     の関数群は tm-view に引き継がれました。

 -- Command: mime/decode-message-header

     current buffer の message header 中の encoded-word を decode します。

     壊れていたり、不正だったり、decode できない MIME charset (see
     MIME charset (tm-ja)) が用いられている encoded-word は decode され
     ずそのまま残されます。

 -- Command: mime-eword/decode-region START END &optional UNFOLDING MUST-UNFOLD

     START と END で囲まれた領域中の encoded-word を decode します。

     壊れていたり、不正だったり、decode できない MIME charset (see
     MIME charset (tm-ja)) が用いられている encoded-word は decode され
     ずそのまま残されます。

     UNFOLDING が non-nil の場合、折り返された field を unfolding します。

     MUST-FOLD が non-nil の場合、encoded-word の decode 結果に折り返し、
     もしくは、改行が含まれている場合、unfold し、改行を除きます。

 -- Function: mime-eword/decode-string STRING &optional MUST-UNFOLD

     STRING 中の encoded-word を decode した文字列を返します。

     壊れていたり、不正だったり、decode できない MIME charset (see
     MIME charset (tm-ja)) が用いられている encoded-word は decode され
     ずそのまま出力されます。

     STRING が折り返されている場合、encoded-word を decode する前に
     STRING は unfold されます。

     MUST-FOLD が non-nil の場合、encoded-word の decode 結果に折り返し、
     もしくは、改行が含まれていても、それらは unfold され単体の改行文字
     も取り除かれます。

謝辞
****

最初に、私が tm-view を最初に作った時に、厳しい注文と有益な助言を下さり、
その設計に多大な与えられた升谷保博さんに感謝します。

次に、`tm-ew-d.el' と `mel-b.el' の前身に当たる`mime.el' を書き、その配
布と改造をお許し下さった榎並嗣智さんに感謝します。

また、LaTeX 用の内部 method と message/partial 用の自動結合 method を提
供して下さった岡部寿男さん、tar archive 用の内部 method を提供して下さっ
た上野博さんに感謝します。

最後に、beta test に協力して下さった日本語版、英語版双方の tm mailing
list の member に感謝します。

関数索引
********

変数索引
********