『tiny-mime.el 説明書』 by. 守岡 知彦 1994年7月27日 この説明書は ol2 と plain2 を用いることによって LaTeX 形式に変換する ことができます。 * tiny-mime.el とは tiny-mime.el は Mule, NEmacs, NEpoch 上で動作する MIME message header の encoder/decoder です。オリジナルは、昔、えなみ つぐとも さん が fj.editor.emacs に投稿された MIME message header の decoder です。 現在では、当時のものに比べ、 ・decoding 時における unfolding 機能 ・ISO-2022-JP に加え、ISO-8859-*, US-ASCII などの encoding/decoding ・Q-encoding の decoding といった機能を持っています。 * tiny-mime.el のサポートする character set, encoding tiny-mime.el は、次の character set, encoding をサポートします。 ** Mule ISO-2022-JP, US-ASCII, ISO-8859-1..9, ISO-2022-CN, ISO-2022-KR, EUC-KR などの encoding/decoding をサポートします。また、関数 mime/set-charset-and-encoding で追加・変更ができます。 ** NEmacs, NEpoch ISO-2022-JP, US-ASCII の encoding/decoding をサポートします。 また、ISO-8859-*であっても、encoded-text に含まれる文字列が実際には ASCII で表せる範囲なら表示します。 * tiny-mime.el の簡単な使い方 ** decode tiny-mime.el を load して、decode したい buffer 上で、 M-x mime/decode-message-header を実行します。 また、decode したい region を M-x mime/decode-region で decode することができます。引用などで body-part に残った encoded-word を decode するのに便利でしょう。 ** encode tiny-mime.el を load して、encode したい buffer 上で、 M-x mime/encode-message-header を実行します。 * tiny-mime.el の変数 ** mime/no-encoding-header-fields tiny-mime.el で encode しない message header の field を指定します。 default では X-Nsubject が指定されています。 例: X-Nsubject と Subject を encode しないようにする。 [[E ---------------------------------------------------------------------- (setq mime/no-encoding-header-fields '("X-Nsubject" "Subject")) ---------------------------------------------------------------------- ]]E [注意] mime.el と併用する場合、tiny-mime.el が encode しなくても、 mime.el が encode するので、mime.el の message header encoder が働かな いようにに設定します。 ** mime/use-X-Nsubject この変数の値が t の場合、message header を encode する時、encode し た結果、Subject に encoded-word が含まれる場合、Subject を decode した ものを入れた X-Nsubject を作成します。 default では nil が指定されています。 [注意]Mule で ISO-2022-JP に含まれるもの以外の文字集合を使う場合は、 これを指定しない方が賢明です。 ** mail-header-separator 関数 mime/encode-message-header における message header と body part の区切りを表す変数です。例えば、GNUS では "--text follows this line--" が指定されます。 [注意]この変数の文字列は、version 2.6 より正規表現ではなくなりました。 * mailer, news reader への組み込み 日常的に、無意識に MIME header を本来の言語で見たいというのは当然の 欲求です。そこで、tiny-mime.el を mailer や news reader に組み込むと自 動的に MIME header の encode/decode ができます。 また、metamail を使っておられる方でも、普段は message header の decode だけで良くて、絵や音などを再生する時だけ metamail を使うという ような使い方もできます。 この目的を実現するには、mailer や news reader の適切な hook に mime/decode-message-header を入れれば良いでしょう。また、文字列の decode をしたい場合のために、 (mime/decode-string 文字列) という関数も用意しています。 GNUS と mh-e に関しては、tm-gnus, tm-mh-e という MIME 対応化モジュー ルを用意しています。 これらの、各 MUA に対応するモジュールを load すると tiny-mime.el に よる MIME header の復元と tm-body を利用した MIME body の再生が行なえ ます。 詳しくは、それぞれの説明書をお読み下さい。 * mime.el との併用 mime.el と併用する例を示します。この例の場合、ISO-2022-JP 文字列の encode は tiny-mime.el が行ない、それ以外の文字集合に属する文字列は mime.el が encode します。 また、tiny-mime.el が encode しなかった文字列も mime.el が encode す るので、結果的に、必ず全ての field が encode されることに注意して下さ い。 [[E ---------------------------------------------------------------------- ;;; ;;; for Edit MIME mode ;;; (autoload 'mime-mode "mime" "Edit MIME message." t) (autoload 'mime-convert-buffer "mime" "convert to MIME." t) (autoload 'insert-signature "signature" "Insert signature" t) (add-hook 'mime-mode-hook (function (lambda () (define-key (current-local-map) "\C-c\C-s" (function insert-signature)) ))) ;; MIME header の encoder を tiny-mime のものを使う。 (setq mime-translate-hook 'mime/encode-message-header) ;;; ;;; for GNUS ;;; (add-hook 'news-reply-mode-hook (function mime-mode)) (setq gnus-signature-file nil) ;;; ;;; for mh-e ;;; (add-hook 'mh-letter-mode-hook (function (lambda () (mime/decode-message-header) (mime-mode) (make-local-variable 'mail-header-separator) (setq mail-header-separator "--------")) )) ---------------------------------------------------------------------- ]]E ** 特定の field を encode したくない場合 特定の field を encode したくない場合、tiny-mime.el の変数 mime/no-encoding-header-fields によって、tiny-mime.el による encode を やめることができますが、mime.el が encode するのでは意味がありません。 そこで、次のように設定することで、mime.el でも encode しないようにでき ます。 [[E ---------------------------------------------------------------------- (if (boundp 'MULE) (progn (defun mime-header-charset-chooser-for-mule-no-encode-ISO-2022-JP (begin end) (let ((lclist (find-charset-region begin end))) (cond ((null lclist) nil) ;US-ASCII requres no encoding. ((memq lc-ltn1 lclist) '("ISO-8859-1" . "Q")) ((memq lc-ltn2 lclist) '("ISO-8859-2" . "Q")) ((memq lc-ltn3 lclist) '("ISO-8859-3" . "Q")) ((memq lc-ltn4 lclist) '("ISO-8859-4" . "Q")) ((memq lc-crl lclist) '("ISO-8859-5" . "Q")) ;;((memq lc-arb lclist) ;; '("ISO-8859-6" . "Q")) ((memq lc-grk lclist) '("ISO-8859-7" . "Q")) ((memq lc-hbw lclist) '("ISO-8859-8" . "Q")) ((memq lc-ltn5 lclist) '("ISO-8859-9" . "Q")) ((memq lc-jp lclist) nil) (t ;Unknown charset. It must be Mule! '("ISO-2022-JP-2" . "B")) ))) (setq mime-header-charset-chooser 'mime-header-charset-chooser-for-mule-no-encode-ISO-2022-JP) ) (progn (defun mime-header-charset-chooser-for-nemacs-no-encode-ISO-2022-JP (begin end)) (setq mime-header-charset-chooser 'mime-header-charset-chooser-for-nemacs-no-encode-ISO-2022-JP) )) ---------------------------------------------------------------------- ]]E 要するに、ISO-2022-JP 文字列の encode を mime.el にさせなくする訳で す。 * charset の追加・変更 Mule では、関数 mime/set-charset-and-encoding で、charset の追加・変 更ができます。 関数: mime/set-charset-and-encoding lc cs charset encoding lc: charset に対応する leading-char を指定する。 cs: charset に対応する coding-system を指定する。1 octet 文字 集合で coding-system を作らない場合は、nil を指定する。 charset: MIME の charset. encoding: encode する際の encoding. 例: KS C5601-1987 を EUC-KR の B encoding するように設定する (mime/set-charset-and-encoding lc-kr *euc-kr* "EUC-KR" "B") 例: koi8-r を Q encoding するように設定する。 (mime/set-charset-and-encoding lc-prv11 nil "KOI8-R" "Q") [注意]現在のところ、private character の設定は難ありです。(^_^;