This file documents tm-view, a MIME Viewer for GNU Emacs.
GNU Emacs 用の MIME Viewer である `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 の核であり、そ
の上で各 mime/viewer-mode
でさまざまな MIME content-type を扱う事
ができます。
mime/viewer-mode では各 part に対して
以下に、表示例を示します。
標準では
最初の数字は message 中のこの part の位置を節番号のように表したもので、
2番目の文字列は表題を表します。この情報は、
3番目の括弧の中の情報はその part の content-type/subtype を表します。
非 MIME part の場合、
この content-button は content-header, content-body を表示しない場合、icon のような役
割を果たします。例えば、
また、mouse 操作が可能な場合、content-button を第2ボタン(3 button
mouse の場合、中央のボタン)で押せば、同様にその絵が表示されます。
()
ところで、content-button を表示するのは鬱陶しい場合があるので、
content-button の表示を条件によって抑制することができます。
content-button を表示しない content-type を要素とする list.
ある part の reversed-content-number を関数
この判定関数は、一番上の part でなく、その part の親の
この条件を変えたい場合は、この関数を再定義して下さい。但し、標準では、
変数
content-header が表示される場合、content-header は
ある part の子に当たる content の content-header を表示すべき
Content-Type を収めた list. 既定値は
この変数は関数
content-info cinfo 中の reversed-content-number が
rcnum である part の header が表示される場合、
raw-article-buffer の major-mode を key とした連想リストで、値部には
content-header-filter が入っている。
ある part の content-header を表示すべき時、変数
変数
content-header を表示する時に、表示しない field を指定する。
正規表現の list になっており、この値を元に変数
この変数は直接操作せず、関数
全ての part の内容を表示できるとは限らないし、また、表示したくない
part も存在するので、以下のような方法で表示するかしないかを決めていま
す。
ある part の content-body を表示するかどうかは、関数
ある part の content-body が表示される時、preview buffer には part の
内容を
content-body を表示すべき content-type を要素とする list.
reversed-content-number が rcnum である part が表示される場
合、
raw-article-buffer の major-mode を key とした連想リストで、値部には
content-filter が入っている。
ある part の content-body を表示すべき時、変数
標準では何もしない。
content-separator は関数
content-separator の設定を変更したい場合は、この関数を再定義して下さい。
content-number が cnum である part の content-separator を
表示する。標準では、content-header も content-body も表示されない場合
のみ、改行を表示する。
mime/viewer-mode には以下の機能があります。
content-button を押せば、その part が再生される(*2)
URL-button を押せば、その WWW browser が起動される
(*1) tm-MUA で tm-view の設定をしていない場合、Summary mode には戻りま
せん。
(*2) 実際の動作は対応する method に依ります。
decode 操作が行なわれた時、その part の
method には、Emacs Lisp で書かれた
tm-view は decode 操作が行なわれると、変数
変数
例えば、
この条件は
逆に、
こうして各条件を前から見て行き、最初に有効になった条件が実行されます。
decode-condition の method field は
前者は内部 method を指定するための形式で、decode 操作が行なわれた時、
SYMBOL という関数が関数呼び出しによって内部 method として呼び出されま
す。
後者は外部 method を指定するための形式で、decode 操作が行なわれた時、
文字列で指定された外部 program が非同期プロセス呼び出しによって外部
method として呼び出されます。
外部 method を指定する場合の method field の書式は以下の通りです。
また、外部 method の引数は次のような形式で書きます。
'SYMBOL で指定できるものには、
以下に decoding-condition の設定例を示します。
例えば、「全部 metamail 使うんや」という場合、
工夫すれば、かなり複雑な条件が書けるでしょう。
以下に、decoding-condition を設定するための有用な関数を紹介します。
symbol に条件 alist を追加します。
以下に tm-view の標準 method が参照する環境変数を示します。
tm-view は、MIME 処理を行なう前の生の message が入っている
次に、この結果を元に raw-article-buffer に対応する preview-buffer を作
ります。この際、content-type に応じて、part 単位で header や body を加
工することができます。この header を加工するプログラムを
preview-buffer を作成する時に、message の表示上の構造を記録した
preview-buffer の buffer local 変数
raw-article-buffer における MIME part に関する情報を格納するための構造
体。単に
この構造体を参照するには、
この構造体のスロットは以下の通りである:
ある part が multipart もしくは message/rfc822 などの別の part を含む
ような part であった場合、children に別の part の
content-info が含まれる事によって、content-info は木構造になる。
raw-article-buffer を MIME message として解析した結果 (content-info)
raw-article-buffer に対応する preview-buffer.
content-info cinfo で管理される領域において、
point に対応する content-number を返す。
cinfo が省略された場合は、
content-info cinfo で管理される領域において、
reversed-content-number rcnum に対応する content-info を返
す。
cinfo が省略された場合は、
content-info cinfo で管理される領域において、content-number
rcnum に対応する content-info を返す。
cinfo が省略された場合は、
content-info cinfo 中に納められた全 part の content-info の
list を返す。
cinfo が省略された場合は、
この preview-buffer の親に相当する buffer.
preview-buffer における MIME content に関する情報を格納するための構造
体。単に
この構造体を参照するには、
この構造体のスロットは以下の通りである。
この preview-buffer の構造をあらわす preview-content-info の list.
この preview-buffer に対応する raw-article-buffer.
この preview-buffer のもとになった buffer の major-mode.
preview-content-info pcl で管理される preview-buffer 中の領
域において、point に対応する part の preview-content-info
を返す。
cinfo が省略された場合は、
tm-view の提供する関数を各 MUA に組み込
む事によって、各 MUA に MIME 再生機能を付加する事ができます。
tm-view が各 MUA に提供する関数は、MIME preview を行うための関数
ibuf を MIME message として解析して、その内容を閲覧するため
の preview-buffer を obuf に作成し、
ibuf が省略された場合、current buffer を用います。
mother は、解析の対象とする raw-article-buffer が
message/partial 形式の分割された message を結合して作成した場合などに
おける元の buffer を指定するために使います。
ctl は
encoding は Content-Transfer-Encoding field の field-body
を入れます。この引数がある場合、raw-article-buffer の
Content-Transfer-Encoding field よりもこの引数を優先します。
mother-keymap が指定された場合、
tm-view は RFC 1522 で規定された
current buffer の message header 中の encoded-word を decode します。
壊れていたり、不正だったり、decode できない MIME charset が用いられている encoded-word は decode され
ずそのまま残されます。
start と end で囲まれた領域中の encoded-word を
decode します。
壊れていたり、不正だったり、decode できない MIME charset が用いられている encoded-word は decode され
ずそのまま残されます。
unfolding が non-nil の場合、折り返された field を
unfolding します。
must-fold が non-nil の場合、encoded-word の decode 結果に
折り返し、もしくは、改行が含まれている場合、unfold し、改行を除きます。
string 中の encoded-word を decode した文字列を返します。
壊れていたり、不正だったり、decode できない MIME charset が用いられている encoded-word は decode され
ずそのまま出力されます。
string が折り返されている場合、encoded-word を decode する
前に string は unfold されます。
must-fold が non-nil の場合、encoded-word の decode 結果に
折り返し、もしくは、改行が含まれていても、それらは unfold され単体の改
行文字も取り除かれます。
最初に、私が tm-view を最初に作った時に、厳しい注文と有益な助言を下さ
り、その設計に多大な与えられた升谷保博さんに感謝します。
次に、
また、LaTeX 用の内部 method と message/partial 用の自動結合 method を
提供して下さった岡部寿男さん、tar archive 用の内部 method を提供して下
さった上野博さんに感謝します。
最後に、beta test に協力して下さった日本語版、英語版双方の tm mailing
list の member に感謝します。
content-button
nil
が表示されます。
content-header
mime-viewer/header-visible-p
に与えた時の返り値が
t
になる場合、その part の content-header が表示されます。
mime-viewer/childrens-header-showing-Content-Type-list
で
指定されている場合に t
を返します。
mime-viewer/childrens-header-showing-Content-Type-list
を
参照しますが、再定義した場合、この変数の有効性は保証されないので注意し
て下さい。
mime-viewer/content-header-filter-alist
から探
されます。もし、content-header-filter が見つからなかった場合、関数
mime-viewer/default-content-header-filter
が呼ばれます。
"message/rfc822"
で
ある。
mime-viewer/header-visible-p
によって参照
される。
t
を返す。その part の content-type があらかじめわかって
いる場合、ctype に引数として渡すことができる。
mime-viewer/content-header-filter-alist
の中に
content-header-filter が見つからなかった場合に呼び出される。
mime-viewer/ignored-field-regexp
を参照する。
mime-viewer/ignored-field-regexp
が作られる。
tm:add-fields
や
tm:delete-fields
を使って操作する。
content-body
mime-viewer/body-visible-p
が t
になるかどう
かで決まります。標準では、ある part の content-type が変数
mime-viewer/default-showing-Content-Type-list
に設定され
ている時に表示されます。
mime-viewer/content-filter-alist
から探されま
す。もし、この変数に登録されていなかった場合、関数
mime-viewer/default-content-filter
が呼ばれます。
t
を返す。その part の content-type があらかじめわかっ
ている場合、ctype に引数として渡すことができる。
mime-viewer/content-filter-alist
の中に content-filter が
見つからなかった場合に呼び出される。
content-separator
mime-viewer/default-content-separator
によって表示されます。
標準では、content-header も content-body も表示されない場合のみ、改行
を表示します。
mime/viewer-mode での操作
再生処理の実現
mime/viewer-mode
では、各 part に対して、play
(v), extract (e), print (C-c C-p) と
いう操作を行なうことができます。こうした操作のことを『(part に対する)
decode 操作』と呼ぶことにします。また、play, extract, print という
decode 操作の種類のことを part の再生に関する条件の設定
mime/content-decoding-condition
からその時の条件に合致し
た method を捜し出して、それを呼び出します。
mime/content-decoding-condition
は
method の値部の書式
t
なら content-header も外部 method に渡す。
nil
なら content-body のみを渡す。
'文字列
では Content-Type field の parameter
の値が指定できます。
decoding-condition の例
環境変数
raw-article-buffer と preview-buffer
mime/viewer-mode
となりま
す。
mime/viewer-mode
を実行すると、tm-view はまず
raw-article-buffer の内容を解析し、その message の構造を
raw-article-buffer の buffer local 変数
mime::article/content-info
に記録します。
mime::preview/content-list
が作られます。tm-view は
raw-article-buffer 上の mime::article/content-info
と
preview-buffer 上の mime::preview/content-list
を用いて
message を管理します。
raw-article-buffer の buffer local 変数
mime::content-info/スロット名
という content-info を引数にとる関数を用いる。
mime::article/content-info
が用いられる。
mime::article/content-info
が用いられる。
mime::article/content-info
が用いられる。
mime::article/content-info
が用いられる。
preview-buffer の buffer local 変数
mime::content-info/スロット名
というcontent-info を引数にとる関数を用いる。
mime/viewer-mode
を実行して、この preview-buffer 作る直前
の window-configuration.
mime::preview/content-list
が用いられる。
MIME message の decode に関する関数
mime/viewer-mode
と MIME preview に関する関数
mime/viewer-mode
に入ります。
mime/Content-Type
の出力正式にしたものを入
れます。この引数がある場合、raw-article-buffer の Content-Type field
よりもこの引数を優先します。
mime/viewer-mode
の keymap はこの keymap に加えたものとな
ります。
encoded-word の復元
謝辞
概念索引
関数索引
変数索引