Zenn
🏌️

【Mac】日本語入力中に Shift + Ctrl + A で全範囲選択してしまう

2025/03/30に公開

はじめに

Mac で日本語入力を有効にした状態で Shift + Ctrl + A を押すと、「全範囲選択」してしまいます。

期待する挙動は「行頭まで選択」です。「Shift で範囲選択」+「Ctrl + A で行頭まで移動」の組み合わせのためです。

今回は、この問題を修正する方法を紹介します。

解決策

Karabiner-Elements を使う

Karabiner-Elements を使用します。その中でも Complex Modifications という機能を利用します。詳細な使い方は 公式ドキュメント を読むか、筆者の以下の記事を参考にして下さい。

https://zenn.dev/hiroto_ohira/articles/7a2994939f9a73#complex-modifications

日本語入力中の Shift + Ctrl + A の制御

今回の問題を解決するには、以下の設定ファイルを利用して下さい。

{
  "title": "Input Source",
  "rules": [
    {
      "description": "[input] Make Shift + Ctrl + A to work with Japanese Input",
      "manipulators": [
        {
          "type": "basic",
          "from": {
            "key_code": "a",
            "modifiers": {
              "mandatory": ["control", "shift"]
            }
          },
          "conditions": [
            {
              "type": "input_source_if",
              "input_sources": [{ "language": "ja" }]
            }
          ],
          "to": [
            {
              "select_input_source": { "language": "en" }
            }
          ],
          "to_delayed_action": {
            "to_if_invoked": [
              {
                "key_code": "a",
                "modifiers": ["control", "shift"]
              },
              {
                "select_input_source": { "language": "ja" }
              }
            ]
          },
          "parameters": {
            "basic.to_delayed_action_delay_milliseconds": 60
          }
        }
      ]
    }
  ]
}

以下のような挙動となります。

  1. 日本語入力を ON && Shift + Ctrl + A を検知
  2. 入力ソースを英語に切り替え
  3. 60ミリ秒後に以下を実行
    i. Shift + Ctrl + A を入力
    ii. 入力ソースを日本語に切り替え

Shift + Ctrl + A で全選択されてしまう」問題は日本語入力でしか発生せず、英語入力では発生しませんでした。そのため、無理やり英語入力に切り替えてから Shift + Ctrl + A を実行することで、突破しています。

次のように、to 配列にすべてのイベントを並べる方式は、機能しませんでした。

          "to": [
            {
              "select_input_source": { "language": "en" }
            },
            {
              "key_code": "a",
              "modifiers": ["control", "shift"]
            },
            {
              "select_input_source": { "language": "ja" }
            }
          ]

入力ソースが日本語から英語に切り替わる前に、Shift + Ctrl + A が入力されてしまいました。おそらく、入力ソースの切り替え処理には、若干の時間が必要なのだと考えられます。そのため、to_delayed_action を使用し、Shift + Ctrl + A を遅延実行することで、解決しています。

basic.to_delayed_action_delay_milliseconds の値 (ms) はそれぞれの環境に合わせて調整して下さい。筆者の環境 (Macbook Air 2023 M2 24GB) では、60 ms がギリギリ安定する最小値でした。

おわりに

もし Karabiner-Elements に興味がある方は、以下の渾身の記事もひぜみていただけると、励みになります。

https://zenn.dev/hiroto_ohira/articles/7a2994939f9a73

Discussion

ログインするとコメントできます