Emacs with JIS Keyboard


[2006/7/29]

自分では JIS キーボードを使わないようにしているので、 全然気が付いていませんでしたが、 ちょっと前に Emacs で JIS キーボードの円記号キーを押したときの振る舞いが変わったらしく、 以前はバックスラッシュが入力されていたそうなのですが、 今は円記号が入力されます。 元ネタは このあたり
USE_MAC_TSM 関係の変更に伴うものと推測しています。
現在の Emacs の振る舞いは Xcode のエディタや Apple Mail のエディタと同じなので、 修正されるべきとは思っていません。 (当事者ではないので、今後振る舞いが以前のそれに戻ったとしても、異論はありません。)
もし不便であれば、Emacs だけの問題ではないはずなので、 Ukelele (など) 使ってキーボードのレイアウトを変更するのが適切な対応方法と考えます。 Ukelele でなくても、Mac OS X 10.4 以降で、 Input Method にことえりだけ使っていれば (U.S. などの Roman 入力を使っていなければ)、 ことえりの環境設定で円記号キーをバックスラッシュキーとみなす設定が可能です。
でもまあ Emacs でだけどうにかするとしたら、 という主旨で前記 ML にメイルを投げたのですが、 このような場合は function-key-map を使うよりも、 key-translation-map を使うのが適切なようです。
あと、ちゃんと理解できてなかった、そして今も良く判らない部分ですが、 手元の Apple Pro Keyboard (JIS) と、 Mac OS X 10.4.7 / iMac G5 と、 2006-07-27 版の Emacs/Carbon と を使って円記号キーを押したときのイベントは次のようになっています。
(format "0x%x" (aref (read-key-sequence "") 0)) を実行して、 キーを押した結果です。
なお、このマシンには Apple Pro Keyboard (JIS) 以外に ASCII キーボードも接続していますし、デフォルトの言語は U.S. English です。 また、Emacs は Mac OS X 10.3.9 でコンパイルしたバイナリです。 異なる環境では結果も異なるかも知れません。
入力キー Input Method
U.S. U.S. Extended ことえり(Romaji)
円記号 0x8a5 0x8a5 0xd5c
C-円記号 0x40008a5 0x1c 0x40008a5
M-円記号 0x80008a5 0xdc 0x80008a5
C-M-円記号 0xc0008a5 0x9c 0xc0008a5
Emacs での 0x8a5 は latin-iso8859-1 の円記号で、0xd5c は latin-jisx0201 の 円記号です。 0x4000d5c, 0x8000d5c そして 0xc000d5c はイベントとして入力されないように見えます。
一貫性が無い気がしますが、 Emacs 内部で何か変なことをしている可能性よりも、 Apple のコードで (歴史的経緯により?) 何か変なことしている可能性の方が高そうです。
というわけで、key-translation-map を使って円記号をバックスラッシュに置き換えるには、
(define-key key-translation-map [?\x8a5] [?\\])
(define-key key-translation-map [?\xd5c] [?\\])
(define-key key-translation-map [?\x40008a5] [?\C-\\])
(define-key key-translation-map [?\x80008a5] [?\M-\\])
(define-key key-translation-map [?\xc0008a5] [?\C-\M-\\])
というところかなと思います。
なお上の設定がなされていても、C-q 円記号 によって円記号を入力することはできます。

nand@mac.com     目次へ $Revision: 1.7 $ $Date: 2006/07/29 18:23:15 $