Help us understand the problem. What is going on with this article?

Karabiner-Elementsを使ってキーの2連打に処理を割り当てる方法

More than 1 year has passed since last update.

前書き

Karabiner-Elementsを使って、キーの2連打に処理を割り当てる設定方法を作成しました。
これまで、BetterTouchToolを使ってキーの2連打に処理を割り当てていましたが、複数のソフトでMacのカスタマイズを行うと管理が面倒でした。私の環境では、Karabiner-Elementsでキー2連打を設定できれば、キーボードのカスタマイズをKarabiner-Elementsに一本化できるため、この設定を作成しました。
本記事では、以下の2つの設定方法を紹介します。これを見れば、応用は十分可能だと思います。

  1. 左controlキーを2回連続で押すとSafariが立ち上がる
  2. Windowsのキーボードユーティリティーソフトの「秀Caps」にある「テンキー上のピリオド2回でコンマ入力」を実現

それぞれの実装方法は次のとおりです。

左controlキーを2回連続で押すとSafariが立ち上がる

実装方法としては、以下の点に注意して実装しました。

  1. 1回目の左controlタイプ時に、set_variableを使ってleft_control_key変数にフラグを立てる
  2. 1.の変数の処理の後、"key_code": "left_control"を追加する。これを忘れると、左controlを左controlとして使えなくなります。
  3. 2回目の左controlタイプ時に、left_control_key変数にフラグが立っていればSafariを立ち上げる。
  4. "to_delayed_action""to_if_invoked""to_if_canceled"を使って、以下の2つの場合にleft_control_key変数の値を初期化する処理を行う。
    1. 左controlを押してから一定の時間が経過した時
    2. 左controlと違うキーを押した場合に
{
  "description": "Double tap 'left_control' to 'open -a 'safari'",
  "manipulators": [
    {
      "type": "basic",
      "from": { "key_code": "left_control" },
      "to": [
        { "shell_command": "open -a 'safari'" }
      ],
      "conditions": [
        { "type": "variable_if", "name": "left_control_key", "value": 1 }
      ]
    },
    {
      "type": "basic",
      "from": {
        "key_code": "left_control",
        "modifiers": { "optional": [ "any" ] }
      },
      "to": [
        { "set_variable": { "name": "left_control_key", "value": 1 } },
        { "key_code": "left_control" }
      ],
      "to_delayed_action": {
        "to_if_invoked": [
          { "set_variable": { "name": "left_control_key", "value": 0 } }
        ],
        "to_if_canceled": [
          { "set_variable": { "name": "left_control_key", "value": 0 } }
        ]
      },
      "conditions": [
        { "type": "variable_if", "name": "left_control_key", "value": 0 }
      ]
    }
  ]
}

「テンキー上のピリオド2回でコンマ入力」を実現

実装方法は、上記の左controlとほぼ同じですが、1つ工夫したところがあります。
それは、1回目のピリオド入力の時点で、変数にフラグを立てていったんピリオドを入力し、変数にフラグが立っている内に2回目のピリオドを入力したら、入力済みのピリオドを削除してからコンマを入力するようにしたことです。
これにより、"1.0"のような入力をする際に、タイプした通りに画面に入力した内容を表示することができるようになりました。

{
  "description": "Double tap 'keypad_period' to 'comma'",
  "manipulators": [
    {
      "type": "basic",
      "from": { "key_code": "keypad_period" },
      "to": [
        { "key_code": "delete_or_backspace"},
        { "key_code": "comma" },
        { "set_variable": { "name": "press_period_key", "value": 0 } }
      ],
      "conditions": [
        { "type": "variable_if", "name": "press_period_key", "value": 1 }
      ]
    },
    {
      "type": "basic",
      "from": { "key_code": "keypad_period" },
      "to": [
        { "set_variable": { "name": "press_period_key", "value": 1 } },
        { "key_code": "keypad_period" }
      ],
      "to_delayed_action": {
        "to_if_invoked": [
          { "set_variable": { "name": "press_period_key", "value": 0 } }
        ],
        "to_if_canceled": [
          { "set_variable": { "name": "press_period_key", "value": 0 } }
        ]
      },
      "conditions": [
        { "type": "variable_if", "name": "press_period_key", "value": 0 }
      ]
    }
  ]
}

なお、この機能は、Windowsのキーボード便利ソフトの「秀Caps」にある機能を再現したものです。「秀Caps」には、他にも以下の機能があります。

- CapsLockの状態を画面に表示する
- 英数キーをCapsLockキーにする
- 英数キーを押した時にカナロックを解除する
- カーソル移動を加速する
- ひらがなキー、変換キー、無変換キー、右Altキー、右CtrlキーをSpaceキー、カナキー、漢字キーにしてしまう。
- Shiftなしで「_」が入力できるようにする
- かな漢字変換offにする前に自動的に変換文字列を確定する
- OASYS風のかな漢字変換モード切り替え
- テンキー上のピリオド2回でコンマ入力
- Windows Vistaの「開く」ダイアログボックスで、ファイル一覧のヘッダ部分にタブストップさせない機能
- その他いろいろ
秀まるおのホームページ(サイトー企画)-秀Capsより引用

これらの機能のうち、「テンキー上のピリオド2回でコンマ入力」は地味ですが非常に強力な機能です。なぜなら、大量の数字入力を行う時はテンキーを使いますが、テンキーには".(ピリオド)"キーはあっても",(カンマ)"キーはないため、数字区切りを打たないといけない場合はテンキーから離れて","キーを押さないといけなくなります。これでは作業能率が落ちるため、テンキーだけで","が打てるようになることは大きな違いとなります。
そのため、この機能をMacで実現するべく、本設定を作成しました。

s-show
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした