SEMI 1.14 説明書
****************

This file documents SEMI, a MIME user interface for GNU Emacs.

GNU Emacs 用の MIME user interface である SEMI について説明します。

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 message の閲覧
*******************

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

MIME-View は MIME message を閲覧するための利用者界面 (user interface)
の核であり、この上で presentation-method と呼ばれる表示を作るプログラ
ムを動かしたり、acting-method と呼ばれる entity の処理プログラムを動か
すことが可能で、さまざまな種類の entity を扱う事ができるようになってい
ます。

MIME-View 概説
==============

Internet の電子書簡・ネットニュースなどの書面 (message) の表現形式は
STD 11 に基づいています。STD 11 の書面本体 (message body) は行を唯一の
構造とする簡易文面 (plain text) であり、文字符号も us-ascii と定められ
ています。実際には、文字符号を us-ascii の代わりにその言語圏で用いられ
る文字符号とした『地域化された STD 11』書面も用いられてきましたが、こ
の場合も書面の文字符号は１つです。このため、利用者界面 (Message User
Agent) は、しばしば、byte 列 = us-ascii 文字列、ないしは、byte 列 = そ
の言語圏で用いる文字符号の文字列のように見倣してきました。

しかしながら、MIME では書面は entity を単位とする木構造になり、また、
１つの書面で複数の文字符号を用いることができます。また、entity の内容
は文面や絵のような単純に表示可能なものだけでなく、音声や動画などの一定
時間再生されるようなものや特定のアプリケーションのデータやプログラムの
ソース、あるいは、ftp や mail service の利用法や URL といった形で表さ
れた外部参照などのさまざまなものが考えらます。このため、表示だけを考え
ていた STD 11 における利用者界面の単純な延長では MIME の全ての機能を扱
うことはできません。つまり、MIME の形式に合わせて復号するだけでは不十
分であり、利用者との対話的な再生処理を考慮する必要があります。MIME 書
面の形式は自動処理がしやすく設計されていますが、MIME 書面に含まれる内
容の中にはセキュリティー上の問題から自動処理をするべきでないものがあり、
こういったものの再生に関しては利用者の判断を仰ぐように設計されるべきで
しょう。結局、MIME 書面を扱うためには STD 11 および MIME の構文で記述
されたメッセージの情報交換用表現とその解釈結果である表示画面や再生等の
処理を区別して考える必要があります。また、利用者との対話的な再生処理が
必要です。

このため、MIME-View は１つの書面に対して、情報交換用表現を格納する
mime-raw-buffer と表示用表現を格納する mime-preview-buffer の２つの
buffer を用います。

MIME-View は mime-preview-buffer に対して mime-view-mode という MIME
message を閲覧するための mode を提供します。利用者はここで各 entity に
対して操作を行うことができます。

mime-preview-buffer の画面構成
==============================

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-button* は entity の先頭にあって、その entity に関する大まかな
情報を表示する部分です。

標準では

             [1.3 test (text/plain)]

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

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

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

  1. Content-Description field もしくは Subject field に書かれた表題
  2. Content-Disposition field の filename parameter に書かれた file
     名
  3. Content-Type field の name parameter に書かれた file 名
  4.  uuencode の場合の file 名

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

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

この entity-button は entity の内容を象徴する icon のような役割を果た
します。例えば、

             [2  (image/gif)]

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

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

entity-header
-------------

*entity-header* はある entity の header を表示する部分です（「そのまま
やんけ」って怒らないで。そういうもんなんです）。

entity-body
-----------

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

これもひねりが足りないですが、まあ、そういうもんです。

とはいえ、実際には少しひねってます。

text entity の場合は charset に応じて code 変換したりしますし、XEmacs
では image entity を変換しないといけないし。

詳しくはまた後で。

mime-preview-buffer での操作
============================

mime-preview-buffer には以下の機能があります。

