ファイルを変更したら自動的にreloadする方法
ファイルの更新を監視して、変更されたらMozReplなFirefoxさんにreload指令を送る。
コンテンツのファイルをいじってて、いちいちF5するのがめんどいので。
reload指令を受理できるように
をインストール。
ツール→MozLab→Start Replで開始。
extensions.mozlab.mozrepl.autoStartをtrueにすれば、動きっぱなしにできるのかも。
4242でlistenしてるのはlocalhostだけなので、他のマシンからtelnetしたいときは、パケットリピータを使う。
例えばstoneを使って、
- 4242宛てのパケットをlocalhost:4242にリピートする
- ただし、接続を許可するのは10.6.25.201と10.6.25.202からのみ
とするときはこんな感じ:
stone -nr localhost:4242 4242 10.6.25.201 10.6.25.202
reload指定はこんなスクリプト (reload-firefox) で:
#!/bin/sh [ $# -eq 1 -o $# -eq 2 ] || { echo 'usage: reload-firefox HOST PORT'; exit 1; } host=$1 port=${2:-4242} echo "reload: $host:$port" cat <<EOF | nc $host $port content.location.reload(true) repl.quit() EOF echo
これで、10.6.25.20[12]なマシンから、
$ reload-firefox 10.6.25.100
すると、10.6.25.100で動いてるFirefoxにreloadがかかるはず。
ファイルの更新を監視
ファイル(複数指定OK)が更新されたら指定したコマンドを実行するスクリプトをこさえる (observe-mtime):
#!/usr/bin/env perl use strict; use warnings; use Pod::Usage; use Getopt::Long; use File::Modified; my $Interval = $ENV{INTERVAL} || 3; # sec my $command; Getopt::Long::Configure("bundling"); GetOptions( 'command|c=s' => \$command, 'help|h|?' => sub { pod2usage() }, ) or pod2usage; my @files = @ARGV; ### @files ### $command my $o = File::Modified->new(files=>[ @files ]); my @changes; while (1) { if (@changes = $o->changed) { ### @changes print qx{ $command }; $o->update; } ### sleep: $Interval sleep $Interval; } __END__ =head1 SYNOPSIS observe-mtime -c command file [file...] =cut
これを10.6.25.201で動かす。
$ observe-mtime -c '~/bin/reload-firefox 10.6.25.100' foo.html bar.css baz.js
んで、foo.htmlをいじれば、数秒以内にFirefoxにreloadがかかる。
WindowsのFirefoxで確認しつつ、LinuxなマシンのEmacs+trampでリモートのWebサーバのファイルをいじってるんではげしく便利す。
追記
- reload-firefoxで、「$# ==」を「$# -eq」に直しました。Perlとshをいったりきたりしてるとよく間違います><
- id:ZIGOROu さんにMozRepl::Plugin::PageReloadというのを教えていただきました。カレー
たべたらのんだらちょっと試してみたいと思います!