US配列HHKBライクなカーソル操作のショートカットをmacで自作する
この記事は、フラー株式会社 Advent Calendar 2021の2日目の記事です。 (昨年のAdvent Calenderのためにブログを開設したものの、一年間放置してしまいました... ) qiita.com
昨日は@chooblarinさんの「今年のJリーグのBar Chart Raceをつくった」でした。 Bar Chart Raceは学生さんたちに人気らしいです。Youtubeとかでよく動画になってるからでしょうか? 見てると途中で頭の中にユーロビートが流れ出します。
US配列のHHKBのカーソル操作を他のキーボードでも実現したい
職場でのタイピングにはUS配列のHappy Hacking Keyborad (HHKB)を使用しています。HHKBの感想やレビューはネット上に山ほどあるので特に書きませんが、HHKBはUS配列だとカーソルキーがないんです。
じゃあどうやってカーソルを操作するのかというと、fnキーを押しながら、[
, ;
, '
, /
のいずれかを押すことで、対応する方向にカーソルが動きます。
これだけだと、どういうことか分かりづらいので、図示すると以下のようになります。
このカーソル操作、初めは戸惑いますが、慣れるとかなり快適になります。
カーソルキーってホームポジションからやや離れた位置にあるので、通常のキー配置だとカーソル操作のために右手の移動が必要になりますが、HHKBのこの方式だと文字のタイピング中でも小指がfnキーに届くので、ほとんど右手を移動させることなく、タイピングができるようになります。
でも、これに慣れると逆に困るのが
他のキーボードでカーソルキーを押すのが面倒になる
ということです。
なので、他のキーボードでも、何かしらのキーと[
, ;
, '
, /
(以下、記号キー)の同時押しでカーソルを操作するショートカットを実現できるようにしました。
なお、今回は主にMac OSでの実現方法について説明します。Windows OSでの実現方法についても、最後に少しだけ触れます。
Karabiner-Elementsに自作ショートカットを追加する
目的のショートカットを実現するために、Macのキーバインド設定ができるKarabiner-Elements(以下、Karabiner)を使用します。 使用している方も多いと思いますし、解説記事もたくさんあるので、インストール方法は割愛します。
Karabinerでは、単純なキー割り当てを変更するだけでなく、有志の方が作成したショートカットコマンドが公式サイトに公開されていて、簡単にインポートできるようになっています。
さらに、有志の方が作っているようなショートカットを自作することもできます。 この自作機能を使って、目的のショートカットを実現します。
どういうショートカットにするのか
今回は、右シフト + 記号キーで各方向のカーソル操作ができるようにします。
なぜ右シフトを採用したのかというと、以下の理由になります。
- HHKBのFnキーが右シフトのすぐ隣にあるので、位置が似ている
- 右シフトはほとんどのキーボードにありそうだし、位置も変わらなさそう
- 既存のショートカットとバッティングしても、左シフトがあるから既存のショートカットが使えなくなることがない
commandキーやfnキーも候補に上がりましたが、前者はVScodeなどで/
との同時押しでコメントアウトのショートカットに使われており、後者はキーボードによって配置位置が違うため、落選となりました。
自作ショートカット用ファイルを作成する
適当なテキストエディタで以下のJSONファイルを作成します。名前は適当でいいですが、今回はright_shift_arrow_shortcut.json
とします。
同一のファイルをGithubにも上げました。
https://github.com/kanterbury/karabiner_custom_modifications/blob/main/right_shift_arrow_shortcut.json
{ "title": "Right Shift Arrow Shortcut", "rules": [ { "description": "Right Shift + [ to Up", "manipulators": [ { "type": "basic", "from": { "key_code": "open_bracket", "modifiers": { "mandatory": ["right_shift"], "optional": ["left_shift"] } }, "to": [ { "key_code": "up_arrow" } ] } ] }, { "description": "Right Shift + / to Down", "manipulators": [ { "type": "basic", "from": { "key_code": "slash", "modifiers": { "mandatory": ["right_shift"], "optional": ["left_shift"] } }, "to": [ { "key_code": "down_arrow" } ] } ] }, { "description": "Right Shift + ; to Left", "manipulators": [ { "type": "basic", "from": { "key_code": "semicolon", "modifiers": { "mandatory": ["right_shift"], "optional": ["left_shift"] } }, "to": [ { "key_code": "left_arrow" } ] } ] }, { "description": "Right Shift + ' to Right", "manipulators": [ { "type": "basic", "from": { "key_code": "quote", "modifiers": { "mandatory": ["right_shift"], "optional": ["left_shift"] } }, "to": [ { "key_code": "right_arrow" } ] } ] } ] }
rules
の配列に各ショートカットを登録していくことになります。
from
に実際に押すキー操作のルールを、to
の割り当てたいキー操作(つまり、方向キー)のルールを記載します。
今回のポイントはfrom
のほうです。
key_code
に押す英字や記号のキーを登録します。今回は各記号キーが相当します。
modifiers
はkey_code
で登録したキーと同時押しする装飾キーを登録します。登録方法は2種類あります。
mandatory
必ず押すキーを登録します。今回は右シフトキーが相当します。
optional
同時に押すことを可能とするキーを登録します。
optional
に登録したキーも同時に押している場合、変換後のキーとoptional
のキーが同時に押されたように処理されます。
今回の場合は、左シフトキーを登録しています。これは、Shift + カーソル操作によるテキスト選択を自作したショートカットでも実現するためです。
例えば、右シフト + [
は↑
に相当しますが、optional
である左シフトも同時押しすると右シフト + [ + 左シフト
が↑ + 左シフト
と認識されるようになり、カーソルを上に動かしながらのテキスト選択という操作になります。
作成したルールをkarabiner-Elementにインポートする
/Users/[ユーザ名]/.config/karabiner/assets/complex_modifications
その後、Karabiner-Elementsの設定画面にて、Complex modifications → Rules → Add ruleを選択します。
別ウィンドウが開くので、その中から先ほど追加したルール群Right Shift Arrow Shortcut
を見つけて、Enable Allをクリック。
これで、独自ショートカットの登録が完了です。右シフト + 記号キーでカーソル移動ができるようになりました!
使ってみて
右シフトの押下がやや重い
今回のショートカットの場合、私は右シフトを右手の小指で押下していますが、fnキーに比べると大きいのでやや重みを感じます。
もっといい組み合わせがありかもしれない
カーソル移動のショートカットを考えだすと、今回の右シフト + 記号キーよりもいいかもと思える組み合わせが浮かんできます。 私は右シフトを通常のタイピングで全くと言っていいほど使わないので、右シフト + WASDでゲームライクなカーソル移動にするのも良さそうです。
備え付けのカーソルキーを使用してしまう
ここまで書いてそりゃないぜという感じもありますが、使っているキーボードにカーソルキーがついているとどうしてもそちらを使用してしまいます。HHKBを使っている時は、何も意識せずにショートカットを使用しているのに...
Windowsでも同様のショートカットを適用したい
私はMicrosoft PowerToysというツールを使っています。 Microsoftが開発しているユーティリティツールで、ショートカットやキーバインド設定だけでなく、ウィンドウの並列配置などもサポートしてくれて、いろいろ遊べそうです。
まとめ
今回は、Karabinerへの独自ショートカットの追加機能を行って、カーソル操作のショートカットを自作してみました。 意気揚々と作ってみたはいいものの、使ってみると思ったほどでもないっていうのは、効率化あるあるだと思います。 でも、ショートカットが自作できるというのは、何かと応用が効いて便利なはずです。
皆さんの考えた最強の独自ショートカットをぜひ教えてほしいです!
参考
complex_modifications manipulator definition | Karabiner-Elements