PuTTY で ISO 2022 による日本語入力・表示を可能にするパッチ

概要

PuTTY は、Simon Tatham 氏によって作成された、フリーの Win32 用 Telnet/SSH クライアントです。PuTTY は ISO 2022 に対応していないので、対応させるためにこのパッチを作りました。

生成方法

Cygwin を使う場合

  1. Cygwin を起動します。
  2. 適当な作業ディレクトリを作ります。
    $ mkdir /tmp/putty ; cd /tmp/putty
    
  3. オリジナルの PuTTY のソースファイルを展開します。
    $ unzip ~/putty-src.zip
    

    ~/ には putty-src.zip のあるディレクトリの POSIX パス名を指定します。

  4. puttykj.patch をあてます。
    $ patch -Np1 < ~/puttykj.patch
    

    ~/ には puttykj.patch のあるディレクトリの POSIX パス名を指定します。

  5. 必要に応じて、puttyjp.patch をあてます。このパッチをあてると、デフォルト設定が、EUC-JP を使う日本語環境向けになります。また、ダイアログボックスとメニューの一部を日本語にするためのファイルが作成されます。
    $ patch -Np1 < ~/puttyjp.patch
    

    ~/ には puttyjp.patch のあるディレクトリの POSIX パス名を指定します。

  6. proxy.c がうまく動くようにするため、次のパッチをあててください。
    --- putty.orig/misc.c	2002-09-21 16:52:21.000000000 +0000
    +++ putty/misc.c	2002-10-08 11:10:26.000000000 +0000
    @@ -476,6 +476,9 @@
     		   MB_SYSTEMMODAL | MB_ICONERROR | MB_OK);
     	cleanup_exit(1);
         }
    +#ifndef MINEFIELD
    +    else memset (p, 0, size);
    +#endif
     #ifdef MALLOC_LOG
         if (fp)
     	fprintf(fp, "malloc(%d) returns %p\n", size, p);
  7. makefile.cyg を使って make を実行します。
    $ make -f makefile.cyg
    

    いくつかのファイルのコンパイル時に警告が出ますが無視して構いません。

Cygwin を使わない場合

  1. ファイルを展開し、Cygwin の場合と同様にパッチをあてます。Unix の patch コマンドに相当するプログラムを持っていない場合は、web で検索すると見つかりますので、そちらをダウンロードして使ってください。
  2. もとのドキュメントに従って生成します。このとき、iso2022.c および l10n.c もコンパイルし一緒にリンクするようにしてください。

設定項目

Font
日本語を表示できるフォントを選んでください。
Translation
コンボボックス Received data assumed to be in which character set で、エンコーディング法を選択してください。従来のパッチの Initialisation code を指定する場合は、"iso2022 " という文字列に続けて指定してください。入力に間違いがある場合は、Tab を押すなどしてフォーカスが変わったときに、表示が変化します。
マイクロソフト漢字コード (Windows のコードページ 932) を使うには
マイクロソフト漢字コードは ISO 2022 準拠ではありませんが、需要があるようなので対応しました。
Initialisation code の例 (これらの設定を使用する場合は、Received data assumed to be in which character set に、"iso2022 " に続けて入力してください)

ASCII のかわりに JIS X 0201 ローマ字を使う場合、上のコードの 1b2842 を 1b284a に置換してください。

文字化けについて

文字化けが発生し戻らないようであれば、メニューの Reset Terminal を選択してください。また、日本語 EUC で使っているとき、Unix の一部のコマンドを使うと、G1 に他の図形文字集合が指示されてしまいその後の日本語 EUC がすべて化けてしまうことがあります。

多くの場合この原因は terminfo の enacs、rmacs、smacs 項目 (または termcap の eA、ae、as) にあります。これは環境変数 TERM に kterm を指定して回避できる場合がありますが、PuTTY や xterm は kterm が対応している status line に対応していないため、別の問題が発生することがあります。enacs の \E)0 を消し、smacs の ^N を消して \E(0、rmacs の ^O を消して \E(B を指定すると正しく動作するようになります。

文字化けが発生しないようにするもう一つの方法

Initialisation code の先頭に lockgr という文字列を入れて、lockgr euc-jp のように指定すると、文字化けを回避できることがあります。面倒なことをせずにとりあえず使いたい場合に便利ですが、ISO 2022 非準拠となるため推奨しません。

Received data assumed to be in which character set で EUC-JP または MS_Kanji を選択した場合、この文字化け回避機能が有効になっています。無効にしたい場合は、"iso2022 EUC-JP" のように指定してください。

問題点

連絡先

本パッチをあてた PuTTY についての連絡は hdk@SoftHome.net までお願いします。本パッチをあてた PuTTY に関する質問・バグ報告等は、オリジナルの作者である Simon Tatham 氏へはしないようにしてください。

謝辞

JIS 漢字コード (JIS X 0208 および JIS X 0212) と UCS の対応表として Tomokazu Matsuo さんの UNIJ_DB を使用させていただきました。

JIS X 0213 と UCS の対応表として earthian さんの JIS X 0213:2000 関連データ jisx0213code-csv.txt を使用させていただきました。

Hideki EIRAKU