- 前の記事「Karabiner-Elements で「かな」配列をカスタマイズする」の後、 IME の状態を取れるようになった
- 複数キー同時入力でうまく入力できないことがある問題に対する workaround について
CONTENTS
SOURCE
APPENDIX
IME の状態を条件に使用する
この記事にある通り、 input_source_if
で IME の状態を条件の中で使用することができるようになった。
サンプルとしてEscキーに対するマッピングの例。
{ "type": "basic", "conditions": [ {"type": "input_source_if","input_sources": [{"language": "ja"}]} ], "from": {"key_code": "escape"}, "to": [{"key_code": "japanese_eisuu"},{"key_code": "escape"}] }
これは、日本語入力モードの場合、Escキーを「英数」+「Escキー」に割り当てる設定だ。 元の記事でも書いてあるが、 Vim を使用しているとこのマッピングがなかなか便利に使える。
input_source_if
を使用することで、「かな」「英数」入力時にわざわざ is_japanese_kana
変数を操作する、ということをしなくて済むようになる。
また、パスワードの入力等、 IME が自動的に無効化される場合などもこれでうまく対応できる。
複数キーの同時入力でうまく入力できない問題
例えば、以下のような設定の場合、うまくいかない事がある。
{ "type": "basic", "conditions": [ {"type": "input_source_if","input_sources": [{"language": "ja"}]}, ], "from": {"key_code": "z"}, "to": [{"key_code": "s"},{"key_code": "u"}] }, { "type": "basic", "conditions": [ {"type": "input_source_if","input_sources": [{"language": "ja"}]}, ], "from": {"key_code": "m"}, "to": [{"key_code": "r"},{"key_code": "u"}] },
この設定で「する」と打鍵すると、時々「すr」になってしまう。
「る」と入力されるべき r
u
のうち、後の u
が、うまく入力できないことがあるのだ。
Karabiner-Elements の Event Viewer で、キーを押した時にどんな処理かしているのかを見る事ができる。 これで調べた結果、ある文字が Key Press 状態の時、同じ文字のイベントが無視されてしまうように見える。
そこで、各マッピングの最後を空のイベントにすることで、どの文字も Key Press 状態にならなくしてみた。
{ "type": "basic", "conditions": [ {"type": "input_source_if","input_sources": [{"language": "ja"}]}, ], "from": {"key_code": "z"}, "to": [{"key_code": "s"},{"key_code": "u"},{}] }, { "type": "basic", "conditions": [ {"type": "input_source_if","input_sources": [{"language": "ja"}]}, ], "from": {"key_code": "m"}, "to": [{"key_code": "r"},{"key_code": "u"},{}] },
これで一応、「する」もうまく入力できるようになった。 ただし、 Key Press しなくなるので、キーを押し続けて文字を入力することはできなくなる。
まとめ
Karabiner-Elements がアップデートされて、機能が Karabiner に追いついてきた。