【Mac】日本語入力中に Shift + Ctrl + A で全範囲選択してしまう
はじめに
Mac で日本語入力を有効にした状態で Shift + Ctrl + A
を押すと、「全範囲選択」してしまいます。
期待する挙動は「行頭まで選択」です。「Shift
で範囲選択」+「Ctrl + A
で行頭まで移動」の組み合わせのためです。
今回は、この問題を修正する方法を紹介します。
解決策
Karabiner-Elements を使う
Karabiner-Elements を使用します。その中でも 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
}
}
]
}
]
}
以下のような挙動となります。
-
日本語入力を ON
&&Shift + Ctrl + A
を検知 - 入力ソースを英語に切り替え
- 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 に興味がある方は、以下の渾身の記事もひぜみていただけると、励みになります。
Discussion