tkykmw code

学びたいことを学ぶ

Windows 10でEmacs風キーバインドを使う

Mac OSと同じように、WindowsGUI全般でEmacsキーバインドを使えるようにする。

AutoHotkeyというツールを使用するのが、最も安定していてよさそうだ。

私は親指シフトの「やまぶきR」とも併用しているが、問題なく使用できている。

AutoHotkeyとは

AutoHotkeyは、特定のキー操作に任意のアクションを割り当てるための自動化ツールである。その「任意のアクション」の一つとして「任意のキーコードを送る」ことができ、結果としてキーバインドの変更が可能である。

キー操作とアクションの割り当てには独自のプログラミング言語を用いるため、とっつきにくさは否めない。しかしキーバインドの変更に絞れば、比較的カンタンである。

特定のアプリケーション(ウィンドウ)でのみキーバインドを変更する / しない、といった制御も可能。

インストールと設定

公式サイトからインストールしてスタートメニューからAutoHotkey.exeを実行すると、タスクトレイに常駐する。右クリックして「Edit This Script」を選ぶと、デフォルトの設定ファイル(スクリプトファイル)を編集できる。

ファイルの場所は %HOMEPATH%\Documents\AutoHotkey.ahk つまりマイドキュメントの中。もちろん好きなエディタでこのファイルを編集してもいい。編集が終わったらタスクトレイから「Reload This Script」。

実現したいEmacsキーバインド

最低限、これらができれば、Mac並みといっていいだろう。

  • Ctrl-h でBackspace
  • Ctrl-b でカーソル左移動
  • Ctrl-f でカーソル右移動
  • Ctrl-n でカーソル下移動
  • Ctrl-p でカーソル上移動
  • Ctrl-e で行末移動
  • Ctrl-a で行頭移動
  • Ctrl-d でDelete
  • Ctrl-k で行末まで削除

対応する設定は次のようになる。

^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}{Backspace}

特定のアプリケーションを対象外とする

Windows Subsystem for Linuxやcmd.exeのコンソールは対象外としたかったので、次のような構成にした。

; すべてのアプリケーションで有効にする設定はここに書く

#IfWinNotActive ahk_class ConsoleWindowClass
; コンソールで無効にしたい設定はここに書く
^h::Send, {Backspace}
^b::Send, {Left}
^f::Send, {Right}
...

IfWinActiveIfWinNotActiveでは、ウィンドウのタイトルや実行ファイル名、ウィンドウのクラスなど、様々な方法でウィンドウを特定できる。詳しくはドキュメントを参照。

ウィンドウの詳しい情報は、タスクトレイアイコンを右クリックして、「Window Spy」というツールを起動すれば確認できる。

デフォルトの機能を別のキーバインドに割り当てる

全選択(Ctrl-a)と新規作成(Ctrl-n)は、たまに使えないと困るので、Alt-* に割り当てた。

; Select all and open new window with Alt-*
!a::Send, ^a
!n::Send, ^n

Sendの引数に指定したキーコードが再解釈されることはないので安心してほしい。