| 訳注:これは,Otfried Cheong氏の開発したoc-unicode-0.72.2パッケージのREADME.TXT(2000年3月15日付け)を私(岸 和孝)が訳したものです。 |
GNU Emacsは,バージョン20以降,多言語文字集合をサポートしています。それは,日本の電子技術総合研究所で作られた"Mule"(Multi-lingual Emacs)を合体したものです。 歴史的な理由から,Muleは独自の文字集合とエンコーディングを定義しています(Muleが設計された頃,Unicodeが存在していなかったからです)。 遅かれ早かれ,Emacsは内部的にUnicodeを使うことになるでしょう。 しかしその間に,我々は,外部的なUnicodeと,内部的なEmacs Muleエンコーディングとを変換するエンコーディングを定義する必要があります。
私(Otfried Cheong)は外部のCプログラムに基づく実現ができるようにしたものです。 興味があれば,それはemacs-utf-0.62.tar.gzでまだ利用できます。
しかし,現在,私は,GNU Emacsとよく融合する宮下尚氏のMule-UCSパッケージを用いています(特に,それはUTF-8でのメールの読み書きに便利です)。
このウェブページでは,Mule-UCSの拡張部分が完全なBasic Multilingual Plane(BMP)を取り扱っていることを説明します。 特に,このパッケージは,
Unicodeサポートは別々にインストールできます(Emacsを動かしているシステムの管理者である必要はありません)ので,Emacs自身を再コンパイルしたり変更したりする必要がないことに注目してください。

