何がしたいのか
とにかくホームポジションからの移動を最小化したい。
具体的にはCapsLockキーと他のキーの組み合わせにホームポジションから離れたキーの機能を割り当てたい。
USキーボード独特のCapsLock問題
JISキーボードだとそんなに難しいことをしなくても、AutoHotKeyだけでどうにかなりました。Shiftと同時押ししないとCapsLockがかからないので。
しかしUSキーボードはCapsLock単押しでも切り替わってしまうので、単純に同時押しのスクリプトを設定すると一応動作はするんですが、そのたびにCapsLockがオン・オフされてしまうという問題があります。
単押しでのCapsLockオンオフを無効化しつつ、AutoHotKeyでも使えるようにするというのがこの記事の目的です。
レジストリで架空のF21キーに割り当て
なぜF13じゃなくてF21なのかは適当です。13だと縁起悪い気がしたからっていうだけです。別にF13~F24の間ならなんでも良いと思う。
別にキーボードにないキーなら何でも良いんですが、USキーボードにないからといって変換キーや無変換キー、かなカナキーだとアプリケーションによっては余計な動作をしそうだったので、そもそも架空のキーに割り当てます。
まずはキーコードを調べる
私はAutohotkeyを使っているので、下の記事を参考に一時的にキーコードを調べるスクリプトを設定。
F21キーのスキャンコードは6Cということがわかったので、CapsLockの3Aと入れ替えるようにレジストリをいじります。
レジストリに書き込む
下の記事を参考に、実際にレジストリを書き換えます。

レジストリエディタを使って、HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layoutのディレクトリに新しいバイナリ値を作成します。
参考記事でCtrlのスキャンコードを入力している部分にF21キーのコード6Cを入れるだけ。
再起動後、CapsLockキーを押しても無効化されていることを確認。念の為もう一度Autohotkeyのキー履歴を見てみると、ちゃんとF21キーとして認識されていました。
AutoHotKeyでキーバインドを設定する
レジストリでリマップしたので、CapsLock単押しでもCapsLockは発動しません。
下記は実際に私が使っているAHKのスクリプトのうち、CapsLockキー関係のものです。
TabやEnter、BackSpaceすら設定して、徹底的にホームポジションからの動きを最小限にするように考えました。
;CapsLock(sc03A)はF21(sc06C)にリマップ済み ;CapsLock+FでTabの動作 sc06C & f::Send,{Tab} ;CapsLock+;でDEL、+:でBSの動作 sc06C & sc028::Del sc06C & sc027::BS ;CapsLock+SpaceでEnterの動作 sc06C & Space::Send,{Enter} ;CapsLock+hjklで上下左右の動作 sc06C & h::Send,{Blind}{Left} sc06C & j::Send,{Blind}{Down} sc06C & k::Send,{Blind}{Up} sc06C & l::Send,{Blind}{Right} ;CapsLockでコピペ等の動作 sc06C & c::Send,^c sc06C & v::Send,^v sc06C & a::Send,^a sc06C & s::Send,^s sc06C & z::Send,^z sc06C & x::Send,^x
コメント