yhara.jp

Recent Posts
Edit

なるべく移行コストが少ないErgoDoxのキー配置

2016-12-06
Tech

このエントリは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キーを押そうとしてここを叩いてしまうミスが頻発したので、ここはあえて空きにしてあります。

おまけ

本題は以上ですが、以下ではおまけとして、残りの部分のキー配置について解説しておきます。

レイヤー0の配置図

レイヤー1

左下の赤丸のキーを押すと、配置がレイヤー1になります。例えば赤丸 + 1 でF1が入力されます。

レイヤー1にはファンクションキーとカーソル移動関係のキーを配置しています。ファンクションキーは数字キーと対応させておくと覚えやすいですが、F11とF12が余るので、適当に右側に置いてあります(たぶん半年間一度も押してない)。

レイヤー1の配置図

カーソルキーは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の配置図

ちなみにレイヤー2左側にはマウスキー機能を置いてみたんですが、あまりしっくり来なかったのでいまのところ使っていません。

まとめ

実際の設定(keymap.c)はgistに上げて置きました。参考になれば幸いです。


  1. (2017/10/23追記) 頑張れば近いことができることが分かった。「;」をベースレイヤーに置き、別のレイヤーでそのキーを「*」にすればいい。たいていの記号はキーコードが定義されている(「*」ならKC_ASTR)し、「>」みたいに定義がない(?)ものでもS(KC_DOT)でShift + . を送信してやれば良い。 


More posts