AutoHotkey_LとEmacs用のスクリプトを利用することで、WindowsでEmacsのキーバインドが利用できました。すごく便利なので、メモして置きます。

きっかけ

プログを書くためのエディタにWindows Live Writerを、メールクライアントにOutlookを使っているのだれども、どちらもEmacsキーバインドを実現する方法がありませんでした。

いろいろ探してみたら、どうもWindowsのキーバインド自体をEmacsキーバインドにしてしまえばいいことに気づき、今回の方法に至りました。

AutoHotkkey_Lとは

AutoHotKey_Lとは、Windowsのキーバインドを自由自在に設定できるOSS。
もともとが、AutoHotKeyがその機能を担っていたが、AutoHotKeyの開発が終了してしまい代わりにAutoHotKey_Lが主流となっているらしい。

自分でキーバインドを設定するのもいいが、ネット上にいろんなスクリプトが落ちているので、それを利用しても良い。今回は、そのなかでEmacsキーバインドを実施するためのスクリプトを利用する。

AutoHotKey_Lのダウンロードとインストール

以下のサイトからダウンロードする。

AutoHotkey_L

インストールは実行ファイル(AutoHotkey_L_Install.exe)を実行すればよい。手順どおりに進めばインストール完了。

AutoHotKeyが立ち上がる。
スタートアップに登録しておけば、スタートアップ時に起動するようになる。

Emacsキーバインド用のスクリプトを取得

以下のgithubからemacs.ahkを取得。

https://github.com/usi3/emacs.ahk

emacs.ahkはAutoHotKey_Lの実行ファイルと同じフォルダに入れる。

emacs.ahkの設定

AutoHotKey.ahkの編集画面を開く。
一番最後の行に以下を追加。これで、AutoHotKey.exeを実行したときに、Emacsキーバインドスクリプトも一緒に実行することができる。

#include emacs.ahk

その他、細かいemacs.ahkの改造

私の場合、WindowsのCtrl+C, Ctrll+Vが利用てきなくなるのはいやなので、Cltl+C,Ctrl+Vをコメントアウトした。Ctrl+Y,Ctrl+Wなど、貼り付け系もコメントアウト。コメントアウトは “;“を書く。

example: Ctrl+ V

;^v::
;  If is_target()
;    Send %A_ThisHotkey%
;  Else
;    scroll_down()
;  Return

GoogleChomeは除外する

Chromeに適応すると既存のキーバインドが使えなくなるため、Chromeをキーバインド適応の除外条件に入れる。

特定のアプリケーションを除外する方法は、emacs.ahkのis_target内に以下を追加する。

IfWinActive,ahk_class (除外したいWindowクラス名)
    Return 1

参考:https://www.autohotkey.com/docs/commands/IfWinActive.htm

Windowsクラス名を調べるためには、AutoHotKeyを右クリックして、[Winodw Spy]を起動する。アクティブなウィンドウの情報が得られるのでここからWindowクラス名が分かる。

以下、GoogleChromeの例。この場合は"Chrome_WidgetWin_1"となる。