This file documents SEMI, a MIME user interface for GNU Emacs.
GNU Emacs 用の MIME user interface である SEMI について説明します。
SEMI は GNU Emacs 用の MIME user interface を提供する package です。
SEMI が提供する MIME user interface は MIME-View と MIME-Edit からなりま す。
MIME-View は MIME や STD 11 および『地域化された RFC 822』message を表示 したり、操作したりするための user interface の中核です。
MIME-Edit は MIME message を生成するための user interface です。
各 MUA でこれらの機能を利用することにより、高度な MIME 機能を利用するこ とができます。
MIME-View は GNU Emacs で動作する汎用的な MIME viewer です。
MIME-View は MIME message を閲覧するための利用者界面 (user interface) の核であり、この上で presentation-method と呼ばれる表示を作るプログラム を動かしたり、acting-method と呼ばれる entity の処理プログラムを動かす ことが可能で、さまざまな種類の entity を扱う事ができるようになっています。
Internet の電子書簡・ネットニュースなどの書面 (message) の表現形式は STD 11 に基づいています。STD 11 の書面本体 (message body) は行を唯一の 構造とする簡易文面 (plain text) であり、文字符号も us-ascii と定められ ています。実際には、文字符号を us-ascii の代わりにその言語圏で用いられ る文字符号とした『地域化された STD 11』書面も用いられてきましたが、こ の場合も書面の文字符号は1つです。このため、利用者界面 (Message User Agent) は、しばしば、byte 列 = us-ascii 文字列、ないしは、byte 列 = そ の言語圏で用いる文字符号の文字列のように見倣してきました。
しかしながら、MIME では書面は entity を単位とする木構造になり、また、 1つの書面で複数の文字符号を用いることができます。また、entity の内容 は文面や絵のような単純に表示可能なものだけでなく、音声や動画などの一定 時間再生されるようなものや特定のアプリケーションのデータやプログラムの ソース、あるいは、ftp や mail service の利用法や URL といった形で表さ れた外部参照などのさまざまなものが考えらます。このため、表示だけを考え ていた STD 11 における利用者界面の単純な延長では MIME の全ての機能を扱 うことはできません。つまり、MIME の形式に合わせて復号するだけでは不十 分であり、利用者との対話的な再生処理を考慮する必要があります。MIME 書 面の形式は自動処理がしやすく設計されていますが、MIME 書面に含まれる内 容の中にはセキュリティー上の問題から自動処理をするべきでないものがあり、 こういったものの再生に関しては利用者の判断を仰ぐように設計されるべきで しょう。結局、MIME 書面を扱うためには STD 11 および MIME の構文で記述 されたメッセージの情報交換用表現とその解釈結果である表示画面や再生等の 処理を区別して考える必要があります。また、利用者との対話的な再生処理が 必要です。
このため、MIME-View は1つの書面に対して、情報交換用表現を格納する mime-raw-buffer と表示用表現を格納する mime-preview-buffer の2つの buffer を用います。
MIME-View は mime-preview-buffer に対して mime-view-mode という MIME message を閲覧するための mode を提供します。利用者はここで各 entity に 対して操作を行うことができます。
mime-view-mode では各 entity に対して
[entity-button] (header) (body) (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> 〓〓〓〓〓〓〓
entity-button は entity の先頭にあって、その entity に関する大まかな情報を表示する部分です。
標準では
[1.3 test (text/plain)]のような感じに表示されます。
最初の数字は message 中のこの entity の位置を節番号のように表したもの で、entity-number と呼びます。
2番目の文字列は表題を表します。この情報は、
3番目の括弧の中の情報はその entity の media-type/subtype を表します。
非 MIME entity の場合、nil
が表示されます。
この entity-button は entity の内容を象徴する icon のような役割を果た します。例えば、
[2 (image/gif)]の上で v を押せばここに入っている絵が表示されます。
また、mouse 操作が可能な場合、entity-button を第2ボタン(3 button mouse の場合、中央のボタン)で押せば、同様にその絵が表示されます。
entity-header はある entity の header を表示する部 分です(「そのままやんけ」って怒らないで。そういうもんなんです)。
entity-body は part の内容を表示する部分です。
これもひねりが足りないですが、まあ、そういうもんです。
とはいえ、実際には少しひねってます。
text entity の場合は charset に応じて code 変換したりしますし、XEmacs では image entity を変換しないといけないし。
詳しくはまた後で。
mime-preview-buffer には以下の機能があります。
content-button を押せば、その part が再生される(*2)
URL-button を押せば、その WWW browser が起動される
[注意]
(*1) MUA で mime-view の設定をしていない場合、Summary mode には戻りま せん。
(*2) 実際の動作は対応する method に依ります。
MIME-Edit は GNU Emacs で動作する汎用的な MIME composer です。
mime-edit-mode は MIME message を作成するための minor-mode です。この mode では tag を使ってさまざま な種類の data を表現し、さまざまな種類の data からなる複数の部分からなる message を編集することを可能にしています。
tag には
single-part tag は single part を表現するための tag で、
--[[TYPE/SUBTYPE;PARAMETERS][ENCODING] OPTIONAL-FIELDS]
というような形をしています。
TYPE/SUBTYPE および PARAMETERS は @DREF{(mime-ja)Content-Type}@end DREF{@refill} 欄の type/subtype および parameters を表します。TYPE/SUBTYPE は 必須であり、PARAMETERS は省略可です。
ENCODING は @DREF{(mime-ja)Content-Transfer-Encoding}@end DREF{@refill} 欄を表 します。これも省略可です。
OPTIONAL-FIELDS は Content-Type, Content-Transfer-Encoding 以外の field を書くための部分で、省略可です。
multi-part tag は
multi part を表 現するための tag で、
--<>-@{
という形の multi-part 開始 tag と呼ばれる multi part の開始を示す tag と
--@}-<>
という形の multi-part 終了 tag と呼ばれる multi part の終了を示す tag があります。
また、multi-part 開始 tag と multi-part 終了 tag で囲まれた部分を enclosure と呼びます。
single-part を作るための操作には以下のようなものがあります。
enclosure を作るための操作としては以下のようなものがあります。
mime-edit-mode におけるその他の操作を説明します。
C-c C-x C-i (mime-edit-insert-file
) を実行した時、
挿入される file に対する media-type や encoding などの tag の情報は変数
mime-file-types
によって file 名から推測されます。
前に C-u を付けた時、および、適当な値が見付からなかった場合、 user に対して値の入力を促します。(前に C-u を付けた時、推 測された値が既定値として用いられます)
file 名に対する既定値を変えたい場合は変数 mime-file-types
を設定して下さい。
@defvar mime-file-types
挿入される file の file 名に対する tag の既定値を与える。
この変数は @lisp (FILE_PAT TYPE SUBTYPE PARAMS ENCODING DISPOSITION_TYPE DISPOSITION_PARAMS) @end lisp という list の list で、各要素は以下の通りである:
message に挿入する data は @DREF{(mime-ja)7bit}@end DREF{@refill} ないし @DREF{(mime-ja)8bit}@end DREF{@refill} もしくは @DREF{(mime-ja)binary}@end DREF{@refill} で表現することができます。
よって、7bit しか通さない @DREF{(mime-ja)MTA}@end DREF{@refill} を経由する場合、 7bit の data はそのままで送れますが、8bit や binary の data は 7bit に変 換しなければなりません。
同様に、8bit しか通さない MTA を経由する場合、7bit や 8bit の data は そのままで送れますが、binary の data は 7bit か 8bit に変換しなければ なりません。
[Memo]
EBCDIC しか通さない MTA を経由する場合、7bit の data も base64 等で変 換しないと送れませんが、私は EBCDIC のことまでは知りません。(^_^;同様に、制御文字を通さない MTA のことや code 変換を行なう MTA も消えて なくなって欲しいです。(^_^;
binary も通す MTA も存在するんでしょうが、今のところあまり一般的とはい えないでしょう。
transfer level というのはどの範囲の data まで送れるか
ということを表すものです。mime-edit は
mime-transfer-level
という変数を持っており、これで
transfer level を表現します。
@defvar mime-transfer-level
transfer level を表す。
ある data の transfer level がこの値を越える場合、7bit data への変換が 行われる。
現在のところ、7 か 8 が有効である。既定値は 7 である。
EBCDIC を 5, ASCII printable のみを 6, binary を 9 とすることを計画し ているが、実装の予定はない。 @end defvar [Memo]
transfer level はmessage header には関係しない。 MIME は body において、8bit の data を使えるように @DREF{(mime-ja)STD 11}@end DREF{@refill} を拡張しているが、message header では @DREF{(mime-ja)us-ascii}@end DREF{@refill} のみを用いることを求めている。
@defvar mime-edit-split-message
Split large message if it is non-nil. @end defvar @defvar mime-edit-message-default-max-lines
Default maximum lines of a message. @end defvar @defvar mime-edit-message-max-lines-alist
Alist of major-mode vs maximum lines of a message.
If it is not specified for a major-mode,
mime-edit-message-default-max-lines
is used.
@end defvar
@defvar mime-edit-split-blind-field-regexp
Regular expression to match field-name to be ignored when split sending. @end defvar
mime-edit では PGP/MIME (RFC 2015) および PGP-kazu (draft-kazu-pgp-mime-00.txt) による暗号化・ 電子署名・公開鍵の挿入機能を利用することができます。
但し、この機能を利用するには
Mailcrypt package と pgp command が必要です。 @defvar pgp-function-alist
Alist of service names vs. corresponding functions and its filenames.
Each element looks like (SERVICE FUNCTION FILE)
.
SERVICE is a symbol of PGP processing. It allows `verify', `decrypt', `fetch-key', `snarf-keys', `mime-sign', `traditional-sign', `encrypt' or `insert-key'.
Function is a symbol of function to do specified SERVICE.
FILE is string of filename which has definition of corresponding FUNCTION. @end defvar @defun pgp-function method
Return function to do service @var{method}. @end defun
@defvar mime-button-face
Face used for content-button or URL-button of MIME-Preview buffer. @end defvar @defvar mime-button-mouse-face
Face used for MIME-preview buffer mouse highlighting. @end defvar @defvar mime-browse-url-function
Function to browse URL. @end defvar
@defun mime-add-condition target-type condition &optional mode file
Add @var{condition} to database specified by @var{target-type}.
@var{target-type} must be preview
or
action
.
If optional argument @var{mode} is strict
or
nil
(omitted), @var{condition} is added strictly.
If optional argument @var{mode} is with-default
,
@var{condition} is added with default rule.
If optional argument @var{file} is specified, it is loaded when @var{condition} is activate. @end defun