tm-view
*******

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

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

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

mime/viewer-mode
================

mime/viewer-mode は MIME message を閲覧するための major-mode です。MIME viewer mode では対話的に MIME message を操作することができます。

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

mime/viewer-mode では各 content に対して

     	[content-subject]
     	(content-header)

     	(content-body)
     	(content-separator)

という情報を表示します。これらは content-type 毎に 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>  〓〓〓〓〓〓〓

     [file tm-view-cs=ja.texi not included]
     [file tm-view-ch=ja.texi not included]
     [file tm-view-cb=ja.texi not included]

content-separator
.................

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

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 である content の content-separator を表示する。標準では、content-header も content-body も表示されない場合のみ、改行を表示する。

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

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

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

p
     前の content に移動する

n
     次の content に移動する

SPC
     scroll up する

M-SPC
     scroll down する

DEL
     scroll down する

RET
     次の行に移動する

M-RET
     前の行に移動する

M-RET
     前の行に移動する

<
     message の先頭に移動する

>
     message の末尾に移動する

v
     content を再生する           (*2)

e
     content から file を取り出す (*2)

C-c C-p
     content を印刷する           (*2)

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

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

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

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

［注意］

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

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

     [file tm-view-m=ja.texi not included]

tm-view の仕組み
============

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

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

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

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

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

     [file tm-view-a=ja.texi not included]

     [file tm-view-p=ja.texi not included]

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

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

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

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

MIME message を閲覧するための関数
-----------------------

Command mime/viewer-mode &optional mother ctl encoding

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

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

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

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

     [file tm-ew-d=ja.texi not included]