MH-6.8-JP-Patch.2 (93/02/14) [1] はじめに このパッチは MH-6.8 patch.0 Japanization.1 を Japanization.2 にするパッ チです。Japanization.1 のパッチは、fj.sources に Newsgroups: fj.sources,fj.mail From: takada@seraph.NTT.JP (Toshihiro Takada) Subject: UNIFIED unofficial Japanization Patch for MH-6.8 (JP1) Message-ID: Date: 22 Dec 1992 01:20:43 GMT として流れています。本パッチでの主な変更点は、 ・mh-format, mhl の完全日本語対応 ・7bit JIS に加えて日本語 EUC, Shift JIS 漢字コードのサポート ・ファイル、画面、プロセス出力毎に漢字コードを設定が可能 ・MIME 形式(RFC-1341)における charset="ISO-2022-JP" のサポート ・多言語ヘッダ(RFC-1342)の一部サポート です。 [2] インストールの方法 まず MH-6.8.JP1 の top directory で、本パッチをあてて下さい。 % patch -p < mh-6.8-JP-patch.2 次に configuration file (例えば conf/MH) に options JAPAN を追加した上で、コンフィグレーションからやり直して下さい("options JAPAN" が指定されていなければ、オリジナルの MH と同じになるはずです)。 % cd conf % 「configuration file (例えば MH) に "options JAPAN" を追加」 % make % ./mhconfig MH % cd .. % make clean % make make が成功したら、インストールして下さい。 # make install [3] 本パッチによる変更点 変更点は以下の通りです。 [3.1] バージョン MH のバージョンが "MH 6.8.JP1" から "MH 6.8.JP2" に変更されます。 [3.2] mh-format mh-format が日本語対応になります。これにより inc, scan, repl 等で日本語 が正しく処理されます。 [3.2] mhl mhl が日本語対応になります。今までは mhl が日本語対応されていなかったた めに、折り返しによる文字化けなどが生じていましたが、本パッチによりこれら は正しく処理されます。 例えば repl コマンド用の filter の mhl form の中で、width=255 などと指定 している人も多いかと思いますが、この必要はもうありません。 [3.3] 漢字コード MH-6.8.JP1 でサポートされていた 7bit JIS コード(以下 "JIS7" と略)に加え て、日本語 EUC コード(以下 "JEUC" と略) と Shift JIS コード(以下 "SJIS" と略)も使用可能になりました。 またこれらの漢字コードを、ファイル入出力、プロセス出力、画面出力、毎に設 定することが可能になりました。その設定方法を以下に示します。 それぞれの漢字コードは、 ファイル入出力: 環境変数 MH_FILE_CODING .mh_profileコンポーネント file-coding 環境変数 LC_CTYPE 環境変数 LANG 画面出力: 環境変数 MH_DISPLAY_CODING .mh_profileコンポーネント display-coding 環境変数 LC_CTYPE 環境変数 LANG プロセス出力: 環境変数 MH_PROCESS_CODING .mh_profileコンポーネント process-coding 環境変数 LC_CTYPE 環境変数 LANG に与えられる値によって決定されます。いずれも上に書かれているものの値が優 先されます。 ここに指定できる値とその意味は以下の通りです。 JIS7: C, japanese, ja_JP.jis7, ja_JP.jis8, ja_JP.pjis, ja_JP.jis, wr_WR.ct, wr_WR.junet JEUC: ja_JP.ujis, ja_JP.euc SJIS: ja_JP.sjis, ja_JP.mscode (注: これらは一見 locale の値を使っていますが、OS の LOCALE は全 く使用していません。) ここに挙げた以外のものを漢字コードとして指定した場合、また、デフォールト では JIS7 となります。 ファイル入出力用の漢字コードが JEUC の場合は、ファイルを読み込むときに限 り JEUC に加えて JIS7 も正しく認識します。ファイル入出力用の漢字コードが SJIS の場合は、ファイルを読み込むとき際に限り SJIS に加えて JIS7 も正し く認識します。 いずれの漢字コードを選択した場合も、半角仮名文字(JIS-X-0201 right half) は取り扱えません。また Mule-ML などで使われている多言語メールは正しく取 り扱えない(表示の乱れ等が出る)と思われます。 *** 注意 *** inc と post (send) に関しては、上記の漢字コード変換の機能は *無効* で すので注意して下さい。 すなわち inc の際はファイル入出力の漢字コードが何に設定してあるかにかか わらず、/usr/spool/mail/$USER に収められている、あるいは popd 等が返すの と同じ漢字コードで folder 内にセーブされます。また post (send) の際には、 メッセージのボディ部は draft ファイルの漢字コードのまま sendmail, smtp, popd などに送られます(ヘッダ部に関しては[3.6]を参照)。 従って従来 sendmail の Mlocal や send が起動する postproc などにより漢字 コードの変換を行っていた方は、今まで通りの方法で漢字コード変換を運用する 必要があるので注意して下さい。 [3.5] MIME 形式(RFC-1341)における charset="ISO-2022-JP" のサポート mhn を用いて MIME 形式のメッセージを作成する際(*)の charset のデフォール トが "us-ascii" から "iso-2022-jp" に変更されます。但し実際には、指定さ れた charset によって MH の動作は特に変化しません。 (*) comp あるいは repl の際に、"What now?" の状態で "send" とする前に、 "edit mhn" と入力する。あるいはこれを自動的に行うには、.mh_profile の中に "automhnproc: mhn" を入れておく。詳しくは man mhn を参照して 下さい。 [3.6] 多言語ヘッダ(RFC-1342) RFC-1342 で規定された多言語ヘッダの一部を使用することができます。サポー トされているのは、charset="ISO-2022-JP" の "B"-encoding のみです。残念な がら charset="ISO-8859-X" や "Q"-encoding は使用できません。 多言語ヘッダに関しては、メッセージ送信時の自動変換と mh-format を用いた 変換の2通りのインタフェースが用意されています。以下それらを順に説明しま す。 [3.6.1] メッセージ送信時の自動変換 post (および spost)に以下のオプションが追加されます。 -hencode -nohencode オプションとして -hencode が指定された場合は、メッセージのヘッダ部に含ま れる日本語が自動的に RFC-1342 形式 (charset="ISO-2022-JP", "B"-encoding) に変換されて送信されます。-nohencode が指定された場合は、ヘッダ部の日本 語は変換されずにそのまま送信されます。いずれの場合もメッセージのボディ部 は影響を受けません。デフォールトは -nohencode です。 また -hencode が指定された場合は、.mh_profile の signature: コンポーネン ト(UCI option を指定してコンフィグレーションされた MH の際は更に $HOME/.signature ファイルの中身も)に書かれたユーザ署名に含まれている日本 語の部分も、自動的に RFC-1342 形式に変換されます。 しかし、通常はユーザが直接 post (あるいは spost) にオプションを指定する ことはできませんので、実際には send コマンドの実行時にこれらのオプション (-[no]hencode)を指定して下さい。常に多言語ヘッダを使用する場合は、 .mh_profile に send: -hencode の1行を加えておけば良いと思います。また whom コマンドもアドレスの解釈の ために post を呼び出しますので、.mh_profile に whom: -hencode を入れておいた方が良いでしょう。 postproc に post (あるいは spost)以外のプログラムを指定し、そこから更に post (あるいは spost)を呼び出している場合は、send で指定されたオプション (-[no]hencode)を正しく post (あるいは spost)に渡すように注意して下さい。 [3.6.2] mh-format による方法 RFC-1342 形式の多言語ヘッダの解読のために、以下の2つの mh-format 関数が 新たに追加されています。 Function Argument Return Description hencode expr string 日本語文字列を RFC-1342 形式に変換 hdecode expr string RFC-1342 形式を日本語文字列に変換 これらの関数はいずれもトップレベルにある時は implicit putstr として取り 扱われます。 hdecode 関数は RFC-1342 形式にエンコードされた文字列を通常の日本語文字列 に戻す唯一の手段となります。取り敢えず例として私の scancomps を以下に示 します。 %5(msg)%<(cur)+%| %>\ %<{replied}-%?{encrypted}E%?{content-type}M%| >\ %02(mon{date})/%02(mday{date})\ [%02(hour{date}):%02(min{date})%3(tzone{date})]\ %<{date} %|*%>\ %15(hdecode(friendly{from}))\ \ %(hdecode{subject})【%<{body}%{body}%|%> hdecode 関数を "%15(hdecode(friendly{from}))" や "%(hdecode{subject})" のように使用することによって、RFC-1432 形式にエンコードされた文字列を日 本語に変換して表示することが可能になります。 また多言語ヘッダを含むメッセージにリプライすることを考えると、例えば以下 のように replcomps を設定しておくと便利でしょう(ただしこの場合は send に -hencode オプションを付けることをお忘れなく)。 %(lit)\ %(formataddr(hdecode %<{reply-to}%?{from}%?{sender}%?{return-path}%>))\ %<(nonnull)%(void(width))%(putaddr To: )\n%>\ %(lit)%(formataddr(hdecode{to}))%(formataddr(hdecode{cc}))\ %<(nonnull)%(void(width))%(putaddr Cc: )\n%>\ %<{subject}Subject: Re: %(putstr(hdecode{subject}))\n%>\ %<{date}In-reply-to: Your message of "\ %<(nodate{date})%{date}%|%(pretty{date})%>"\n%>\ %<{message-id}\ References: %<{references} %{references}%> %{message-id}\n%>\ -------- 更に mhl からは formatfield 指定を用いて mh-format の format string を呼 び出すことができます。これにより mhl からも hdecode/hencode 関数を使用す ることができます。例えば showproc として mhl を使用し、"mhl.format" を以 下のように設定することによって、多言語ヘッダを含むメッセージを表示するこ とができます。 width=80,overflowtext=" ",overflowoffset=0 ignores=msgid,message-id,received,content-transfer-encoding,content-id ignores=content-type,return-path,in-reply-to,references,mime-version ignores=errors-to,sender,reply-to,apparently-to,x-reply-to Date:formatfield="%<(nodate{text})%{text}%|%(pretty{text})%>" To:formatfield="%(hdecode{text})" Cc:formatfield="%(hdecode{text})" From:formatfield="%(hdecode{text})" Subject:formatfield="%(hdecode{text})" extras:nocomponent,formatfield="%(hdecode{text})" : body:nocomponent,overflowtext="",overflowoffset=0 mhl でヘッダ部が書き換えられることが嫌いな方は、(例えば "mhl.noconv" と いうファイルで)次のような mh-format を定義し、これを使えばよいでしょう。 overflowtext="",overflowoffset=0 extras:nocomponent,formatfield="%(hdecode{text})" : body:nocomponent,overflowtext="",overflowoffset=0 また mh-e ユーザの方も ".emacs" ファイル中で、 (setq mhl-formfile "mhl.format") や (setq mhl-formfile "mhl.noconv") と設定することにより、多言語ヘッダが使用されたメッセージを日本語に変換し て読むことが可能になります。 この方法はオーバーヘッドが大きそうですが、ま、一応使えるレベル、というこ とで御了承下さい。 [3.6.3] おまけ mhl と上で定義した "mhl.noconv" を使って、例えば、 alias mmore '/mhl -form <あなたのMH dir>/mhl.noconv \!*' などと定義すると、多言語ヘッダを展開してくれる PAGER の代わりにもなりま す。便利便利。V(^o^) [3.7] タイムゾーン timezone "JST" を正しく認識します。また mh-format の tzone 関数や pretty 関数が "JST" を返すようになります。 "options ATZ" を入れて MH のコンフィグレーションした場合は、送られるメッ セージの Date: フィールドも "JST" を使うようになります。しかしオリジナル の READ-ME に > ATZ > Directs MH to use alpha-timezones whenever possible. > You should not use this option if you are on the Inter- > net, since it will make your host non-compliant with > RFC-1123 (Requirements for Internet Hosts). とあるように、これは RFC-1123 の規定を満たさないことになりますので、くれ ぐれも *at your own risk* で行って下さい。 RFC-1123 には > There is a strong trend towards the use of numeric timezone > indicators, and implementations SHOULD use numeric timezones > instead of timezone names. However, all implementations MUST > accept either notation. If timezone names are used, they MUST > be exactly as defined in RFC-822. とあるため、"options ATZ" が指定されているいないにかかわらず、"JST" は "+0900" の意味であると理解します。 おすすめできる使い方は、"options ATZ" を指定せずに、送出されるメッセージ のヘッダでは "+0900" を用い、ユーザへのインタフェースに関しては scan や mhl に tzone や pretty を使った mh-format を与えることによって "JST" を 表示させる、というのが良いと思います。 [4] その他 ・MH-6.8 から locale がサポートされていますが、本パッチでは locale は使 用していません。漢字コードの変換などは全て自前でやっています。 ・次なる野望は多言語対応ですが、これはしばらく先になりそうな気が... そ もそも、自宅からモデムの夜遊びプログラミングじゃ多言語の実験ができない。 [5] さいごに 本パッチの作成の過程では、児島宏明@電総研さん(hkojima@etl.go.jp)による MH-6.6 用の日本語パッチ、てつ@京大情報さん(tetsu@kuis.kyoto-u.ac.jp)に よる MH-6.7 用の日本語パッチを、大いに参考にさせて頂きました。今まで長い 間お二人のパッチを大変便利に使わさせて頂いたこと、そしてこれらのパッチの 改造・再配布を承諾して頂いたことを、深く感謝致します(_o_)。 また前回の MH-6.8.JP1 を一緒に作り、今回も協力して下さった、はやし "∞" はるひさ@京大分子さん(hayashi@kuic.kyoto-u.ac.jp)、そして MH-6.8.JP に 関するパッチレポートや助言を頂いた以下の方々(sort | uniq 順)にも感謝致し ます。 "S. UEHARA" Akihiko Kuroe Ken-ichi Sakaeda Ryu Inada Shigeya Suzuki Shin'ichi KONOMI Shingo Fujimoto Shinji Kono d90148@chubu.ac.jp (Murayama Fumitaka) murakami@msr.mei.co.jp shimada@denken.or.jp (Takehiro Shimada) 本パッチは御自由に再配布して頂いて構いません。但しあくまでも at your own risk での使用ということで、お願いします。 本パッチに関するバグ/コメント/改良案などがありましたら、 mh-68-jp@seraph.ntt.jp まで御連絡下さい。問題{回避||解決}の努力を一緒にしましょう(^^;;)。 # ついでに協力して下さる方、募集中! mh-68-jp-request@seraph.ntt.jp へ # メールを下さい。引きずりこんでさし上げます(^^;;)。 またバグレポートの際は、MH の configuration と mtstailor の情報を一緒に 付けて頂けると大変助かります。よろしくお願いします。 という訳で、それでは。 ======================================================================== NTT基礎研究所 情報科学研究部 高田敏弘 分散コンピューティング原理研究グループ takada@nttlab.ntt.JP ========================================================================