⌨️

Windowsで好きなキーバインドを常に使えるようにする

2021/12/15に公開

こちらはApplibot Advent Calendar 2021 15日目の記事になります。

はじめに

こんにちは。ApplibotでバックエンドエンジニアをしているFirstSSです。
私は業務ではMacOSを使用しており、UNIX系OSで標準で搭載されているEmacsのキーバインドの一部を頻繁に使います。

しかし趣味でよくゲームをやるということもあり、自宅にある私用のPCはWindowsなので、そのことを忘れて(?)いつものキーバインドでカーソル移動を行おうとして「あっ、Windowsでは使えないんだった...」という事を何度もやってしまうため、何かいい方法はないかと模索してみた結果が今回の記事の内容になります。

環境はWindows10です。

概要

  • AutoHotKeyで、常に使える好きなキーバインドを設定する
  • CapsLockを右Ctrlとして割り当ててEmacsキーバインドのC-として使用し、左Ctrlは通常のCtrlとして使用できるようにそのままにしておく
  • Windowsが起動される際に常に設定がONになるようにする

AutoHotKeyの設定

まずは AutoHotKeyをダウンロードします。
https://www.autohotkey.com/download/
ダウンロードしたらsetup.exeを起動してインストールします。

インストール後、好きな場所に任意の名前.ahkというファイルを作ります。
それを右クリックして、「Edit This Script」を選択するとテキストファイルとして編集できるようになるので、その中でキーとコマンドを組み合わせて好きなキーバインドを設定します。
詳細はキーの一覧コマンドの一覧を参照してください。

以下が私の設定の一部になります。

>^h::Send, {Backspace}
>^b::Send, {Left}
>^f::Send, {Right}
>^n::Send, {Down}
>^p::Send, {Up}
>^e::Send, {End}
>^a::Send, {Home}
>^d::Send, {Delete}
>^k::Send, {Shift down}{End}{Shift up}^x
>^L::Send, {Home}+{End}

ここでそれぞれ、

  • >^: 右のCtrl
  • ::Send, {Hoge}: キーのストロークをHogeとして割り当てる
  • Backspace: カーソルの左の文字を1文字消す
  • Left: 左へ移動
  • Right: 右へ移動
  • Down: 下へ移動
  • Up: 上へ移動
  • Home: 行頭へ移動
  • End: 行末へ移動
  • Delete: カーソルの右の文字を1文字消す
  • +: Shiftキーを押す

になります。^+は記号でキーを指定できる修飾キーです。
例えば>^k::Send, {Shift down}{End}{Shift up}^xは、右Ctrl + kを押すと、

  1. Shiftキーを押下
  2. そのまま行末へ移動
  3. Shiftキーを離す
  4. Ctrl + x(切り取り)

という挙動になるので、すなわちカーソルから行末まで切り取りになります。

CapsLockを右Ctrlとして割り当てる

「a」キーの左隣をEmacsキーバインドのC-として使いたいので設定します。
必要ないよという方は読み飛ばしてください。

これ自体には色々な方法があり、最初Microsoft PowerToysを使用してキーを割り当てていたのですが、AutoHotKeyと組み合わせるとどうもうまく動かなかったので、今回はレジストリを直接編集する方法を取りました。

手順は以下の通りになります。

  1. [スタート] -> [Windowsのシステムツール]-[ファイル名を指定して実行]
    (もしくは [Windows]+[X] -> [ファイル名を指定して実行])
  2. 「regedit.exe」を検索、実行
  3. "HKEY_LOCAL_MACHINE" > "SYSTEM" > "CurrentControlSet" > "Control" > "Keyboard Layout" を参照
  4. [ファイル] > [エクスポート] で現在のレジストリファイルのバックアップを取る
  1. Keyboard Layout を右クリック > [新規] > [バイナリ値]でファイルを作成、名前を「Scancode Map」にする
  2. 出来たファイルを右クリック > [修正] > [バイナリ値の編集]
  3. バイナリ値を次のように入力

    00 00 00 00 00 00 00 00
    02 00 00 00 1D E0 3A 00
    00 00 00 00

  1. [OK]ボタンをクリックして保存
  2. PCを再起動

これでCapsLockキーが右Ctrlキーとして動作します。
バイナリ値の意味としては、左上から読んで、

  • 00 00 00 00: バージョン番号を示すヘッダ
  • 00 00 00 00: フラグを示すヘッダ
  • 02 00 00 00: エントリー数(終端を含む)。4バイトで1つ。今回の場合は2つ
  • 1D E0: 変更後のキーコード。今回は右Ctrl
  • 3A 00: 変更前のキーコード。今回はCapsLock
  • 00 00 00 00: 終端

になります。キーコード表はこちら。
https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes

Windowsが起動される際に常に設定がONになるようにする

このままだと再起動する度にAutoHotKeyの設定がリセットされてしまうので、起動時に設定が反映されるようにします。

こちらは簡単で、先ほど作成した任意の名前.ahkというAutoHotKeyの設定ファイルを、
C:\Users\[ユーザー名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
の配下に置くだけです。
ちなみに、この設定ファイルを開くと自動的に設定が反映されるようになっているので、別の設定に変えたい時は別の設定ファイルをダブルクリックして開けば反映されます。

おわりに

このような技術記事を執筆するのは初めてのため、間違っている点があったらご指摘いただけると幸いです。
ここまで読んでいただき、ありがとうございました。

Discussion