日本語キーボード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(¥)か選択することができます。
他の入力ソースでも\
したい話(Emacs限定)
"¥"キーで入力する文字を選択することができない入力ソースを用いる場合、上の方法は利用できません。しかし、Emacs利用時のみ対処したいというのであれば、Emacsの設定でも対処できます(GUIなEmacs限定)。
以下の設定で、"¥"キーを押すとbackslash(\)が入力されるようにすることができます:
(define-key global-map [?¥] nil) (define-key local-function-key-map [?¥] [?\\])
EmacsでC-\
したい話
"¥"キーで入力する文字がbackslash(\)になっても、まだ問題があります。EmacsではデフォルトでC-\
のようなキーバインドが存在します。しかし、上の設定(Kotoeriの設定 or Emacsの設定)だけでは、Controlキーを押しながら"¥"キーを押してもC-\
を押したことにはなりません(C-¥ is undefinedと言われる)。
どうもKotoeriでの「"¥"キーで入力する文字」の設定は、「Dvorak配列への変更などのような論理配列を変えるもの」ではなく、「インプットメソッドのレベルで¥を\に変換するもの」のようです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でもっと柔軟に設定できてほしいですね...