同じウィンドウをいくつも開かないコンソール.appが欲しい

Mavericksになって、コンソール.appの挙動が若干変わった。例えば、すでにA.logウィンドウが存在する状態でもう一度A.logを(Finderから)開こうとした時、MountainLionまでは現在のA.logのウィンドウがアクティブになる。一方、Mavericksでは同じA.logのウィンドウがもう一つ開かれてしまう...。A.logを開く度に、同じA.logのウィンドウがどんどん増えてしまうのだ。
些細な違いなのだけど、同じウィンドウが無駄にいくつも開くのは好きになれない。できることならMountainLionまでの行儀の良い仕様に戻したい。でも、それは出来ないみたい。よって、開く時に同じ名前のウィンドウが存在するかどうか確認してから開くようにしてみた。


on open_unique_log(unix_path) tell application "Console" to launch

set file_name to do shell script "basename " & unix_path --ファイルパスからファイル名を取得する
tell application "System Events"
tell process "Console"
if file_name is not in windows's name then
do shell script "open -ga Console " & unix_path --コンソール.appでファイルパスを開く
end if
end tell
end tell
end open_unique_log

open_unique_log("~/Library/Logs/RSS_counter-http---d.hatena.ne.jp-zariganitosh-.log")


出来た、出来たと喜んで何度か実行しているうちに、タイミングによっては同じウィンドウが二つ開いてしまうことに気付いた。正確な理由は謎である。でもおそらく、コンソール.app起動直後はAppleScriptがそのGUIを認識するまでに若干のタイムラグがあるのかもしれない。Delay 0.1を追加して0.1秒待機することで、同じウィンドウが二つ開くことがなくなった。


on open_unique_log(unix_path) tell application "Console" to launch
delay 0.1
set file_name to do shell script "basename " & unix_path --ファイルパスからファイル名を取得する
tell application "System Events"
tell process "Console"
if file_name is not in windows's name then
do shell script "open -ga Console " & unix_path --コンソール.appでファイルパスを開く
end if
end tell
end tell
end open_unique_log

open_unique_log("~/Library/Logs/RSS_counter-http---d.hatena.ne.jp-zariganitosh-.log")


たった0.1秒、されどこの0.1秒が大きな仕事をする。GUIスクリプティングを使う場合、この0.1秒に気付かないと目的は達成されず、欲求は満たされないのだ。そうゆうことがよくある。

      • ちなみに、SSD環境のMacBookは0.1秒でOKかもしれないが、HDD環境ではさらに長い待機時間が必要かもしれない。