Emacs における矢印や記号文字の取扱い
Emacs 22.3.1 を使って日本語の “→”(漢字の矢印文字)や “※”(こめ印)などを含む文書やプログラムコードを編集しようとすると、表示やカーソル移動の挙動がおかしくなる。これらの文字はいわゆる機種依存文字ではないはずだし、Meadow や日本語対応を明示している版だと問題なかったはずなので、素の Emacs 特有の問題だろうと推測したものの、対策することなくそのままにしていた。しかし、最近またコメント中に “→” を書いてあるコードを触ることになり、この不具合に出くわしたので調べてみたところ、次のところで回答を見つけることができた。
http://www.pqrs.org/tekezo/emacs/doc/wide-character/index.html
このサイトの情報によれば「UTF-8 において文字幅が文脈依存(ambiguous)となる文字」に対して、emacs はデフォルトで narrow character として判定するのに、表示される文字は wide character なので不具合が起こるようだ。確かにこの説明を読むとカーソル移動の挙動が納得できる。同様の現象は emacs だけでなく vi などでも発生するということだったので、vi で確認したところ確かに同じ状況となっていた。
前述のサイトに該当文字群を wide character として認識させるための emacs 用スクリプトが掲載されていたので、これを .emacs に追加することで一応は不具合を解消することができた。しかし、この設定だといわゆるローマ数字など、不具合の出る文字がまだあることに気付いた。また、機種依存文字と思っていた丸囲み数字なども unicode では定義されているので、これらの文字のコード範囲と思われるものをスクリプトに追加してみたが、なぜかうまくいくところとそうでないところがあった。結局ローマ数字の範囲だけを追加するにとどまった。通常の作業にはこれでおおよそ対応できるはずだ。
(utf-translate-cjk-set-unicode-range
‘((#x00a2 . #x00a3) ; ¢, £
(#x00a7 . #x00a8) ; §, ¨
(#x00ac . #x00ac) ; ¬
(#x00b0 . #x00b1) ; °, ±
(#x00b4 . #x00b4) ; ´
(#x00b6 . #x00b6) ; ¶
(#x00d7 . #x00d7) ; ×
(#X00f7 . #x00f7) ; ÷
(#x0370 . #x03ff) ; Greek and Coptic
(#x0400 . #x04FF) ; Cyrillic
(#x2000 . #x206F) ; General Punctuation
(#x2100 . #x214F) ; Letterlike Symbols
(#x2190 . #x21FF) ; Arrows
(#x2200 . #x22FF) ; Mathematical Operators
(#x2300 . #x23FF) ; Miscellaneous Technical
(#x2500 . #x257F) ; Box Drawing
(#x25A0 . #x25FF) ; Geometric Shapes
(#x2600 . #x26FF) ; Miscellaneous Symbols
(#x2e80 . #xd7a3)
(#xff00 . #xffef)(#x2160 . #217f)))
補足(2009-07-31 追記):
Emacs のバージョン 23.1.1 からは前記の設定をしなくても、問題は発生しなくなっている。逆にこの設定のままだと 23.1.1 では起動時にワーニングが出るので、utr-translate-cjk-set-unicolde-range の設定は解除したほうが良い。→「Emacs における矢印や記号文字の取扱い ? その後」
[…] 。さっそく起動してみたら .emacs の設定ワーニングが出る。以前に書いた「Emacs における矢印や記号文字の取扱い」で追加した utf-translate-cjk-set-unicode-range の記述が原因のようなので、とり […]
リンク先のページを参考に、puttyの「ウインドウ/変換/CJK用の文字幅を使用する」にチェックを入れたところ、正しく表示することができました。
私の場合、linuxの操作はputtyがメインですのでこれで十分です。
とても参考になり感謝しております。