注意;この記事は古いバージョンのKarabiner-Elementsについての説明となっているので、より新しい2025年版を参照のこと。
MacのKarabiner-Elementsでwindows-likeとemacs-likeの2つのキーバインドを使い分けるにはどうするのかに関するメモ。
やりたいこと:普段のWEBブラウザ等ではwindows-likeなキーバインド(Ctrl-c,Ctrl-vでコピーペーストCtrl-fで検索)を使い、terminalやEmacsではそのキーバインドをやめたい(Ctrl-w,Ctrl-yでコピーペースト、Ctrl-sで検索)。
手順1: Karabiner-Elementsをインストールする
Karabiner-Elementsをインストールする。
https://karabiner-elements.pqrs.org/
上記のURLからダウンロードしてくる。
手順2: Karabiner-Elementsの使い方を理解する
まず、Karabiner-Elementsを起動してComplex modificationsタブを選択する。
次にAdd ruleボタンを押したのちImport more rules form the Internet(open a web browser)ボタンを押すとキーバインドのサンプル集が見つかる。この中から目的のものをImportする。今回は Windows shortcuts on macOSを選択。
これでルール集を取り込めるが、まだそのルール集の中のどのルールを実際に使うのかを決めていない。実際に使うルールをEnableする。例えばCtrl+C, Ctrl+P, Ctrl+X => Cmd+C (Copy), Cmd+v (Paste), Cmd+X (Cut)をEnableにするとその瞬間からばCtrl+CがCmd+Cに変換されて、ブラウザ等のテキストがコピーできるようになる。まずはそこまで確認すること。
そして、この設定でEmacsを開いて編集しようとするとおかしなことになることに気づくはず。例えばCtrl-x Ctrl-fでファイルを開こうとすると最初のCtrl-xがCmd-xに変換されてしまうのでうまく開けなくなる。
手順3: アプリケーションごとにキーバインドを変えるためルールを編集する
先ほども開いたキーバインドのサンプル集のページにいく。
https://ke-complex-modifications.pqrs.org/
今回はWindows shortcuts on macOSのImportでEdit JSONを選択する。
ここでタブを開いて見ていくと、Rule Conditions, Frontmost application unlessという項が見つかる。これはこのキーバインドのルールを適用しないアプリケーション一覧が書かれている。ここにEmacs等を加えれば良い。実は^com.apple.Terminal$という項目がすでにありterminalはこのキーバインドから除外されていることがわかる。このようにアプリケーションの名前はアプリケーションのBundle Identifierを調べてその名前を書く必要がある。
アプリケーションのBundle Identifierを調べるには、Karabiner-Elementsをインストールしたときに同時にインストールされるKarabiner-EventViewerを使用する。このアプリケーションを起動し、Frontmost applicationタブを選べばクリックしたアプリケーションのBundle Identifierを教えてくれる。Emacsはorg.gnu.Emacsであり、Xquartzは org.xquartz.X11である(前のヴァージョンではorg.macosforge.xquartz.X11)。
これを先ほどのWindows shortcuts on macOSの編集ページでBundle Identifierに加えれば良い。他の例を真似て以下のように書く。
^org\.gnu\.Emacs$ ^org\.xquartz\.X11$
なかなかの手作業だが、使用するキーバインドの全てでこのBundle Identifierを追加する。最初の項Ctrl+C, Ctrl+P, Ctrl+X => Cmd+C (Copy), Cmd+v (Paste), Cmd+X (Cut)のように複数のキーバインドがまとめて書かれている場合にはキーバインドごとにBundle Identifierを追加する必要がある。この場合は3箇所に書く。
一通り編集が終わったら、あとで間違いがあったとき直せるようにSHARE!ボタンを押し、URLを保存しておく。
手順4: 編集したルールを適用する
最後にINSTALL!を押して Karabiner-Elementsに登録し、実際にルールをEnableすれば完了である。具体的なやり方は手順2を参照のこと。何回もやっている場合は前のルールを消すのを忘れないこと。つまりComplex modifications
からRemove
しておく。
TIPS C-gが効かない
上記の設定で,命令を中断するC-gがうまく効かないことがある。
その場合にはC-]かEsc-Esc-Escを使うと良い(the emacs edigor)。