From 4e6a2cdff41a07bd68742376dd0995776dc45749 Mon Sep 17 00:00:00 2001 From: yamaoka Date: Wed, 24 Jun 1998 10:31:01 +0000 Subject: [PATCH] Sync up with SEMI 1.8.0. --- ChangeLog | 74 +++++++ MIME-View-API-ja.ol | 612 --------------------------------------------------- Makefile | 2 +- NEWS | 25 +++ README.en | 2 +- SEMI-CFG | 4 +- VERSION | 4 +- mime-bbdb.el | 7 +- mime-partial.el | 46 ++-- mime-pgp.el | 10 +- mime-play.el | 4 +- mime-view.el | 139 ++---------- semi-def.el | 69 +----- 13 files changed, 151 insertions(+), 847 deletions(-) delete mode 100644 MIME-View-API-ja.ol diff --git a/ChangeLog b/ChangeLog index 12d9c11..aa7d2e3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,77 @@ +1998-06-24 Katsumi Yamaoka + + * WEMI: Version 1.8.0 (Mishima) released. + +1998-06-24 MORIOKA Tomohiko + + * SEMI-CFG: Modify for FLIM 1.6.0. + + * README.en (Required environment): Modify for FLIM 1.6.0. + +1998-06-24 MORIOKA Tomohiko + + * mime-view.el: + - Abolish function `mime-raw-find-entity-from-node-id', + `mime-raw-find-entity-from-number'. + - Move function `mime-entity-parent' to mime.el of FLIM. + - Abolish variable `mime-view-uuencode-encoding-name-list'. + - Move function `mime-entity-uu-filename' and + `mime-entity-filename' to mime.el of FLIM. + (mime-preview-follow-current-entity): Use function + `mime-find-entity-from-node-id' instead of + `mime-raw-find-entity-from-node-id'. + (mime-preview-move-to-upper): Don't use + `mime-raw-find-entity-from-node-id'. + + * mime-pgp.el (mime-verify-application/pgp-signature): Don't use + `mime-raw-find-entity-from-node-id'. + (mime-decrypt-application/pgp-encrypted): Likewise. + + * mime-view.el, mime-play.el (mime-entity-safe-filename): Use + `mime-read-field' instead of `mime-entity-read-field'. + + * mime-partial.el + (mime-combine-message/partial-pieces-automatically): Use + `mime-read-field' instead of `mime-entity-read-field'. + + * mime-bbdb.el (mime-bbdb/update-record): Use `mime-fetch-field' + and `mime-read-field' instead of `mime-entity-fetch-field' and + `mime-entity-read-field'. + +1998-06-23 MORIOKA Tomohiko + + * mime-view.el (mime-display-message): Use window of + preview-buffer or preview-buffer to display preview-buffer. + (mime-view-buffer): fixed. + (mime-view-mode): fixed. + + * MIME-View-API-ja.ol: Delete MIME-View-API-ja.ol. + +1998-06-22 MORIOKA Tomohiko + + * NEWS (Changes in SEMI 1.8): New chapter. + +1998-06-22 MORIOKA Tomohiko + + * mime-view.el: Abolish external x-face viewer. + +1998-06-22 MORIOKA Tomohiko + + * semi-def.el: Abolish function `tm:set-fields', `tm:add-fields' + and `tm:delete-fields'. + + * mime-partial.el: Abolish variable + `mime-view-partial-message-method-alist' and function + `mime-view-partial-message'. + (mime-combine-message/partial-pieces-automatically): Use + `request-partial-message-method' in acting-situation. + +1998-06-22 MORIOKA Tomohiko + + * mime-view.el (mime-display-message): Delete unnecessary + `mime-parse-buffer'. + + 1998-06-23 Katsumi Yamaoka * WEMI: Version 1.7.1 (Kan'nami) released. diff --git a/MIME-View-API-ja.ol b/MIME-View-API-ja.ol deleted file mode 100644 index 8a84180..0000000 --- a/MIME-View-API-ja.ol +++ /dev/null @@ -1,612 +0,0 @@ -『SEMI 1.5 MIME-View API の手引』 -by 守岡 知彦 - -* はじめに - -この文書は利用者界面と SEMI MIME-View の界面を作る人や SEMI MIME-View -の method を書くハッカーのために、SEMI MIME View の仕組みを解説し、API -の仕様を明示します。 - - -* MIME message - - -** content-type - -[構造体] mime-content-type - - Content-Type 欄の解析結果を収めるための構造体。 - - [要素] - - primary-type media-type の主型 (symbol). - - subtype media-type の副型 (symbol). - - parameters Content-Type 欄の parameter (連想 list). - - 上記の要素は参照関数 `mime-content-type-要素名' で参照する。 - - -[関数] make-mime-content-type (type subtype &optional parameters) - - content-type の生成子。 - - -[関数] mime-content-type-parameter (content-type parameter) - - CONTENT-TYPE の PARAMETER の値を返す。 - - -[関数] mime-parse-Content-Type (string) - - STRING を content-type として解析した結果を返す。 - - -[関数] mime-read-Content-Type () - - 現在の buffer の Content-Type 欄を読み取り、解析した結果を返す。 - - Content-Type 欄が存在しない場合は nil を返す。 - - -[関数] mime-type/subtype-string (type &optional subtype) - - type と subtype から type/subtype 形式の文字列を返す。 - - -** content-disposition - -[構造体] mime-content-disposition - - Content-Type 欄の解析結果を収めるための構造体。 - - [要素] - - disposition-type disposition-type (symbol). - - parameters Content-Disposition 欄の parameter - (連想 list). - - 上記の要素は参照関数 `mime-content-disposition-要素名' で参照 - する。 - - -[関数] mime-content-disposition-parameter (content-disposition parameter) - - CONTENT-DISPOSITION の PARAMETER の値を返す。 - - -[関数] mime-content-disposition-filename (content-disposition) - - CONTENT-DISPOSITION の filename の値を返す。 - - - -* Message の表現と表示に関する概説 - -Internet の電子書簡・ネットニュースなどの書面 (message) の表現形式は -STD 11 に基づいています。STD 11 の書面本体 (message body) は行を唯一の -構造とする簡易文面 (plain text) であり、文字符号も us-ascii と定められ -ています。実際には、文字符号を us-ascii の代わりにその言語圏で用いられ -る文字符号とした『地域化された STD 11』書面も用いられてきましたが、こ -の場合も書面の文字符号は1つです。このため、利用者界面 (Message User -Agent) は、しばしば、byte 列 = us-ascii 文字列、ないしは、byte 列 = そ -の言語圏で用いる文字符号の文字列のように見倣してきました。 - - - ┏━━━━━━━━━━━━━━┓ - ┃ message ┃ - ┃ ┃ - ─────→┨ ┃ - data ┃ ┃ display -MTA stream ┃ ┠─────→ user - of ┃ ┃ - message ┃ ┃ - ←─────┨ ┃ - ┃ ┃ - ┃ ┃ - ┗━━━━━━━━━━━━━━┛ - 図: 非 MIME MUA の場合 - - -しかしながら、MIME では書面は entity を単位とする木構造になり、また、 -1つの書面で複数の文字符号を用いることができます。また、entity の内容 -は文面や絵のような単純に表示可能なものだけでなく、音声や動画などの一定 -時間再生されるようなものや特定のアプリケーションのデータやプログラムの -ソース、あるいは、ftp や mail service の利用法や URL といった形で表さ -れた外部参照などのさまざまなものが考えらます。このため、表示だけを考え -ていた STD 11 における利用者界面の単純な延長では MIME の全ての機能を扱 -うことはできません。つまり、MIME の形式に合わせて復号するだけでは不十 -分であり、利用者との対話的な再生処理を考慮する必要があります。MIME 書 -面の形式は自動処理がしやすく設計されていますが、MIME 書面に含まれる内 -容の中にはセキュリティー上の問題から自動処理をするべきでないものがあり、 -こういったものの再生に関しては利用者の判断を仰ぐように設計されるべきで -しょう。結局、MIME 書面を扱うためには STD 11 および MIME の構文で記述 -されたメッセージの情報交換用表現とその解釈結果である表示画面や再生等の -処理を区別して考える必要があります。また、利用者との対話的な再生処理が -必要です。 - - - ┏━━━━━━━━━━┓ - ┃ preview ┃display - ┃ layer ┃ or - ┃ ┌──────┐ ┃playback - ┌………………╂…┼……… ─┼─╂────→ - : ┃ │ ←┼─╂───── - ┏━┿━━━━━━┫ └──────┘ ┃ - ┃ : ┌─┐ ┃ ┌──────┐ ┃ - ┃ : │…┼…╂…┼……… ─┼─╂────→ - ┃ : ┌┤ │ ┃ │ ←┼─╂───── - ┃ : ││ │ ┃ └──────┘ ┃ user - ┃ : │└─┘ ┃ ┌──────┐ ┃ - ───→┨┌┼┐│┌─┐ ┃ │ ─┼─╂────→ - data ┃│:│││…┼…╂…┼……… ←┼─╂───── -MTA stream ┃│ ├┼┤ │ ┃ └──────┘ ┃ - of ┃│ │││ │ ┃ ┌──────┐ ┃ - message┃└─┘│└─┘ ┃ │ ─┼─╂────→ - ←───┨ │┌─┐ ┃ │ : ←┼─╂───── - ┃ ││ │ ┃ └──┼───┘ ┃navigation - ┃ └┤ │ ┃ : ┃ - ┃ │…┼…╂…………┘ ┃ - ┃ └─┘ ┗┳━━━━━━━━━┛ - ┃ raw ┃ - ┃ layer ┃ - ┗━━━━━━━━━┛ - 図: MIME MUA の場合 - - -このため、SEMI MIME-View は1つの書面に対して、情報交換用表現を格納す -る mime-raw-buffer と表示用表現を格納する mime-preview-buffer の2つの -buffer を用います。 - - -* mime-raw-buffer - - `mime-raw-buffer' は情報交換用形式のままの書簡の内容が収められる -buffer です。MIME 書面は entity を単位とする木構造ですが、この buffer -の中では書面を構成する entity はこの構造にしたがって管理されます。即ち、 -書面全体を表す root entity を指す buffer 局所変数 -`mime-raw-message-info' で前章で解説した entity 構造体を指すことにより、 -木構造を管理します。 - - -** API - -[buffer 局所変数] mime-raw-message-info - - 書面の構造に関する情報を収める。 - - [形式]mime-entity 構造体 - - -[buffer 局所変数] mime-preview-buffer - - 対応する mime-preview-buffer を示す。 - - -[buffer 局所変数] mime-raw-representation-type - - mime-raw-buffer の representation-type を表す。 - - representation-type とは mime-raw-buffer がどういう形式で表現 - されているかを示すもので、`binary' は network 表現のままである - ことを示し、`cooked' は message 全体が既に code 変換されている - ことを示す。 - - nil の場合、mime-raw-representation-type-alist から得られた値 - が用いられる。 - - -[buffer 局所変数] mime-raw-representation-type-alist - - major-mode と representation-type の連想 list. - - この変数から得られる値よりも mime-raw-representation-type の値 - の方が優先される。 - - -[関数] mime-raw-find-entity-from-node-id (ENTITY-NODE-ID - &optional MESSAGE-INFO) - - 書面構造 MESSAGE-INFO において ENTITY-NODE-ID に対応する - entity を返す。 - - MESSAGE-INFO が省略された場合は `mime-raw-message-info' の値を - 用いる。 - - -[関数] mime-raw-find-entity-from-number (ENTITY-NUMBER - &optional MESSAGE-INFO) - - 書面構造 MESSAGE-INFO において ENTITY-NUMBER に対応する entity - を返す。 - - MESSAGE-INFO が省略された場合は `mime-raw-message-info' の値を - 用いる。 - - -[関数] mime-raw-find-entity-from-point (POINT &optional MESSAGE-INFO) - - 書面構造 MESSAGE-INFO において POINT に対応する entity を返す。 - - MESSAGE-INFO が省略された場合は `mime-raw-message-info' の値を - 用いる。 - -[関数] mime-raw-point-to-entity-node-id (POINT &optional MESSAGE-INFO) - - 書面構造 MESSAGE-INFO において POINT に対応する node-id を返す。 - - MESSAGE-INFO が省略された場合は `mime-raw-message-info' の値を - 用いる。 - - -[関数] mime-raw-point-to-entity-number (POINT &optional MESSAGE-INFO) - - 書面構造 MESSAGE-INFO において POINT に対応する entity-number - を返す。 - - MESSAGE-INFO が省略された場合は `mime-raw-message-info' の値を - 用いる。 - - -[関数] mime-raw-flatten-message-info (&optional message-info) - - 書面構造 MESSAGE-INFO に含まれる全ての entity の list を返す。 - - MESSAGE-INFO が省略された場合は `mime-raw-message-info' の値を - 用いる。 - - -* mime-preview-buffer - - `mime-raw-buffer' は書簡の情報交換用表現を加工して作成した表示用表現 -を収めるための buffer です。画面表示でも entity は意味のある単位で、1 -つの書面は複数の entity を単位に構成されますが、MIME 書面の entity を -単位とする木構造は必ずしも重要ではなく、それ以上に画面表示上での位置が -重要です。また、entity は最小単位ではなく、表示上の構成要素が存在しま -す。また、表示上の要請から、entity に関係の無い要素も存在するかも知れ -ません。 - - SEMI では entity は buffer 上の領域に張り付けられた text 属性 -`mime-view-entity' で表現され、mime-raw-buffer 中の対応する entity を -指します。また、entity 以外の構成要素も text 属性を用いて表現されます。 -これらの構成要素は場合によっては利用者の操作に対してなにがしかの反応を -示すために method を呼び出すことができます。この詳細に関しては後述しま -す。 - - -** API - -[buffer 局所変数] mime-mother-buffer - - 対応する親 buffer を示す。 - - 親 buffer とはこの mime-preview-buffer と mime-raw-buffer の組 - を作る元となった mime-preview-buffer のことである。 - - 例えば、message/partial 形式の書面の表示に対して操作を行うこと - によって、結合された書面に対する mime-preview-buffer ができた - 時、結合されたものにとって、操作を行った message/partial 形式 - の書面が親 buffer に相当する。 - - -[buffer 局所変数] mime-raw-buffer - - 対応する mime-raw-buffer を示す。 - - [注意] この変数は使わない方が良い。なぜなら、 - mime-preview-buffer は複数の mime-raw-buffer に対応する - 可能性があるからである。 - - -[buffer 局所変数] mime-preview-original-window-configuration - - mime-preview-buffer を作る前の window-configuration を収める。 - - -[text-property] mime-view-entity - - 現在位置に対応する entity 構造体を示す。 - - -[関数] mime-preview-original-major-mode (&optional recursive) - - 現在位置に対応する entity の表象が存在する buffer の - major-mode を返す。 - - RECURSIVE に non-nil が指定された場合、始祖の major-mode を返 - す。 - - -* entity - - MIME 書面は entity を単位とする木構造です。entity 構造体は entity や -書面全体の情報を格納する構造体で、以下では単に entity と呼ぶことにしま -す。 - - SEMI MIME-View は書面を情報交換用表現を格納する mime-raw-buffer と表 -示用表現を格納する mime-preview-buffer の2つの buffer で表現します。 -このため、entity はこの2つの buffer にまたがって表現されます。 - - mime-raw-buffer では entity は message の構造を表現するのに用いられ、 -entity 階層の根、即ち、message の entity 構造体の中の木構造として管理 -されます。以下では、message の entity 構造体のことを message-info と呼 -ぶことにします。 - - message-info 中の各 entity は木の節に当たりますが、この木には深さと -同じ深さの中の順番に従って番号が付けられます。即ち、 - - - ┌───┐ - │ nil │ - └─┬─┘ - ┌─────────┼─────────┐ - ┌┴┐ ┌┴┐ ┌┴┐ - │0│ │1│ │2│ - └┬┘ └┬┘ └┬┘ - │ ┌────┼────┐ │ - ┌─┴─┐┌─┴─┐┌─┴─┐┌─┴─┐┌─┴─┐ - │ 0.0││ 1.0││ 1.1││ 1.2││ 2.0│ - └───┘└───┘└───┘└───┘└───┘ - 図: entity の階層と節番号 - - -のように深さ n の節には長さ n の整数列の節番号が振れます。これを -entity-number と呼びます。entity-number は S 式としては (1 2 3) のよう -な整数のリストとして表現されます。 - - 一方、MIME-View では entity の管理に、これと同様の node-id を用いま -す。node-id はちょうど entity-number を逆にしたリストで、entity-number -1.2.3 に対応する node-id は (3 2 1) です。 - - entity-number や node-id を用いることで、mime-raw-message における木 -構造中での entity の相対的な位置関係を扱うことができます。 - - 以上のように entity は mime-raw-buffer では木構造として管理されます -が、mime-preview-buffer では entity は表示画面に対応する領域として管理 -され、全体としては列構造になります。実際には変数がある訳ではなく、 -`mime-view-entity' という text-property で表現されます。 - - entity は単一の buffer における管理や情報の表現に使われる一方、この -2つの buffer をつなぐ情報としても用いられます。 - - -** API - -[構造体] mime-entity - - entity に関する情報を収める構造体。 - - [要素] - - buffer entity が存在する buffer (buffer). - - node-id message 全体を表す entity の階層における、 - この entity の節としての位置を表す id - (整数の list). - - header-start header の先頭位置 (point). - - header-end header の末尾位置 (point). - - body-start body の先頭位置 (point). - - body-end body の末尾位置 (point). - - content-type content-type 欄の情報 (content-type). - - content-disposition content-disposition 欄の情報 - (content-type). - - encoding entity の Content-Transfer-Encoding - (文字列) - - children entity に含まれる entity の list - (entity 構造体 の list). - - 上記の要素は参照関数 `mime-entity-要素名' で参照する。 - - - [疑似要素] - - また、過去との互換性のため、以下の要素名の参照関数も利用可能であ - る。 - - point-min entity の先頭位置 (point). - - point-max entity の末尾位置 (point). - - type/subtype entity の type/subtype (文字列). - - media-type entity の media-primary-type (symbol). - - media-subtype entity の media-subtype (symbol). - - parameters entity の Content-Type field の parameter - (連想 list). - - -[関数] make-mime-entity (node-id point-min point-max - media-type media-subtype parameters encoding - children) - - entity の生成子。 - - -[関数] mime-entity-number (ENTITY) - - ENTITY の entity-number を返す。 - - -[関数] mime-entity-parent (ENTITY &optional MESSAGE-INFO) - - ENTITY の親の entity を返す。 - - MESSAGE-INFO が省略された場合は ENTITY が存在する buffer にお - ける `mime-raw-message-info' の値を用いる。 - - MESSAGE-INFO が指定された場合、これを根と見倣す。 - - -[関数] mime-root-entity-p (ENTITY) - - ENTITY が root-entity(即ち、message 全体)である場合に、非 - nil を返す。 - - - -* entity の解釈と再生の仕組み - -STD 11 や MIME は基本的に書面の構文を定めるのみであり、書面をどのよう -に表示すべきであるとか entity をどのように再生したり処理したりすべきか -といったことを定めません。このため、利用者界面は書面の構文を解釈し、こ -うしたことを決める必要があります。 - -構造情報からその表示や再生・処理に関する振舞を定義する一番簡単な方法は -構造情報に対して1対1でこうしたことを決めてしまうことです。即ち、構造 -に対して表示や再生・処理を予め定義しておくことです。しかし、これでは表 -示や再生・処理に関して異なるモデルの実装を作ることができない、あるいは、 -異なる実装間で情報交換を行うことが困難になります。Internet では異なる -実装間で正しく情報が交換できることが求められますから、こうしたことはで -きません。また、特定の実装がこうした仮定に基づいた形式を生成することは -混乱の元となります。よって、STD 11 や MIME は異なる表示・処理モデル・ -見かけを持った複数の実装に対して中立的な形式を定めるように設計されてい -る訳です。 - -構造情報に対して、見かけを提供する枠組としては SGML, XML, HTML 等で用 -いるスタイルシートという方法があります。これは構造に対する処理を形式的 -に定義するための枠組の上で、見かけを定義するスタイルシートを定義し、用 -いるスタイルシートを指定することで、構造に対して見かけを与えます。 - -MIME の再生処理に関しては mailcap という形式があります。これは -media-type/subtype 等の entity の構造・形式に関する情報に対して、表示 -や印刷等の再生・処理の仕方を定義します。 - -これらは構造情報に対して形式的にその意味を与える枠組で、構造情報に対す -る意味を変えることを可能にします。しかしながら、構造と意味は1対1対応 -であり、解釈の状況依存性が存在しません。Internet の書面には常に形式や -意味の揺れが生じています。これは絶えず新しいプロトコルが提案される一方、 -古い実装も残り、また、『地域化された RFC 822』のような慣習的なものも存 -在するからです。また、一般的で詳細な規定を定めた場合も簡便な実装が存在 -し、規定を完全にサポートする実装よりも簡便な実装の方が多数を占めること -がしばしばです。一方、規定を用いて詳細に指定された情報は有効に利用した -いのが人情です。 - -一方、 - - -* Preview の生成 - -** 表示条件 - -[変数] mime-preview-condition - - entity の表示に関する条件木。 - - -** entity-button - -[関数] mime-view-entity-button-visible-p (ENTITY) - - 非 nil の場合、entity-button を表示することを表す。 - - -[関数] mime-view-insert-entity-button (ENTITY SUBJECT) - - ENTITY の entity-button を挿入する。 - - -** entity-header - - preview-situation の 'header field の値が 'visible である時、その -entityの header が表示されます。 - - -*** header-filter - -*** cutter - - -** entity-body - - preview-situation の 'body-presentation-method field の値が -'with-filter であるか関数である時、その entity の body が表示されます。 - - -*** body-presentation-method - - body-presentation-method は body の見かけを生成する関数で、 - - (entity preview-situation) - -という界面を持っています。 - - -*** body-filter - - preview-situation の 'body-presentation-method field の値が -'with-filter の時は、filter を用いる body-presentation-method を用いる -ことを示しています。この時、preview-situation の 'body-filter field の -値で示される filter 関数で処理された結果が表示されます。 - - この filter 関数の界面は - - (preview-situation) - -であり、この関数が呼ばれる時、処理対象となる entity の内容予め buffer -に挿入されており、また、その領域は narrow されています。 - - -* Entity の再生・処理 - -MIME-View は利用者が再生操作を行った時に、実行環境に応じて適切な解釈を -行い、再生処理を行うための機構を提供します。 - - - ┏━━━━━━━━━┓ - mime-raw-buffer ┃ ┃ - ┏━━━━━━━━━━┻┓ ┃ - ┃information of message┃ ┃ - ┃ ┃ ┃ - ┃ ┌───┐ operation┃type┌───┐ ┃ user's - ┃ │entity├←────╂──┤entity├←╂─── operation - ┃ └─┬─┘┌──┐ ┃ └───┘ ┃ - ┃ │ │MUA │ ┃ ┃ - ┃ │ │type│ ┃ ┃ - ┃ │ └┬─┘ ┣━━━━━━━━┛ - ┗━━━┿━━━┿━━━┛mime-preview-buffer - │ │ -Information│ │ - of │ │ - entity │ │ - + │ │ - operation │ │ - type │ │ - ↓ ↓ - /┷━━━┷\ - ┃ draft ┃ - ┃ of ┃ - ┃ acting ┃ - ┃ situation┃ - \━━━━━/ - │ - │search - ↓ - /━━━━━━━━━━━\ /━━━━━\ - ┃mime-acting-condition ┃───→┃ acting ┃ - \━━━━━━━━━━━/ ┃situation ┃ - \━━┯━━/ - │ - │call - ↓ - ┏━━┷━━┓ playback - ┃processing┠───→ for - ┃ method ┃ user - ┗━━━━━┛ - 図: 再生の仕組み - - -[変数] mime-acting-condition - - entity の再生・処理に関する条件木。 diff --git a/Makefile b/Makefile index 1c595c2..2e354a9 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ # Makefile for WEMI. # -VERSION = 1.7.1 +VERSION = 1.8.0 PACKAGE = wemi SHELL = /bin/sh diff --git a/NEWS b/NEWS index 0352c0c..ab7b381 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,31 @@ SEMI NEWS --- history of major-changes. Copyright (C) 1998 Free Software Foundation, Inc. +* Changes in SEMI 1.8 + +** Abolish external X-Face viewer + + +** Abolish obsolete utility for *-field-list and *-field-regexp + + Abolish function `tm:set-fields', `tm:add-fields' and +`tm:delete-fields'. + + +** Change MUA interface of automatic message/partial combining + + Abolish variable `mime-view-partial-message-method-alist'. + + Instead of it, `request-partial-message-method' in acting-situation +is available to specify MUA depended implementation. + + Each element of `mime-view-partial-message-method-alist' were +required to display message at current summary line, and its return +value were ignored. On the other hand, +`request-partial-message-method' is required to return structure of +message at current summary line. Format of it is mime-entity. + + * Changes in SEMI 1.7 ** Header-presentation-method diff --git a/README.en b/README.en index 489604e..7d82bcf 100644 --- a/README.en +++ b/README.en @@ -44,7 +44,7 @@ Required environment 19.14. WEMI also does not support Emacs 19.29 to 19.34, XEmacs 19.15 or XEmacs 20.2 without mule, but WEMI may work with them. - SEMI requires APEL (8.7 or later) and FLIM (1.5.0 or later) package. + SEMI requires APEL (8.7 or later) and FLIM (1.6.0 or later) package. Please install them before installing it. APEL package is available at: diff --git a/SEMI-CFG b/SEMI-CFG index c10e258..4bafc5c 100644 --- a/SEMI-CFG +++ b/SEMI-CFG @@ -30,8 +30,8 @@ (or (module-installed-p 'calist) (error "Please install APEL 8.7 or later.")) -(or (module-installed-p 'mime-lib) - (error "Please install FLIM 1.5.0 or later.")) +(or (module-installed-p 'mime) + (error "Please install FLIM 1.6.0 or later.")) (if (module-installed-p 'tm-view) (message "Please remove tm from load-path.")) diff --git a/VERSION b/VERSION index 4f01618..772dc00 100644 --- a/VERSION +++ b/VERSION @@ -58,7 +58,7 @@ 1.6.0 Namerikawa 滑川 ; <=> 富山地方鉄道 1.7.0 Mizuhashi 水橋 1.7.1 Higashi-Toyama 東富山 ------ Toyama 富山 ; = JR 高山本線、富山港線 +1.8.0 Toyama 富山 ; = JR 高山本線、富山港線 : : : ------- Takaoka 高岡 ; = JR 氷見線、城端線 : : : @@ -112,7 +112,7 @@ ;; Central Japan Railway 東海旅客鉄道 ;;------------------------------------------------------------------------- 1.7.1 Kan'nami 函南 ------ Mishima 三島 ; = 伊豆箱根鉄道 +1.8.0 Mishima 三島 ; = 伊豆箱根鉄道 ----- Numazu 沼津 ; = JR 御殿場線 ----- Katahama 片浜 ----- Hara 原 diff --git a/mime-bbdb.el b/mime-bbdb.el index 23d4fb3..381655c 100644 --- a/mime-bbdb.el +++ b/mime-bbdb.el @@ -161,14 +161,13 @@ the user confirms the creation." (if bbdb-use-pop-up (mime-bbdb/pop-up-bbdb-buffer offer-to-create) (let* ((message (get-text-property (point-min) 'mime-view-entity)) - (from (mime-entity-fetch-field message 'From)) + (from (mime-fetch-field 'From message)) addr) (if (or (null from) - (null - (setq addr (car (mime-entity-read-field message 'From)))) + (null (setq addr (car (mime-read-field 'From message)))) (string-match (bbdb-user-mail-names) (std11-address-string addr))) - (setq from (or (mime-entity-fetch-field message 'To) + (setq from (or (mime-fetch-field 'To message) from)) ) (if from diff --git a/mime-partial.el b/mime-partial.el index c2aef5b..f5378eb 100644 --- a/mime-partial.el +++ b/mime-partial.el @@ -28,31 +28,20 @@ (require 'mime-view) (require 'mime-play) -(defvar mime-view-partial-message-method-alist nil - "Alist major-mode vs. function to view partial message for mime-partial.") - -;; display Article at the cursor in Subject buffer. -(defsubst mime-view-partial-message (target) - (save-window-excursion - (let ((f (assq target mime-view-partial-message-method-alist))) - (if f - (funcall (cdr f)) - (error "Fatal. Unsupported mode") - )))) - -(defun mime-combine-message/partial-pieces-automatically (entity cal) +(defun mime-combine-message/partial-pieces-automatically (entity situation) "Internal method for mime-view to combine message/partial messages automatically. This function refers variable -`mime-view-partial-message-method-alist' to select function to display +`mime-request-partial-message-method-alist' to select function to display partial messages using mime-view." (interactive) - (let* ((id (cdr (assoc "id" cal))) - (target (cdr (assq 'major-mode cal))) - (article-buffer (buffer-name (current-buffer))) - (subject-buf (eval (cdr (assq 'summary-buffer-exp cal)))) + (let* ((id (cdr (assoc "id" situation))) + (target (cdr (assq 'major-mode situation))) + (subject-buf (eval (cdr (assq 'summary-buffer-exp situation)))) subject-id (root-dir (expand-file-name (concat "m-prts-" (user-login-name)) mime-temp-directory)) + (request-partial-message-method + (cdr (assq 'request-partial-message-method situation))) full-file) (setq root-dir (concat root-dir "/" (replace-as-filename id))) (setq full-file (concat root-dir "/FULL")) @@ -65,8 +54,8 @@ partial messages using mime-view." (if (or (file-exists-p full-file) (not (y-or-n-p "Merge partials?")) ) - (mime-store-message/partial-piece entity cal) - (setq subject-id (mime-entity-read-field entity 'Subject)) + (mime-store-message/partial-piece entity situation) + (setq subject-id (mime-read-field 'Subject entity)) (if (string-match "[0-9\n]+" subject-id) (setq subject-id (substring subject-id 0 (match-beginning 0))) ) @@ -75,19 +64,22 @@ partial messages using mime-view." (while (search-backward subject-id nil t)) (catch 'tag (while t - (mime-view-partial-message target) - (set-buffer article-buffer) - (let* ((situation - (mime-entity-situation mime-message-structure)) + (let* ((message + ;; request message at the cursor in Subject buffer. + (save-window-excursion + (funcall request-partial-message-method) + )) + (situation (mime-entity-situation message)) (the-id (cdr (assoc "id" situation)))) (when (string= the-id id) - (mime-store-message/partial-piece mime-message-structure - situation) + (save-excursion + (set-buffer (mime-entity-buffer message)) + (mime-store-message/partial-piece message situation) + ) (if (file-exists-p full-file) (throw 'tag nil) )) (if (not (progn - (set-buffer subject-buf) (end-of-line) (search-forward subject-id nil t) )) diff --git a/mime-pgp.el b/mime-pgp.el index 90aad3a..fe2e1f2 100644 --- a/mime-pgp.el +++ b/mime-pgp.el @@ -160,13 +160,12 @@ It should be ISO 639 2 letter language code such as en, ja, ...") (end (mime-entity-point-max entity)) (encoding (cdr (assq 'encoding situation))) (entity-node-id (mime-raw-point-to-entity-node-id start)) - (mother-node-id (cdr entity-node-id)) + (mother (mime-entity-parent entity)) (knum (car entity-node-id)) (onum (if (> knum 0) (1- knum) (1+ knum))) - (orig-entity (mime-raw-find-entity-from-node-id - (cons onum mother-node-id) mime-message-structure)) + (orig-entity (nth onum (mime-entity-children mother))) (basename (expand-file-name "tm" mime-temp-directory)) (orig-file (make-temp-name basename)) (sig-file (concat orig-file ".sig")) @@ -220,13 +219,12 @@ It should be ISO 639 2 letter language code such as en, ja, ...") (defun mime-decrypt-application/pgp-encrypted (entity situation) (let* ((entity-node-id (mime-entity-node-id entity)) - (mother-node-id (cdr entity-node-id)) + (mother (mime-entity-parent entity)) (knum (car entity-node-id)) (onum (if (> knum 0) (1- knum) (1+ knum))) - (orig-entity (mime-raw-find-entity-from-node-id - (cons onum mother-node-id) mime-message-structure))) + (orig-entity (nth onum (mime-entity-children mother)))) (mime-view-application/pgp orig-entity situation) )) diff --git a/mime-play.el b/mime-play.el index ee41aba..d2e2f61 100644 --- a/mime-play.el +++ b/mime-play.el @@ -298,8 +298,8 @@ window.") (let ((filename (or (mime-entity-filename entity) (let ((subj - (or (mime-entity-read-field entity 'Content-Description) - (mime-entity-read-field entity 'Subject)))) + (or (mime-read-field 'Content-Description entity) + (mime-read-field 'Subject entity)))) (if (and subj (or (string-match mime-view-file-name-regexp-1 subj) (string-match mime-view-file-name-regexp-2 subj))) diff --git a/mime-view.el b/mime-view.el index 1a0dd3e..196da22 100644 --- a/mime-view.el +++ b/mime-view.el @@ -93,30 +93,6 @@ This value is overridden by buffer local variable `mime-raw-representation-type' if it is not nil.") -(defsubst mime-raw-find-entity-from-node-id (entity-node-id - &optional message-info) - "Return entity from ENTITY-NODE-ID in mime-raw-buffer. -If optional argument MESSAGE-INFO is not specified, -`mime-message-structure' is used." - (mime-raw-find-entity-from-number (reverse entity-node-id) message-info)) - -(defun mime-raw-find-entity-from-number (entity-number &optional message-info) - "Return entity from ENTITY-NUMBER in mime-raw-buffer. -If optional argument MESSAGE-INFO is not specified, -`mime-message-structure' is used." - (or message-info - (setq message-info mime-message-structure)) - (if (eq entity-number t) - message-info - (let ((sn (car entity-number))) - (if (null sn) - message-info - (let ((rc (nth sn (mime-entity-children message-info)))) - (if rc - (mime-raw-find-entity-from-number (cdr entity-number) rc) - )) - )))) - (defun mime-raw-find-entity-from-point (point &optional message-info) "Return entity from POINT in mime-raw-buffer. If optional argument MESSAGE-INFO is not specified, @@ -183,17 +159,6 @@ mother-buffer." (defsubst mime-entity-cooked-p (entity) (eq (mime-entity-representation-type entity) 'cooked)) -(defsubst mime-entity-parent (entity &optional message-info) - "Return mother entity of ENTITY. -If optional argument MESSAGE-INFO is not specified, -`mime-message-structure' in buffer of ENTITY is used." - (mime-raw-find-entity-from-node-id - (cdr (mime-entity-node-id entity)) - (or message-info - (save-excursion - (set-buffer (mime-entity-buffer entity)) - mime-message-structure)))) - (defun mime-entity-situation (entity) "Return situation of ENTITY." (append (or (mime-entity-content-type entity) @@ -226,33 +191,9 @@ If optional argument MESSAGE-INFO is not specified, )) -(defvar mime-view-uuencode-encoding-name-list '("x-uue" "x-uuencode")) - -(defun mime-entity-uu-filename (entity) - (if (member (mime-entity-encoding entity) - mime-view-uuencode-encoding-name-list) - (save-excursion - (set-buffer (mime-entity-buffer entity)) - (goto-char (mime-entity-body-start entity)) - (if (re-search-forward "^begin [0-9]+ " - (mime-entity-body-end entity) t) - (if (looking-at ".+$") - (buffer-substring (match-beginning 0)(match-end 0)) - ))))) - -(defun mime-entity-filename (entity) - (or (mime-entity-uu-filename entity) - (mime-content-disposition-filename - (mime-entity-content-disposition entity)) - (cdr (let ((param (mime-content-type-parameters - (mime-entity-content-type entity)))) - (or (assoc "name" param) - (assoc "x-name" param)) - )))) - (defun mime-view-entity-title (entity) - (or (mime-entity-read-field entity 'Content-Description) - (mime-entity-read-field entity 'Subject) + (or (mime-read-field 'Content-Description entity) + (mime-read-field 'Subject entity) (mime-entity-filename entity) "")) @@ -715,38 +656,6 @@ MEDIA-TYPE must be (TYPE . SUBTYPE), TYPE or t. t means default." '("From")) -;;; @ X-Face -;;; - -;; hack from Gnus 5.0.4. - -(defvar mime-view-x-face-to-pbm-command - "{ echo '/* Width=48, Height=48 */'; uncompface; } | icontopbm") - -(defvar mime-view-x-face-command - (concat mime-view-x-face-to-pbm-command - " | xv -quit -") - "String to be executed to display an X-Face field. -The command will be executed in a sub-shell asynchronously. -The compressed face will be piped to this command.") - -(defun mime-view-x-face-function () - "Function to display X-Face field. You can redefine to customize." - ;; 1995/10/12 (c.f. tm-eng:130) - ;; fixed by Eric Ding - (save-restriction - (narrow-to-region (point-min) (re-search-forward "^$" nil t)) - ;; end - (goto-char (point-min)) - (if (re-search-forward "^X-Face:[ \t]*" nil t) - (let ((beg (match-end 0)) - (end (std11-field-end)) - ) - (call-process-region beg end "sh" nil 0 nil - "-c" mime-view-x-face-command) - )))) - - ;;; @ buffer setup ;;; @@ -836,7 +745,6 @@ The compressed face will be piped to this command.") (play "Play current entity" mime-preview-play-current-entity) (extract "Extract current entity" mime-preview-extract-current-entity) (print "Print current entity" mime-preview-print-current-entity) - (x-face "Show X Face" mime-preview-display-x-face) ) "Menu for MIME Viewer") @@ -968,10 +876,9 @@ The compressed face will be piped to this command.") (setq preview-buffer (concat "*Preview-" (buffer-name raw-buffer) "*"))) (set-buffer raw-buffer) - (mime-parse-buffer) (setq mime-preview-buffer preview-buffer) (let ((inhibit-read-only t)) - (switch-to-buffer preview-buffer) + (set-buffer (get-buffer-create preview-buffer)) (widen) (erase-buffer) (setq mime-raw-buffer raw-buffer) @@ -994,19 +901,21 @@ The compressed face will be piped to this command.") (search-forward "\n\n" nil t) )) (run-hooks 'mime-view-mode-hook) - )) - (set-buffer-modified-p nil) - (setq buffer-read-only t) - ) + (set-buffer-modified-p nil) + (setq buffer-read-only t) + (or (get-buffer-window preview-buffer) + (let ((r-win (get-buffer-window raw-buffer))) + (if r-win + (set-window-buffer r-win preview-buffer) + (switch-to-buffer preview-buffer) + ))) + ))) (defun mime-view-buffer (&optional raw-buffer preview-buffer mother default-keymap-or-function) (interactive) (mime-display-message - (save-excursion - (if raw-buffer (set-buffer raw-buffer)) - (mime-parse-message) - ) + (mime-parse-buffer raw-buffer) preview-buffer mother default-keymap-or-function)) (defun mime-view-mode (&optional mother ctl encoding @@ -1039,7 +948,7 @@ button-2 Move to point under the mouse cursor (save-excursion (if raw-buffer (set-buffer raw-buffer)) (or mime-view-redisplay - (mime-parse-message ctl encoding)) + (setq mime-message-structure (mime-parse-message ctl encoding))) ) preview-buffer mother default-keymap-or-function)) @@ -1146,9 +1055,8 @@ It calls following-method selected from variable str (save-excursion (set-buffer a-buf) - (setq - ci - (mime-raw-find-entity-from-node-id entity-node-id)) + (setq ci + (mime-find-entity-from-node-id entity-node-id)) (save-restriction (narrow-to-region (mime-entity-point-min ci) @@ -1201,17 +1109,6 @@ It calls following-method selected from variable )))) -;;; @@ X-Face -;;; - -(defun mime-preview-display-x-face () - (interactive) - (save-window-excursion - (set-buffer mime-raw-buffer) - (mime-view-x-face-function) - )) - - ;;; @@ moving ;;; @@ -1224,9 +1121,7 @@ If there is no upper entity, call function `mime-preview-quit'." (get-text-property (point) 'mime-view-entity))) (backward-char) ) - (let ((r (mime-raw-find-entity-from-node-id - (cdr (mime-entity-node-id cinfo)) - (get-text-property 1 'mime-view-entity))) + (let ((r (mime-entity-parent cinfo)) point) (catch 'tag (while (setq point (previous-single-property-change diff --git a/semi-def.el b/semi-def.el index 2874217..df00cf0 100644 --- a/semi-def.el +++ b/semi-def.el @@ -29,7 +29,7 @@ (eval-when-compile (require 'cl)) -(defconst mime-user-interface-version '("WEMI" "Kan'nami" 1 7 1) +(defconst mime-user-interface-version '("WEMI" "Mishima" 1 8 0) "Implementation name, version name and numbers of MIME-kernel package.") (autoload 'mule-caesar-region "mule-caesar" @@ -186,73 +186,6 @@ FUNCTION.") pgp-function-alist) -;;; @ field -;;; - -(defun tm:set-fields (sym field-list &optional regexp-sym) - (or regexp-sym - (setq regexp-sym - (let ((name (symbol-name sym))) - (intern - (concat (if (string-match "\\(.*\\)-list" name) - (substring name 0 (match-end 1)) - name) - "-regexp") - ))) - ) - (set sym field-list) - (set regexp-sym - (concat "^" (apply (function regexp-or) field-list) ":")) - ) - -(defun tm:add-fields (sym field-list &optional regexp-sym) - (or regexp-sym - (setq regexp-sym - (let ((name (symbol-name sym))) - (intern - (concat (if (string-match "\\(.*\\)-list" name) - (substring name 0 (match-end 1)) - name) - "-regexp") - ))) - ) - (let ((fields (eval sym))) - (mapcar (function - (lambda (field) - (or (member field fields) - (setq fields (cons field fields)) - ) - )) - (reverse field-list) - ) - (set regexp-sym - (concat "^" (apply (function regexp-or) fields) ":")) - (set sym fields) - )) - -(defun tm:delete-fields (sym field-list &optional regexp-sym) - (or regexp-sym - (setq regexp-sym - (let ((name (symbol-name sym))) - (intern - (concat (if (string-match "\\(.*\\)-list" name) - (substring name 0 (match-end 1)) - name) - "-regexp") - ))) - ) - (let ((fields (eval sym))) - (mapcar (function - (lambda (field) - (setq fields (delete field fields)) - )) - field-list) - (set regexp-sym - (concat "^" (apply (function regexp-or) fields) ":")) - (set sym fields) - )) - - ;;; @ Other Utility ;;; -- 1.7.10.4