`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'
     前の行に移動する

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

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

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

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

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

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

*[注意]*

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

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

MIME message の編集
*******************

*MIME-Edit* は GNU Emacs で動作する汎用的な MIME composer です。

MIME message を編集するための minor-mode
========================================

*mime-edit-mode* は MIME message を作成するための minor-mode です。こ
の mode では *tag* を使ってさまざまな種類の data を表現し、さまざまな
種類の data からなる複数の部分からなる message を編集することを可能に
しています。

tag には

   *  single-part tag
   *  multi-part tag

の２つがあります。

single-part tag は single part を表現するための tag で、

             --[[TYPE/SUBTYPE;PARAMETERS][ENCODING]
             OPTIONAL-FIELDS]

というような形をしています。

TYPE/SUBTYPE および PARAMETERS は Content-Type (see
Content-Type (mime-ja)) 欄の type/subtype および parameters を表しま
す。TYPE/SUBTYPE は必須であり、PARAMETERS は省略可です。

ENCODING は Content-Transfer-Encoding (see
Content-Transfer-Encoding (mime-ja)) 欄を表します。これも省略可です。

OPTIONAL-FIELDS は Content-Type, Content-Transfer-Encoding 以外の
field を書くための部分で、省略可です。

multi-part tag は multi part (see multipart (mime-ja)) を表現するた
めの tag で、

             --<<TYPE>>-@{

という形の *multi-part 開始 tag* と呼ばれる multi part の開始を示す
tag と

             --@}-<<TYPE>>

という形の *multi-part 終了 tag* と呼ばれる multi part の終了を示す
tag があります。

また、multi-part 開始 tag と multi-part 終了 tag で囲まれた部分を
*enclosure* と呼びます。

single-part に対する操作
========================

single-part を作るための操作には以下のようなものがあります。

`C-c C-x C-t'
     text part を表す single-part tag を挿入します。

`C-c C-x C-i'
     file を MIME part として添付します。前に `C-u' を付けた場合、常に
     media-type, subtype 等を聞いて来ます。(cf. tag specification for inserted file)

`C-c C-x C-e'
     external part を挿入します。

`C-c C-x C-v'
     `C-g' が押されるまで録音を行い、音声 part を挿入します。（使用で
     きない場合があります）

`C-c C-x C-y'
     現在表示中の (mail or news) message を挿入します。（実際の動作は
     使用している MUA に依存します）

`C-c C-x C-m'
     mail message を挿入します。

`C-c C-x C-w, C-c C-x C-s'
     signature を挿入します。

`C-c C-x C-k'
     PGP (see PGP) の公開鍵を挿入します。

`C-c C-x t'
     任意の single-part tag を挿入します。

enclosure に対する操作
======================

enclosure を作るための操作としては以下のようなものがあります。

`C-c C-m C-a'
     指定した region を multipart/alternative として囲みます。

`C-c C-x C-p'
     指定した region を multipart/parallel として囲みます。

`C-c C-x C-m'
     指定した region を multipart/mixed として囲みます。

`C-c C-x C-d'
     指定した region を multipart/digest として囲みます。

`C-c C-x C-s'
     指定した region に電子署名を行います。(cf. PGP)

`C-c C-x C-e'
     指定した region を暗号化します。(cf. PGP)

`C-c C-x C-q'
     指定した region 内の tag を無効にし、その tag を文字列として利用
     できるようにします。（現在の版ではうまく働かないことがあります。
     また、電子署名との併用に関しても不完全です）

mime-edit-mode におけるその他の操作
===================================

mime-edit-mode におけるその他の操作を説明します。

`C-c C-c'
     編集中の message を送信します。

`C-c C-x p'
     編集中の message を preview します。(cf. MIME-View)

`C-c C-x C-z'
     編集中の message を送信することなく、mime-edit-mode を終了します。

`C-c C-x /'
     大きな message を送信する場合に message/partial 形式に自動分割可
     能とするかどうかを決めます。

`C-c C-x 7'
     transfer level (see transfer level) を 7bit (see
     7bit (mime-ja)) にします。

`C-c C-x 8'
     transfer level (see transfer level) を 8bit (see
     8bit (mime-ja)) にします。

`C-c C-x v'
     message 全体を電子署名するかどうかを決めます。(cf. PGP)

`C-c C-x h'
     message 全体を暗号化するかどうかを決めます。(cf. PGP)

`C-c C-x ?'
     help message を表示します。

挿入される file に対する tag の決定
===================================

