IntelliJ IDEAを使っていて、バックスラッシュを入力したいのに円マークになって困っていた。また対応方法として、
あたりの記事も参考にしてみたが、これを有効にすると他のアプリケーションにまで波及してしまって、今度はEmacsでバックスラッシュが入力できなくなったりして困っていた*1。
そんな時Karabinar-Elementsは特定のアプリケーションを起動時だけキーマップを変えられるという機能があることを発見した。これを使って解決してみたのでメモ。
Karabinar-Elements用のComplex Modifications用のjsonファイルを作成する
Karabinar-ElementsのComplex Modificationsを設定するには、定義を書いたjsonファイルを作成し、~/.config/karabiner/assets/complex_modifications/以下に配置すると良い。どのようにjsonファイルを書くかについてはhttps://pqrs.org/osx/karabiner/json.html が参考になる。また、https://github.com/pqrs-org/KE-complex_modifications/tree/master/docs/json あたりを参考にすると、いろんな参考例を探せて便利だった。
このjsonの設定でconditionsのfrontmost_application_ifという機能を利用することで、特定アプリケーションのときのみの変換ルールなどを書くことが出来る。
今回の場合IntelliJ IDEAでのみ円マークとバックスラッシュの入力を交換したかったので以下のような設定となった。
~/.config/karabiner/assets/complex_modifications/intellij-yen-mark.json
{ "title": "Swap ¥ and \\ in IntelliJ IDEA on JIS Keyboards", "rules": [ { "description": "Change ¥ to Alt+¥ in IntelliJ IDEA", "manipulators": [ { "from": { "key_code": "international3" }, "to": [ { "key_code": "international3", "modifiers": [ "option" ] } ], "type": "basic", "conditions": [ { "type": "frontmost_application_if", "bundle_identifiers": [ "^com\\.jetbrains\\.intellij\\.ce$" ] } ] } ] }, { "description": "Change Alt+¥ to ¥ in IntelliJ IDEA", "manipulators": [ { "from": { "key_code": "international3", "modifiers": { "mandatory": [ "option" ] } }, "to": [ { "key_code": "international3" } ], "type": "basic", "conditions": [ { "type": "frontmost_application_if", "bundle_identifiers": [ "^com\\.jetbrains\\.intellij\\.ce$" ] } ] } ] } ] }
Karabinar-Elementsで設定を有効にする
このようなjsonを正しく配置するとKarabinar-ElementsのComplex ModificationsのAdd rule内で定義したルールを使うことが出来るようになる。
あとはこの二つのルールをenableすればOK。これでIntelliJ IDEAでのみ円マークとバックスラッシュマークを入れ替えることが出来た。
より良い解決方法
やってみた後で気づいたのだけど、
という話だったので、IME側の設定をオフにしKarabinarで全体を入れ替えで良いだけだった。まあKarabinar-Elementsで特定アプリケーションのみのキーバインド変更というテクニックが身についたので良いとする。
技術的Tips: 利用しているアプリケーションのBundle Identifierを調べるには
まとめ
今回はKarabinar-Elementsを使って特定のアプリケーションの時だけキーを入れ替える方法についてメモをしてみた。最近のKarabinar-Elementsには他にもいろいろなカスタマイズ方法があるみたいなので試してみたい。
*1:いろいろ試した後になぜそうなっていたか気づき、より良い解決策はわかったけどその時は気づいてなかった