rcmdnk's blog

20210502_vimahksettings_200_200

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というオプションを追加しました。

20210502_vimahksettings.png

スクリプト内ではVimAppListという変数が該当します。

これまでと同じ動作にするにはAllow Listを選びます(デフォルト設定)。

これ以外にAllDeny 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
}

の様な感じで状況に応じて扱いを変えてやることでやっています。

Sponsored Links
Sponsored Links

« vim_ahkでモードによってキャレットの太さを変える M1 macでIntelな環境のシェルを使ったCronジョブを流したりする »

}