特定のアプリ利用時だけ Karabiner-Elements によるキーバインドの影響を除外する方法
Karabiner-Elements で特定のアプリにおけるキーバインドを除外する方法です。ちょっとしたtipsです。
Karabiner-Elements がないとmacで操作できないしょっさんですが、Complex Modifications でカスタマイズしすぎていて、特定のアプリの挙動が変わってしまうという事はよくある事です。
先日も「辞書by物書堂」で地味に引っかかってしまいました。
今回のケースだと「⌃ + [ 」です。
わたしのKarabiner-Elements でのキーバインドだと「⌃ + [ 」は 「escape」に割り当てています。このキーバインドを設定していると、「辞書by物書堂」アプリを利用する時にカテゴリの左移動ができない状況となってしまいます。「辞書by物書堂」を利用する場合において、このキーバインドは動いてほしくないと判断しました。
なお、元々の設定はこんな感じでした。この設定だと、どんな状況でも「⌃ + [ 」を押す事で「escape」キーを押した事になります。
{
"title": "Emacs key bindings (rev 12+3)",
"rules": [
{
"manipulators": [
{
"type": "basic",
"from": {
"key_code": "open_bracket",
"modifiers": {
"mandatory": ["control"],
"optional": ["caps_lock"]
}
},
"to": [
{
"key_code": "escape"
}
],
"conditions": [
{
"type": "keyboard_type_if",
"keyboard_types": ["ansi", "iso"]
}
]
}
]
}
]
}
特定のアプリで除外する時の対処法は "frontmost_application_unless" を使います。「該当のアプリケーションがフロントでフォーカスされていない時だけ」そのキーバインドを利用できるという意味合いになります。
{
"type": "frontmost_application_unless",
"bundle_identifiers": ["^jp\\.monokakido\\.Dictionaries$"]
}
ですからKarabiner-Elements の「⌃ + [ 」の設定で、辞書アプリを除外するように設定してあげます。それが、こう。
{
"title": "Emacs key bindings (rev 12+3)",
"rules": [
{
"manipulators": [
{
"type": "basic",
"from": {
"key_code": "open_bracket",
"modifiers": {
"mandatory": ["control"],
"optional": ["caps_lock"]
}
},
"to": [
{
"key_code": "escape"
}
],
"conditions": [
{
"type": "keyboard_type_if",
"keyboard_types": ["ansi", "iso"]
},
{
"type": "frontmost_application_unless",
"bundle_identifiers": ["^jp\\.monokakido\\.Dictionaries$"]
}
]
}
]
}
]
}
この "^jp\\.monokakido\\.Dictionaries$" は、どこから出てきたかというと、Karabiner-EventViewer で確認ができます。
この "Bundle Identifier" をそのまま使えばいいのですが、正規表現となっているようなので、厳密に行頭を示す "^" と行末の "$" を入れ、"." をエスケープするために "\\" がはいっています。
そういうもんだと思っておけば十分です。
これで Karabiner-Elements で特殊なキーバインドを設定はしたものの、特定のアプリではその設定を除外して欲しい場合の対処法でした。