最初に,GNU Emacsバージョン 20.4以降(エンコーディングシステムのバグを修正したバージョン20.6を推奨)を必要とします。
次に,Unicodeフォント(より正確には,iso10646-1エンコーディングのフォント)を必要とします。 Markus Kuhn氏のUnicodeフォントページからucs-fonts.tar.gzをダウンロードすることを推奨します。 フォントをインストールし,利用できる次のフォントを持っていることを調べてください。
csz094[~].. xlsfonts | grep 10646 -misc-fixed-medium-r-normal--13-120-75-75-c-80-iso10646-1 -misc-fixed-medium-r-normal--14-130-75-75-c-70-iso10646-1 -misc-fixed-medium-r-normal--15-140-75-75-c-90-iso10646-1 -misc-fixed-medium-r-normal--18-120-100-100-c-90-iso10646-1 -misc-fixed-medium-r-normal--20-200-75-75-c-100-iso10646-1
CJK文字を使いたいのであれば,全角Unicodeフォントも必要とします。 ucs-fonts-asian.tar.gzからのフォントをインストールしてください。 そして利用できる次のフォントを持っていることを調べてください。
csz094[~].. xlsfonts | grep 10646 | grep -- -ja- -misc-fixed-medium-r-normal-ja-18-120-100-100-c-180-iso10646-1
パッケージoc-unicode-0.72.2.tar.gzをダウンロードし,それを解凍してください。 それに宮下尚氏のMule-UCSパッケージのコピー(オリジナルはMule-UCS)が含まれていることに注意してください。 最上位のディレクトリーで次の指示でパッケージをコンパイルしてください。
emacs -batch -l oc-comp.el
これは,"Mule-UCS-0.72"パッケージをバイトコンパイルします。 "Mule-UCS-0.72/lisp"サブディレクトリーから.elc拡張子を持つすべてのファイルをEmacs Lispパス上へコピーしてください。 それに加えて,Emacs Lispパス上へoc-unicode.el,oc-charsets.el,oc-tools.elをコピーしてください。
次の内容を.emacsファイルへ追加してください。
(require 'oc-unicode) (if (eq window-system 'x) (oc-create-fontset "-misc-fixed-medium-r-normal--18-*-*-*-*-*-fontset-standard" "-misc-fixed-medium-r-normal-ja-18-*-iso10646-*") (oc-create-fontset "-misc-fixed-medium-r-normal--13-*-*-*-*-*-fontset-standard" "-misc-fixed-medium-r-normal-ja-13-*-iso10646-*"))
Emacsを起動し,エンコーディングとしてutf-8を認識することをMuleメニューの"Describe Coding System"で調べてください。 これがうまくいかない場合は,たぶん多言語サポート(Mule)が可能になっていないからです。 コマンドラインオプションを--unibyte(たぶんシェルスクリプトを介して)としてEmacsを起動していないことと,環境変数EMACS_UNIBYTEが設定していないことを調べてください。 "(standard-display-european 1)"のようにMuleサポートを不能にすることについて.emacsファイルを調べてください(いずれにせよ現在用いられていません)。 Emacs infoシステムには,メニュー記載"International"にMuleに関する多くの情報があります。
ファイルUTF-8-demo.utf(Markus Kuhn氏によるサンプルファイル)をロードしてください。 拡張子.utfは,UTF-8エンコーディングを誘発します。 そして文字"u"がモード行の先頭に現われるのが見えます。 EmacsがUnicodeフォントをまだロードしないので,テキストはボックス文字で満たされます。 そこで,Muleメニューの"Set Font/Fontset"を用いて,フォントセット標準:18-dot mediumを選びます。 これで適切に表示されたすべての文字を見ることができます。
フォントやそのサイズを好まない場合は,異なるフォントセットを作り出す必要があります。 .emacsでoc-create-fontset関数だけを変更してください。 選び出す複数のフォントセットを作り出せます。
選んだフォントセットで十分であれば,Emacsが自動的にそれに切り換えるように,.emacsファイルを設定できます。
(if (eq window-system 'x) (set-frame-font (oc-create-fontset "-misc-fixed-medium-r-normal--18-*-*-*-*-*-fontset-standard" "-misc-fixed-medium-r-normal-ja-18-*-iso10646-*")) (oc-create-fontset "-misc-fixed-medium-r-normal--13-*-*-*-*-*-fontset-standard" "-misc-fixed-medium-r-normal-ja-13-*-iso10646-*"))
"M-x insert-ucs-character"を用いてそのUnicode数によって文字を挿入できます。 "M-x unicode-what"を用いてUnicode文字データベースからカーソル下の文字に関する情報を調べられます。 データベース(テキストファイル)をシステムにインストールすれば,次のようにファイル名を.emacsファイルに置いてください。
(setq unicode-data-path ".../UnicodeData-Latest.txt")
(この変数を設定しない場合,EmacsはUnicode FTPサーバーからファイルを取り寄せようとします。) これらのコマンドにキーの組合せ,例えば, C-c = と C-c i を次のようにバインドしたいと思うでしょう。
(global-set-key "\C-c=" 'unicode-what) (global-set-key "\C-ci" 'insert-ucs-character)
CJK言語に興味を持っている場合,Kanji.utfとHangul.utfをロードしてみてください。 それらは,Ideographicブロック全体(U+4e00からU+9fa6まで)と完全なHangulブロック全体(U+ac00からU+d7ffまで)を表示します。
この実現について理解するための重要な事実は,Mule「文字集合」が幾つかの国家文字集合の互いに共通元のない結合であるということです。 Unicodeの意味における多くの文字は,これらの文字集合の幾つかで文字に一致します。 例えば,Emacsが関係する限り,latin-1 charsetsとlatin-2 charsetsにおける"CAPITAL LETTER A WITH ACUTE"は異なる文字です。 ファイルをロードするために「utf-8」エンコーディングを用いる場合,一つの内部charsetが各Unicode文字について選ばれます。 C-u C-x = をタイプすることで,カーソル下の文字のcharsetを確認できます。
困難は,Emacsが応える(leimディレクトリー内の)入力方法が内部文字集合を区別することであって,最近追加されたUnicode集合(Unicode Eに対するUnicode A)で文字を決して作り出さないことです。文字は,スクリーン上に(たぶん異なるフォントで)「適切に」見えるでしょう。しかし捜索ストリングが異なる内部文字集合からのものであると探索は失敗するでしょう。
ファイルの保存( C-x C-s )と再ロード( C-x C-v )によって,ファイル内の文字をいつも「標準」Unicodeエンコーディングへ強制できます。 しかし,重大な効果のために,標準のUnicode表現を直接生成するために用いているスクリプトにおける入力方法を変えたいと思うでしょう。 それを達成するのは容易で,UTF-8エンコーディングに対する入力方法を定義しているファイルを変換するだけです。
ここに,それをどのように行なうか,latin-post.elにおける入力方法を述べます。
;; -*- coding: utf-8 -*-
もちろん,現存する入力方法は,新しいUnicodeレパートリーの小さい部分だけを取り扱っています。 どのようにGNU Emacsの入力方法を作り出すか知るために,Quail文書を参照してください。
このパッケージは,EmacsがMarkus Kuhn氏のwcwidth()の定義に従ってUTF-8対応のターミナルエミュレーターで適切に動けるように,半角と全角のUnicodeフォントの間で選ぶその定義を用いています。
二つの例外があります。 すなわち,全角と半角にユーザー定義済みの文字範囲を私は独断的に分割しなければなりませんでした。 利用できるスロットを最適に使うために,私はU+e000からU+efffの全角を作りました。
他方では,完全に結合しているJamo全角ではないが,何の意味もなしません。 私の実現において,それらはすべての半角です(もちろん,結合しているrendererに関しては,結合の結果は全角です)。
私は多様な文字集合を含んでいるUTF-8でエンコードされたファイルを編集する必要があって,他のエディターを得ることより,このコンバーターを組み立てるほうが容易であったので,このパッケージは存在します。
GNU Emacsがその内部文字集合としてUnicodeを用い,これをすべてサポートするように動いているので,私はこれ以上の作業をするつもりはありません。
(2001年6月記)