見出し画像

特定のアプリ利用時だけ 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 で確認ができます。

特定のアプリを開くと "Frontmost Application" に "Bundle Identifier" として出てきます

この "Bundle Identifier" をそのまま使えばいいのですが、正規表現となっているようなので、厳密に行頭を示す "^" と行末の "$" を入れ、"." をエスケープするために "\\" がはいっています。
そういうもんだと思っておけば十分です。

これで Karabiner-Elements で特殊なキーバインドを設定はしたものの、特定のアプリではその設定を除外して欲しい場合の対処法でした。


この記事が参加している募集

おすすめアプリ

貴方がサポートしてくれると、私が幸せ。 私が幸せになると、貴方も幸せ。 新しいガジェット・ソフトウェアのレビューに、貴方の力が必要です。