MacBookの controlキーは、UNIX系のショートカットキー操作が利用できるのが面白い特徴です。
ところが、一部のキー操作はアプリによって動作したり、しなかったり、ということがありました。
1. control-mは returnキーと同等ではないのか?
例えば、「control-m」のキー操作。
Emacsやターミナルでは「改行(return)」にバインドされているキー操作です。
しかし、macOSのアプリで操作していると、これが動作するときと、しないときがあることに気づきました。

文字の変換中は「確定」として動作するのですが、「メモ.app」で文章の編集作業をしているときなどは改行されません。
どうも「control-m」が「改行」キーと全く同等の動作、というわけではなさそうです。
ほかにも、「control-d」も「削除(delete char)」として動作したり、しなかったり。
2. キーバインドのツールKarabiner
ということで、キーバインドの設定をすることにしました。
「キーバインド」とは、キー操作と動作を割り当てることです。
必要なアプリケーションは「Karabiner-Elements」です。
Karabinerは、キー操作と動作を割り当てるための設定ツールです。
以前は「KeyRemap4MacBook」という名前でした。
各アプリがショートカットキーを認識よりも「前に(下で)」動作するので、自分の好みのキーバインドをすることができます。

今回はこれを利用して、「emacs like」なキーボード操作環境を作っていきます。
2-1. Karabinerのインストールと権限の許可
Karabinerはインターネットで公開されています。
https://karabiner-elements.pqrs.org/
ディスクイメージファイル(.dmg)をダウンロードして、開きます。

中にはOS Xインストーラファイル(.pkg)がありますので、ソフトのインストールができます。

ソフトをインストールし、実行するには「権限の許可」をする必要があります。
- 「システム環境設定」ー「セキュリティとプライバシー」を開きます。
- 「一般」から「実行ファイルの許可」、「プライバシー」から「入力監視」の許可をします。
これで、Karabinerがキーボード入力を監視して、変換することができるようになりました。
2-2. パスワード入力は監視されているの?
ちなみにセキュリティリスクとしては、キー操作がKarabinerによって監視されることになります。
とはいえ、Karabiner EventViewerのウィンドウでは「パスワード入力」は表示されませんでした。

パスワードの入力中は、Karabinerにキーイベントは送られていないようです。
「c o m」という入力は、メールアドレス入力のキーイベントの末尾です。
3. Karabinerのアプリケーション
Karabinerをインストールすると、以下のアプリケーションが追加されます。
- Karabiner-EventViewer
- Karabiner-Elements

「Karabiner-EventViewer」は、どのキーが押されたのかをリアルタイムでモニターするツールです。
キーボード配列はJISやUSなど、いくつかあります。
キーに印字されたとおりに、システムで認識されているとは限りません。
キーイベントをモニタリングすることで、入力キーに対応するキーイベントを調べることができます。
「Karabiner-Elements」の方がキーバインドをするためのツールです。
単純にキーを置き換えたり(Simple modification)、複雑なキーの組み合わせを割り当てたり(Complex modification)することができます。
3-1. Emacs-likeなキーバインドを設定する
それでは、実際の設定をしていきます。
Karabiner-Elementsのウィンドウを表示します。
「Complex modification(複雑な修正)」タブに切替え、「Rules(ルール)」のタブの状態で、「Add rule(ルールの追加)」のボタンを押します。


どのキー操作の組み合わせを、どう変更するか、という規則を作ることになります。
「Import more rules from the Internet (open a web browser)」(インターネットからルールを取り込む)をクリックして、インターネットに接続します。

Webブラウザで、https://ke-complex-modifications.pqrs.org/ が表示されます。
いろんな方が登録しているキーバインドが一覧になっています。
今回は 検索欄に「Emacs」と入力して、検索結果の中に@tekezoさんのメンテナンスされている「Emacs key bindings (rev 12)」というルールを選び、「import」をクリックしました。
Karabiner-Elements.appを開きますか?
というメッセージが表示されるので、「開く」と Karabiner-Elementsのルールに追加されます(7つのルールに小分けされています)。

好みのものを「Enable(有効化)」することで、設定されます。

私は、「C-x key strokes 」と「control+keys」を有効化しました。
これでKarabiner-Elementsが起動していれば、キーバインドルールが適用され、Emacs-likeな編集操作をすることができます。

Karabiner-Elementsが動作しているかは、画面上部の「メニューバー」で確認できます。
3-2. よく使っているキー操作
私が無意識に使っているキー操作をリストにすると
- C-f, b, n, p カーソル移動
- C-a, e ホームとエンド
- C-h, d, k 削除(backspace, delete, kill)
- C-y 貼り付け(ヤンク)
- C-x-C-s, C-x-C-c 保存と終了
- C-v ページダウン
これらの操作がホールボジションから離れずに操作することができ、非常に入力が楽になります。
しかも、このキーバインドは、親指シフト入力のより前に実行されるので、日本語入力のままControlキーによるキー操作ができるのも嬉しいです。
こちらもどうぞ。


