CSSファイルを保存すると同時にブラウザをリロード

自動リロードで開発をアジャイルにするたったひとつの方法!萌ディタで保存と同時にSafariをリロードするデモと似たようなものをWSH with JScriptと秀丸マクロで泥臭く実現してみようとかいう話。やろうと思えばいろんな環境で実現できそうてなもんだ。

ブラウザのリロードは魔法のメソッドSendKeyF5を送ってやれば良し。ただ、SendKeyはアクティブなウィンドウにしか効果が無いので、

  1. CSSファイルを保存
  2. ブラウザをアクティブに
  3. F5をSendKey
  4. エディタをアクティブに

としてやる必要がある。エディタをアクティブにするのはPIDさえ知ってればJScriptでいけるけど、調べるのはちょっと面倒。しかしながらほとんどのエディタは「既に開いているファイルを開こうとすると、既にそのファイルを開いているウィンドウ(とかタブ)を最前面にする」という動作をするので、保存したCSSファイルを開こうとしてやればエディタがアクティブになってくれる。

JScriptは

filename = WScript.Arguments(0);

var oShell = WScript.CreateObject("WScript.Shell");
oShell.AppActivate("Mozilla Firefox");
WScript.Sleep(100);
oShell.SendKeys("{F5}");

oShell.Run("hidemaru.exe " + filename);

こんなんで。秀丸側は保存時フックのためにはCtrl+Sに、

$fExt = filetype + ".";

if (strstr(".css.", $fExt) != -1) {
  save;
  run "wscript.exe D:\\Development\\wsh\\reload-firefox.js " + filename2;
} else {
  save;
}

endmacro;

とかいうマクロを割り当てるとかで!!! 保存時フックとは言いません。