`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' を設定して
下さい。

 -- Variable: mime-file-types

     挿入される file の file 名に対する tag の既定値を与える。

     この変数は

          	(FILE_PAT TYPE SUBTYPE PARAMS ENCODING
          	 DISPOSITION_TYPE DISPOSITION_PARAMS)

     という list の list で、各要素は以下の通りである：

     `FILE_PAT'
          file 名を表す正規表現

     `TYPE'
          media type

     `SUBTYPE'
          media subtype

     `PARAMS'
          Content-Type field の parameter

     `ENCODING'
          Content-Transfer-Encoding

     `DISPOSITION_TYPE'
          disposition-type

     `DISPOSITION_PARAMS'
          Content-Disposition field の parameter

     設定例： `*.rtf' に対する media type を application/rtf にする場
     合

          (eval-after-load
              "mime-edit"
            '(set-alist 'mime-file-types
          	      "\\.rtf$"
          	      '("application" "rtf" nil nil
          		"attachment" (("filename" . file)))
          	      ))

transfer level
==============

message に挿入する data は 7bit (see 7bit (mime-ja)) ないし 8bit
(see 8bit (mime-ja)) もしくは binary (see binary (mime-ja)) で表
現することができます。

よって、7bit しか通さない MTA (see MTA (mime-ja)) を経由する場合、
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 を表現します。

 -- Variable: mime-transfer-level

     transfer level を表す。

     ある data の transfer level がこの値を越える場合、7bit data への
     変換が行われる。

     現在のところ、7 か 8 が有効である。既定値は 7 である。

     EBCDIC を 5, ASCII printable のみを 6, binary を 9 とすることを計
     画しているが、実装の予定はない。

*[Memo]* transfer level は message header (see header) には関
     係しない。MIME は body において、8bit の data を使えるように STD
     11 (see STD 11 (mime-ja)) を拡張しているが、message header で
     は us-ascii (see us-ascii (mime-ja)) のみを用いることを求めて
     いる。

Splitting
=========

 -- Variable: mime-edit-split-message

     Non-nil ならば大きなメッセージを分割して送信します。

 -- Variable: mime-edit-message-default-max-lines

     メッセージの最大行数のデフォルト値です。

 -- Variable: mime-edit-message-max-lines-alist

     メジャーモード対メッセージの最大行数から成る連想リストです。

     メジャーモードがここで指定されてない場合には
     `mime-edit-message-default-max-lines' を用います。

 -- Variable: mime-edit-split-blind-field-regexp

     分割送信の際に無視されるフィールド名にマッチする正規表現です。

その他
******

PGP
===

mime-edit では *PGP/MIME* (RFC 2015) および*PGP-kazu*
(draft-kazu-pgp-mime-00.txt) による暗号化・電子署名・公開鍵の挿入機能
を利用することができます。

但し、この機能を利用するには各種 pgp command が必要です。

 -- Variable: pgg-default-scheme

     暗号化もしくは署名に用いる PGP もしくは GnuPG コマンドのバージョ
     ンです。値は symbol を指定します。使えるバージョンは `gpg'、`pgp'
     もしくは `pgp5' です。

 -- Variable: pgg-scheme

     復号もしくは検証に用いる PGP もしくは GnuPG コマンドのバージョン
     です。値は symbol を指定します。使えるバージョンは `gpg'、`pgp'
     もしくは `pgp5' です。

 -- Variable: pgg-insert-url-function

     鍵サーバから公開鍵を取り寄せる際に使う関数です。デフォルトでは
     Emacs/W3 を使う設定になっています。emacs-w3m を使う場合には次のよ
     うに設定します。
          (setq pgg-insert-url-function #'w3m-retrieve)

押釦
====

 -- Variable: mime-button-face

     MIME-Preview バッファで content-button もしくは URL-button に用い
     るface です。

 -- Variable: mime-button-mouse-face

     MIME-preview バッファでマウスをハイライトする際に用いる face です。

 -- Variable: mime-browse-url-function

     URL をブラウズする関数です。

実行条件の設定
==============

 -- Function: mime-add-condition TARGET-TYPE CONDITION &optional MODE FILE

     Add CONDITION to database specified by TARGET-TYPE.

     TARGET-TYPE must be `preview' or `action'.

     If optional argument MODE is `strict' or `nil' (omitted),
     CONDITION is added strictly.

     If optional argument MODE is `with-default', CONDITION is added
     with default rule.

     If optional argument FILE is specified, it is loaded when
     CONDITION is activate.

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