[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1. デコードと表示

この章は、上位階層での MIME メッセージのデコードと表示を扱いま す。

その主な目的は、最初に MIME の記事を解析してから、その解析の結 果として返される「ハンドル」のリストに基づいて、他のプログラムが処理を行 なうことができるようにすることです。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.1 解体

mm-dissect-bufferMIME 記事の解体を担当する関数です。 マルチパートのメッセージが与えられると、メッセージを再帰的に掘り下げて構 造をたどり、そのメッセージの構造を描写する MIME ハンドルの木構 造を返します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.2 非-MIME

Gnus はいくつかの MIME ではない添付ファイルも理解します。それ らは postscript, uuencode, binhex, yenc, shar, forward, gnatsweb, pgp, diff のようなものです。それぞれの機能は、mm-uu-configure-list に 項目を追加することによって無効にすることができます。例です。

 
(require 'mm-uu)
(add-to-list 'mm-uu-configure-list '(pgp-signed . disabled))
postscript

ポストスクリプトのファイル。

uu

Uuencode されたファイル。

binhex

Binhex でエンコードされたファイル。

yenc

Yenc でエンコードされたファイル。

shar

Shar で作られたアーカイブ・ファイル。

forward

MIME を使わずに転送されたメッセージ。

gnatsweb

Gnatsweb の添付ファイル。

pgp-signed

PGP で署名された平文 (clear text, ひらぶん)。

pgp-encrypted

PGP で暗号化された平文 (clear text, ひらぶん)。

pgp-key

PGP の公開鍵。

emacs-sources

Emacs のソースコード。この項目は mm-uu-emacs-sources-regexp に合 致するグループでのみ動作します。

diff

パッチ。これは、コミットされたファイルの差分が自動的に送られるグループを 対象にしたものです。mm-uu-diff-groups-regexp に合致するグループで のみ動作します。

verbatim-marks

Slrn ふうの verbatim (文章を一言一句そのまま表す) 記号の対。

(訳注: ‘#v+’ と ‘#v-’ の二行で囲まれたテキスト を MIME パートに見立てます。)

LaTeX

LaTeX の文献。mm-uu-tex-groups-regexp に合致する名前のグループで のみ動作します。

いくつかの MIME ではない添付は mm-uu-extract というフェー スを使って表示されます。ディフォルトではそれらのパート に MIME ボタンが付きません。K b (gnus-summary-display-buttonized) を使う か gnus-buttonized-mime-typestext/x-verbatim を加える ことによって、ボタンの表示を強制することができます。See (gnus-ja)MIME Commands section ‘MIME コマンド’ in The Gnus Manual.

(訳注: ここで唐突に text/x-verbatim のことが出てくるのは、フェー スが使われてボタンが付かない代表的なパートが verbatim-marks だか らです。)


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.3 ハンドル

MIME ハンドルは、MIME の構成要素を完全に描写するリス トです。

ハンドルの要素をアクセスするために、以下のマクロを使うことができます:

mm-handle-buffer

デコードされていない MIME パートの内容物を保持しているバッファー を返します。

mm-handle-type

パートの解析された Content-Type を返します。

mm-handle-encoding

パートの Content-Transfer-Encoding を返します。

mm-handle-undisplayer

表示されているパートを消すことができるもの (訳注: 関数など) を (それが表 示されている場合に) 返します。

mm-handle-set-undisplayer

表示されているパートを消すことができるもの (訳注: 関数など) を設定します。

mm-handle-disposition

パートの解析された Content-Disposition (訳注: 配置指定) を返しま す。

mm-get-content-id

Content-ID で参照されるハンドル (単数または複数) を返します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.4 表示

表示し、消去し、保存するための関数です。

mm-display-part

パートを表示します。

mm-remove-part

パートを (それが表示されていたら) 消去します。

mm-inlinable-p

MIME タイプがインラインで表示可能かどうかを返します。

mm-automatic-display-p

MIME タイプが自動的に表示されるべきかどうかを返します。

mm-destroy-part

パートによって使われているすべての資源を開放します (訳注: パートの表示、 およびパートを解体して得た個々の部品を一時的に保持しているバッファーやファ イルを消去します)。

mm-save-part

パートをファイルに保存します。

mm-pipe-part

パートを何かのプロセスにパイプします。

mm-interactively-view-part

パートを表示するために使う mailcap の手段を利用者が入力することを求めて、 それを使って表示します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.5 表示のカスタマイズ

mm-inline-media-tests

これは連想リストです。鍵 (第一要素) は MIME タイプ、第二要素は パートを「インライン」で (すなわち Emacs の画面に埋め込んで) 表示するた めの関数、そして第三要素はそのパートがインラインで表示することが可能かど うかを調べるために eval (評価) される式です。

この変数は、あるパートがインライン表示可能かどうかと、もし可能ならそのや り方を指定します。パートが現実にインライン表示されているかどうかを示すも のではありません。

mm-inlined-types

一方これは、上記の変数によって設定された条件を満足した場合に、インライン 表示を行なうタイプを示します。これは MIME メディアタイプのリス トです。(訳注: それぞれの要素は正規表現です。)

mm-automatic-display

これは上記の変数が認めるタイプに限って「自動的」に表示されるタイプのリス トです。つまり、インライン表示が可能なパートだけが自動的に表示されます。

mm-automatic-external-display

これは外部ビューワーで自動的に表示されるタイプのリストです。

mm-keep-viewer-alive-types

これは、別の記事を選択しても外部ビューワーが kill されないメディアタイプ のリストです。

訳注: postscript や dvi など (変数のディフォルト値を参照のこと) のように、 読むのに時間がかかるかもしれないパートのタイプを含むリストです。一方、こ れに含まれない単純な画像のパートなどは、それが含まれていた記事の表示をや めたときに、自動的に外部ビューワーが kill されます。

mm-attachment-override-types

いくつかの MIME エージェントは「添付ファイル」(attachment) の 配置指定 (content-disposition) を持つパートを生成します。この変数に含ま れる MIME タイプの場合はそんな配置指定を無視して、そのパートを インライン表示することができるようにします。(そのパートをインライン表示 することが可能で、私たちがそうすることを望む場合に限って、配置指定が無視 されることに注意してください。)

mm-discouraged-alternatives

multipart/alternative’ に含まれている、見たくないパート の MIME タイプのリストです。メッセージの後半にあるパートが最も 豊かな内容になっていると想定しているので、表示エージェントはそれを表示す ることになっています。しかし、利用者は代わりに他のタイプを見ることを好む かもしれません。このリストは、どんなタイプを最も見たくないかを指定するた めに使います。例えばもし ‘text/html’ パートをぜんぜん見たくなくて、 ‘text/richtext’ パートはあまり見たくないということであれば、以下の ように宣言することができます:

 
(setq mm-discouraged-alternatives
      '("text/html" "text/richtext")
      mm-automatic-display
      (remove "text/html" mm-automatic-display))

さらに、これに "image/.*" を追加することは役に立つでしょう。 Spammers は ‘multipart/alternative’ メッセージの優先される側で画像 を使っていることがあるので、あなたはそれ以外のパートがあることに気が付か ないかもしれません。gnus-buttonized-mime-types も参照してくださ い (see (gnus-ja)MIME Commands section ‘MIME コマンド’ in The Gnus Manual)。 gnus-buttonized-mime-types"multipart/alternative" を追 加した後では、見たい側を手で選ぶことができます。例えば、このように設定す るれば良いでしょう:

 
(setq gnus-buttonized-mime-types
      '("multipart/alternative" "multipart/signed")
      mm-discouraged-alternatives
      '("text/html" "image/.*"))

この場合、Gnus はそのような種類の spam メッセージのために、以下のように ラジオボタンを表示するでしょう:

 
1.  (*) multipart/alternative  ( ) image/gif

2.  (*) text/plain          ( ) text/html
mm-inline-large-images

ウィンドウより大きなインライン画像を表示すると、Emacs はスクロールするこ とができません。つまり画像の全体を見ることができないということです。これ を避けるために、ライブラリーはそれをインライン表示する前に画像のサイズを 計って、それがウィンドウに合わない場合は、ライブラリーはそれを外部で (例 えば ‘ImageMagick’ や ‘xv’ で) 表示します。この変数 を t に設定すると、この検査をさせなくして、ライブラリーにすべての 画像をサイズに関わりなくインラインで表示させます。もしこの変数 を resize にすると、Emacs に画像のサイズを変更する能力があれば、 画像はウィンドウに合うようにサイズが変更されて表示されます。

mm-inline-large-images-proportion

大きな画像のサイズを変更するときの割合。

mm-inline-override-types

mm-inlined-types は、例えばすべての ‘text/.*’ パートをインラ インで表示することを指示するような正規表現を含んでいるかもしれません。一 方、インライン表示が可能だけれども添付ファイルとして扱いたいタイプがある ならば、そのタイプに合致する正規表現のリストをこの変数に設定することによっ て、それを実現することができます。例え ば mm-inlined-types が ‘text/.*’ を含んでいるものとすると、 この変数に ‘text/html’ を含ませることによって、‘text/html’ パー トは添付ファイルとして扱われるようになります。

mm-text-html-renderer

HTML を描画するために使う関数を選択します。すでに用意してある 描画プログラムは、gnus-article-html, w3, w3m(1), links, lynx, w3m-standalone または html2text のシンボル群 のうちの一つを指定することによって選択します。もし nil だったら、 外部ビューワーを使います。さらに関数 (引数として MIME ハンドル が与えられて呼ばれる) を設定することもできます。

mm-inline-text-html-with-images

HTML メールには ‘<img>’ タグを使った spammers (spam をば らまくやから) の卑劣な悪巧みが含まれているかもしれません。最もありそうな のは、あなたがそのメールを読んだことを確認するための意図があることです。 このオプションを nil に設定する (それがディフォルトです) ことによっ て、あなたの個人情報が流出するのを防ぐことができます。今のとこ ろ Emacs/W3 はこれを無視します。Emacs-w3m では、これが nil であっ ても、画像が埋め込まれた場所で t 命令を使うことによって画像を表示 することができます。(2)

mm-w3m-safe-url-regexp

安全な URL 名、すなわち HTML メールを描画するときに個人情報が 流出しそうもない URL に合致する正規表現です (ディフォルト値 は ‘\\`cid:’ です)。nil にすると、すべての URL が安全だと判 断します。Gnus では、これは gnus-safe-html-newsgroups の値に応じ て上書きされます。See (gnus-ja)Various Various section ‘いろいろのいろいろ’ in The Gnus Manual.

mm-inline-text-html-with-w3m-keymap

このオプションを非-nil に設定することによって、インライン表示され た text/html パートで emacs-w3m の命令キーを使うことができます。ディフォ ルト値は t です。

mm-external-terminal-program

外部の端末を起動するために使われるプログラムです。

mm-enable-external

外部の MIME ハンドラーを使うべきかどうかを指定します。

t だったら、定義されているすべての外部の MIME ハンドラー が使われます。nil にすると、ファイルはディスクに保存されま す (mailcap-save-binary-file)。これが ask というシンボルだっ たら、外部の MIME ハンドラーが起動される前に尋ねられるでしょう。

Mailcap (see section mailcap) を介して添付ファイルの表示を始めると、安全な ビューワーを最も安全なオプションで使うことを試みます (添付ファイルをディ スクに保存して、異なる手段 (コマンドラインかダブルクリック) でその表示を 始める場合とは違います)。とにかく、必ずどんな外部プログラムも使わないよ うにしたいのであれば、この変数を nilask に設定してくだ さい。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.6 ファイルとディレクトリー

mm-default-directory

添付ファイルを保存するための、ディフォルトのディレクトリーです。 nil だったら default-directory を使います。

mm-tmp-directory

一時ファイルを格納するためのディレクトリーです。

mm-file-name-rewrite-functions

MIME パートのファイル名を書き換えるために使われる関数のリスト です。それぞれの関数はファイル名に対して順繰りに実行されます (訳注: ある 関数の戻り値が次の関数の引数になります)。出来合いの関数は以下の通りです。

mm-file-name-delete-control

すべての制御文字を消去します。

mm-file-name-delete-gotchas

欠陥があるシェルスクリプトで使われると意図しない結果を生じる文字、すなわ ち ‘|’, ‘>’ および ‘<’、加えて最初の文字として使われ る ‘-’ と ‘.’ を消去します。

mm-file-name-delete-whitespace

すべての空白文字を取り除きます。

mm-file-name-trim-whitespace

先頭と末尾の空白文字を取り除きます。

mm-file-name-collapse-whitespace

複数の連続した空白文字を単一のスペース文字で置き換えます。

mm-file-name-replace-whitespace

空白文字を下線 (underscore) で置き換えます。下線がお好みでなければ、他の 文字を mm-file-name-replace-whitespace 変数に設定してください。

Emacs 標準の関数である capitalize, downcase, upcase および upcase-initials も役に立つことがあるかもしれ ません。

mm-path-name-rewrite-functions

MIME パートのフル・ファイル名を書き換えるために使われる関数の リストです。これはパートを外部で表示するとき (すなわち、融通の効かないプ ログラムが、ファイルが保存された場所を見つけることができるように、絶対パ ス名を変換するため) に使われます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.7 新しいビューワー

これは text/enriched パートをインライン表示するビューワーの例です:

 
(defun mm-display-enriched-inline (handle)
  (let (text)
    (with-temp-buffer
      (mm-insert-part handle)
      (save-window-excursion
        (enriched-decode (point-min) (point-max))
        (setq text (buffer-string))))
    (mm-insert-inline handle text)))

この関数がパラメーターとして MIME ハンドルを受け取ることがわか りますね。それは一時バッファーに作業場所を移し、パートのテキストを挿入し、 そのテキストに何かの処理を施し、結果を覚えておいて、関数が呼ばれたときの バッファーに戻ってその結果を挿入します。

ここにある二つの重要なお助け関数 は mm-insert-partmm-insert-inline です。最初の関数は、 ハンドルのテキストを現在のバッファーに挿入します。これは文字セットおよび エンコーディグ (content transfer decoding) を取り扱います。二番目の関数 は、挿入しろと言ったどんなテキストでも単に挿入しますが、テキストを手軽な 方法で「表示されなくする」(undisplayed にする) ことができるような諸設定 をも行ないます。


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Yasutaka SHINDOH on May 11, 2011 using texi2html 1.82.