つうさにメモブログ

つうさにがメモをブログとして書いていくところ

日本語キーボードMacBookでEmacsのC-\する

C-¥ is undefinedの対策。

【お断り】

yen(¥)に関する話なので、MSゴシックのようなbackslash(\)がyen(¥)のように表示されるフォントを使うブラウザで見ると、この記事が非常に読み辛くなります。

MacBookのキーボード

MacBookは、キーボードの言語(物理的な配列)を購入時に選択できます。多くの日本人は日本語(JIS)のものを利用していると思われます。

このMacBookの日本語(JIS)キーボードは、多くのWindows用JIS配列キーボードと同じように、右上にあるdelete(backspace)キーの左隣に¥が印字されたキー(以下"¥"キー)が配置されています。

しかし、Windowsとは決定的に違う点として、フツーの日本語設定をしたMacBookでは"¥"キーを押すと、文字通りyen(¥;U+00A5)が入力されるのです。対照的にフツーの日本語設定をしたWindowsマシンでは"¥"キーを押すと、backslash(\;U+005C)が入力されます。

これは歴史的な経緯があるので仕方ないことですが、このようなMacBookを使う上で問題になるのが、backslash(\)を(簡単には)入力できないという問題です。プログラマはbackslash(\)を使う機会が多いのでこれを簡単に入力したいのですが、日本語(JIS)キーボードのMacBookでは"\"キーは存在しません。よって、optionキー+"¥"キーでbackslash(\)を入力する必要があるのですが、これは手間です。

幸いにもフツーの日本語入力方式であるKotoeriでは、システム環境設定から"¥"キーで入力する文字をbackslash(\)かyen(¥)か選択することができます。

他のIMで\の話(on Emacs)

"¥"キーで入力する文字を選べる設定を持たないIM(インプットメソッド)を用いている場合は、上の方法は利用できません。しかし、Emacs利用時のみ対処したいというのなら、Emacsの設定でも対処できます(GUIEmacsのみ)。

以下のような設定にすると、"¥"キーを押すとbackslash(\)が入力されます。

(define-key global-map [?¥] nil)
(define-key local-function-key-map [?¥] [?\\])

EmacsC-\の話

"¥"キーで入力する文字がbackslash(\)になっても、まだ問題があります。EmacsではデフォルトでC-\のようなキーバインドが存在します。しかし、上の設定(Kotoeriの設定 or Emacsの設定)だけでは、Controlキーを押しながら"¥"キーを押してもC-\を押したことにはなりません(C-¥ is undefinedと言われる)。

どうもKotoeriでの「"¥"キーで入力する文字」の設定は、「Dvorak配列への変更などのような論理配列を変えるもの」ではなく、「IMのレベルで¥を\に変換するもの」のようです1

これに対処するには以下のように設定する必要があります。

(define-key local-function-key-map [?\C-¥] [?\C-\\])
(define-key local-function-key-map [?\M-¥] [?\M-\\])
(define-key local-function-key-map [?\C-\M-¥] [?\C-\M-\\])

これで、C-¥でもともとC-\にバインドされているtoggle-input-methodが呼ばれます😄

終わり

こんなことで悩むのはEmacsぐらいだと思います。

"¥"キーについてmacOSでもっと柔軟に設定できてほしいですね...

参考


  1. 例えば、環境設定でキーボードをDvorak配列にしてEmacsを用いると、Controlキー+Dが印字されたキーC-eの役割を果たします(DvorakではQWERTYのdの位置にeがあるため)。Kotoeriの「"¥"キーで入力する文字」をbackslash(\)に設定したらControlキー+“¥"キーC-\となってほしいのですが、そうはなりません。