WindowsでAutoHotkeyを使ってVimライクな動作をどこでも実現する vim_ahkではこれまで有効にするアプリケーションを指定する方法を取っていましたが、 簡単にすべてのアプリケーション上でも有効に出来るようにしました。
vim_ahk
vim_ahkはAutoHotkeyのスクリプトで、Windows上のどこでも H/J/K/L で移動したりY/PでコピペしたりするVimチックな動きを 再現するためのスクリプトです。
exeファイルを直接使えばAutoHotkeyがインストールされてない環境でも動きます。
これまでのアプリケーションの指定
これまでは設定メニューのApplication
欄に記入されたアプリケーションのみの上で
有効になるようにしていました。
これは、ターミナル上やVim上で有効になってしまうとそこでオリジナルのVimが使えなくなってしまったりするためです。
後は基本的にはエディタ的な所での動作を想定してたので、Allow List的なもののが良いかな、と思ってそうしていました。
新しいオプション
今回Application list usage
というオプションを追加しました。
スクリプト内ではVimAppList
という変数が該当します。
これまでと同じ動作にするにはAllow List
を選びます(デフォルト設定)。
これ以外にAll
、Deny List
という選択肢があって、
All
を選択すればApplication
のリストを無視してWindows内すべてのアプリケーション上で
vim_ahkが有効になります。
一方でDeny List
を選択すればApplication
のリストにあるもの以外で有効に出来ます。
実装
AutoHotkeyのスクリプト内では通常
#If WinActive("ahk_group XXX")
みたいな感じで現在最前面にあるウィンドウが指定のウィンドウ(もしくはウィンドウグループ)かどうかを確かめ、該当する場合にキー設定を有効にする、みたなことをします。
ここを
#If Vim.IsVimGroup()
みたいな感じで関数にして、
IsVimGroup(){
if(this.Conf["VimAppList"]["val"] == "Allow List"){
Return WinActive("ahk_group " . this.GroupName)
}else if(this.Conf["VimAppList"]["val"] == "Deny List"){
Return !WinActive("ahk_group " . this.GroupName)
}
Return True
}
の様な感じで状況に応じて扱いを変えてやることでやっています。