右Commandキーで英数・かなをトグルしたかった


HHKBのUS配列を購入したので Karabiner-Elements で右Commandキーの機能を英数・かなトグルにしようと調べた結果、以下の設定を発見。

For Japanese (日本語環境向けの設定) (rev 5)

この中の "コマンドキー(右のみ)を単体で押したときに、英数・かなをトグルで切り替える。 (rev 2)" でトグルできる事を確認。

問題

ただし、この設定では以下のような問題があった。

  • 「単体で押した時」という条件がある
  • キーアップのタイミングで英数・かなをトグルする
  • キーコンビネーション時に右Commandキーが復活する

これらの制約のため、押し方次第でトグルしなかったり、半角スペースを打とうとした時にAlfredが起動してしまっていた。

解決

Karabiner-Elementsの設定項目をまとめました に設定方法があった。
これを参考にしながら前述の設定を以下のようにアレンジ。

right_command_eisuu_kana_toggle.json
{
  "title": "右コマンドキーで英数・かなをトグル",
  "rules": [
    {
      "description": "右コマンドキーを押したときに、英数・かなをトグルで切り替える。",
      "manipulators": [
        {
          "type": "basic",
          "conditions": [
            {
              "input_sources": [
                {
                  "language": "ja"
                }
              ],
              "type": "input_source_if"
            }
          ],
          "from": {
            "key_code": "right_command",
            "modifiers": {
              "optional": [
                "any"
              ]
            }
          },
          "to": [
            {
              "key_code": "japanese_eisuu"
            }
          ]
        },
        {
          "type": "basic",
          "conditions": [
            {
              "input_sources": [
                {
                  "language": "en"
                }
              ],
              "type": "input_source_if"
            }
          ],
          "from": {
            "key_code": "right_command",
            "modifiers": {
              "optional": [
                "any"
              ]
            }
          },
          "to": [
            {
              "key_code": "japanese_kana"
            }
          ]
        }
      ]
    }
  ]
}

変更点

parameters, to_if_held_down, to_if_alone は不要なので削除

to_if_held_down は parameters の basic.to_if_held_down_threshold_milliseconds で指定されたミリ秒後に発火するキーの指定。
ここは right_command と指定されている。
to_if_held_down の機能は利用しないため、今回はどちらの指定も不要。

to_if_alone はキーを単体で押下した場合に発火するキーの指定。今回は単体・コンビネーション関係無くトグルさせたいため不要。

to に本来指定したいキーを設定

right_command と指定されているため、それぞれ japanese_eisuu japanese_kana を指定。

変更しなかった点

modifiers

modifiers を取ると、コンビネーションキーと組み合わせた時に右Commandキーが復活してしまう。

解決したようなしてないような

キーアップではなくキーダウンでトグルされるようになり、トグル漏れが起きる回数が減ったため概ね想定通りに動くようになった。(Alfredも顔を出してこなくなったし。)

しかし、コンビネーションキーと組み合わせるとうまくトグルしない事を確認。
もしかするとコンビネーションキーが押されているとコンディションをうまく判断してくれない?

右Alt+右Command同時押し二回、右Altを押しながら右Commandを数回、右Commandのみを数回押した場合の結果。