なるべく移行コストが少ないErgoDoxのキー配置
このエントリはErgoDox Advent Calendar 2016の6日目のエントリです。
今年の5月に仕事用キーボードとしてErgoDox EZ (組み立て済みErgoDox) を購入し、半年が経ちました。ErgoDoxのメリットの一つとしてキーマップのカスタマイズ性の高さがありますが、一方で「Pキーの右にたった一列しか場所がない」という特殊な形状のため、キー配置をどうカスタマイズしても慣れるまでに多少の練習が必要になるという問題もあります。
本稿ではなるべく練習が要らないキー配置について考えます。
ポイント
キーボード上にはたくさんのキーが存在しますが、それぞれの使用頻度には大きな隔たりがあります。「%」や「&」など使用頻度の少ないキーは、多少変なところに配置してもそれほどストレスにはなりませんが、EnterやBackSpaceなどの基本的なキーを変わったところに置くと慣れるまで大変です。
ということで、使用頻度が高いキーから順に、「これはどうしてもここに置きたい」という場所に配置していくことになります。
その1 : ハイフン、BackSpace、Enter、Shift
最初に、筆者が現在使用している配置を貼っておきます。(画像はconfigure.ergodox-ez.comをベースにしています)
一番右の列にはハイフン、BackSpace、Enter、Shiftを配置しました。このあたりは非常によく使うキーで、脳で考えるより前に指が勝手に押してしまうので、ここに置くのが一番楽でした。ハイフンは他の3つに比べるとそんなに押さないのではと思われるかもしれませんが、実は日本語入力のときに伸ばし棒として使うので地味に利用頻度が高いです。
EnterおよびBackSpaceはErgoDox ezの出荷時設定だと親指で押すようになっていて格好良いのですが、やってみるとかなり難しかったです(指が勝手にいつもの位置を押してしまう)。
その2 : コロンとセミコロン
次に考えたのはLキーの右に何を置くかです。ここで、ベースを日本語配列・英語配列のどちらをにするかという選択肢が生じます。日本語配列だとShift + ; で「+」が入力されますが、英語配列だとShift + ; で「:」が入力されます。ErgoDoxはカスタマイズ性が高いとは言っても、既存のキー配列の枠組みを超えることはできず、;が出るキーをShift付きで押すと「*」になるようなことはできません(と思ってるんですが合ってますかね?)1
個人的な事情としてコロンはVim、セミコロンはAZIKで頻繁に使うので、これらはできればLの右側に配置したいと思いました。幸い英語配列だとこれらが1キーにまとまっているので、現在は英語配列をベースにしています。また英語配列だとShift + 0が有効活用できるというメリットもあります(日本語配列だとShift + 0では何も入力されず、そこそこ押しやすい配置なのに勿体ない)。
その3 : ESC、Tab、Ctrl、Shift
左端の列にはESC、Tab、Ctrl、Shiftを配置しています。ただしESCは左上ではなく、Ctrlを単押ししたらESCが入力されるよう設定しています。モディファイヤを単押しした場合の挙動をカスタマイズできるのはErgoDoxの便利なところです。ESCはVimで頻繁に押すので、このように押しやすい位置にあると快適です。
普通のキーボードに近づけるならESCは左上に置きたくなりますが、購入初期に1キーを押そうとしてここを叩いてしまうミスが頻発したので、ここはあえて空きにしてあります。
おまけ
本題は以上ですが、以下ではおまけとして、残りの部分のキー配置について解説しておきます。
- ところどころ何も割り当てていないキーがありますが、基本的にホームポジションから遠くて押しづらい場所が空いています。特に親指用の長いキーって押しやすそうに見えるんですが、遠い方は手をグッと開かないと押せない感じがあって有効活用できていません。
- よく見るとBキーが2つあります。自覚してなかったのですがBを右手の人差し指でタイプする癖があって、そのために右側にもBを置いてあります。
- 左サイド一番下のNキーはThunderbird用で、これがあると右手でパンを食べながら新着メールを流し読みすることができます。
- バックスラッシュはどこに置くかけっこう迷ったのですが、最終的に右小指で押すことにしました。このキーはレイヤー2切り替えのモディファイヤですが、単押しするとバックスラッシュが入力されるよう設定しています。
- イコールも2つあります。左にあるのがイコール用、右にあるのがプラス用です。右のはあんまり押しやすくないんですが、どうも右Shiftを押さない癖があって、左手でShift + イコールを押すのがつらかったので追加しました。
レイヤー1
左下の赤丸のキーを押すと、配置がレイヤー1になります。例えば赤丸 + 1 でF1が入力されます。
レイヤー1にはファンクションキーとカーソル移動関係のキーを配置しています。ファンクションキーは数字キーと対応させておくと覚えやすいですが、F11とF12が余るので、適当に右側に置いてあります(たぶん半年間一度も押してない)。
カーソルキーはWASDやnpfbなども試したのですが、最終的にHJKL(roguelike風)に落ち着きました。MacだとCtrl-f/Ctrl-bでカーソル移動ができたりしますが、一部のシチュエーション(例:VMWare上のUbuntuでGitHub Issuesにコメントするとき)ではCtrl-f/Ctrl-bが変な挙動に上書きされている可能性があります。一方、レイヤー1でのカーソル移動は上書きされない(=必ず「カーソルキーを押した」ことになる)ので、変な挙動にならないか心配するストレスが無くて良いです。
レイヤー2
右下の赤丸キーを押している間、配置がレイヤー2になります。
レイヤー2にはメディア関係の機能を置いています。レイヤー1のHJKLにカーソルキーを置いたので、矢印の向きに合うようにPrev/Next、音量Up/Downを配置しています。EnterをPlay/Stopにするのもなんとなく感覚に合っていて覚えやすかったです(あとStopしたいのって席を立つ場合とかなので、片手で操作できて良い)。
ちなみにレイヤー2左側にはマウスキー機能を置いてみたんですが、あまりしっくり来なかったのでいまのところ使っていません。
まとめ
- なるべく移行コストの少ない配置を考えてみた(Tab, Enter, BackSpace, ハイフンあたりが普通の位置にあると良い)
- 英語配置だとShift + 0が有効活用できる
- 親指Enterは難しい(できる人はすごい)
実際の設定(keymap.c)はgistに上げて置きました。参考になれば幸いです。
-
(2017/10/23追記) 頑張れば近いことができることが分かった。「;」をベースレイヤーに置き、別のレイヤーでそのキーを「*」にすればいい。たいていの記号はキーコードが定義されている(「*」ならKC_ASTR)し、「>」みたいに定義がない(?)ものでも
S(KC_DOT)
でShift + . を送信してやれば良い。 ↩