Emacs
Mac
IntelliJ
Keyboard

MacのIntelliJでMetaキーが使えない問題

More than 3 years have passed since last update.

IntelliJ最高! なのにEmacsキーバインドがうまく使えないよ、っていう問題について。
たぶんPHPStormでも同様の状態になると思っています(適当)。

これが
sigma1.png

こうなります
sigma2.png

1. Macでメタキー使えないよね

MacだとOptionキーをMetaキーとして使えないことがあります。
というかMac標準ではメタキーのキーコンビネーションで送られるキーシーケンスが、OSで解釈した後にアプリケーションへ送られるらしく、

「Emacsで範囲選択したあとにコピーはMeta-wだからOption-wで…」 => ∑
なんでこんなの出ちゃうの!まさにシグマだよ!とか

「Ctrl-vで次のページに行って前のページはMeta-vだから…」 => √
ああルートって記号あったんだ…。

「シェルで単語ごとに移動しよう。Metaーbだぜ!」=> ∫
懐かしいなー高校の時にあった積分記号インテグラル?

といった感じでOptionキーを絡めると特殊文字を出力してくれます。
PC-98時代のGRPHキーを思い出しますね。
(恐らく元々Mac OSではOptionキーというのはそういうものなのでしょうね。この辺りの歴史的経緯とか四方山話とか、懐かしいお話を知ってる人は教えてくださいませ。)

一部のアプリケーションではアプリケーション側で対応していて、Optionキーをちゃんとメタキーとして認識するための設定があったりします。

iTerm2にはオプションで+ESCを送れるようになります。
iterm2.png

そもそもOptionキーはMetaキー(◇)では無いので仕様と言えば仕様なんですけれどね。

2. 最近話題(?)のIntelliJ

自分の中で最近人気沸騰中なのがIntelliJです。IntelliJは標準でEmacsキーバインドが用意されてるし、バインドのカスタマイズも結構簡単にできちゃうので、「あっこのバインド足りないから足しておこう」って感じでMetaキー周りも充実させられます。
が、しかし、先ほどのOptionキーで変な記号が出ちゃうせいでMacでのIntelliJの魅力が半減しちゃいます。

いくつか解決策はあるらしいのですがStackOverFlowで紹介されてたやり方が簡単そうでした。
参考サイト

http://stackoverflow.com/questions/11876485/how-to-disable-typing-special-characters-when-pressing-option-key-in-mac-os-x

(他にukleleというキーマップ変更ツールを使ったやり方もありましたがここでは割愛します)

3. 手順

3.1 キーボードレイアウトファイルの作成

参考サイトのリンクが切れていたのでDropBoxへレイアウトファイルをアップしておきました。
コチラからダウンロード

下記の方法だとうまく行かなくなっていたのでukleleで作成しました。
上記Dropboxにアップロードしたファイルを使ってください。
ここにいきます
http://wordherd.com/keyboards/

基本的に何も設定しなくていいですが、上から二つ目のラジオボタン群で
"Yes, but leave the "option" keystrokes blank."
が選択されていることを確認してください。(ここ超重要)

3.2 レイアウトファイルを移動

ダウンロードしたレイアウトファイルを ~/Library/Keyboard Layouts/へ移動します。

shell> mv ~/Downloads/Emacs_beats_vi.keylayout ~/Library/Keyboard\ Layouts/

ターミナルからでもできますし、恐らくFinderからでも移動できます。

3.3 レイアウトファイルをシステムで有効化

システム環境設定 > キーボード > インプットソース
system_pref.png

から、右下の追加プラスマーク「+」を選択。
左側の一番下にある「その他」を選択、右に出てくる先ほどのレイアウトファイルを選択

layout.png

以上で完了です。簡単ですね。

4. その他

さりげなくviをディスってるのはプロレスのアングルみたいなものです。サーバの初期状態ではviを愛用しています。viかわいいよvi。

4.1 備忘録

OSの再インストールを行ったら消えてしまいました。これで三度目ぐらいなのですが毎度忘れててググるのが大変だったのでメモです。
結構多くの人が困ってると思うのですが、この件に関するキーワードが意外にも見つけにくいという…。
引っかかりにくいところをみると、例えばIntelliJにオプションがあったりする、もっとスマートな解決方法があるのかなぁ、とも。あったら教えてください。

4.2 確認

いつの頃からかMac OSにはキーボードビューワというものがあるそうです。(前からあったっけ?)
これを使うとどんなキーシーケンスを送っているか確認できます。
また今回の適用が正しく行われているか確認することができます。
Optionキーを押下した際にアルファベットキーが白くなっていれば成功です。

こっちは標準のキーボード
hoge.png

今回の適用でこうなるとオッケー
hoge2.png

4.3 USキーマップ消せないよ

日本人であれば英語キーマップ+日本語変換があれば十分なのに、今回のキーボードレイアウトを追加すると「今回のレイアウト」+「日本語」+「US」になっちゃってUSレイアウトが消せません。
切り替えする際に注意していないと「US」が選択されてURYYYYYYYってなるので注意が必要です。