rwait - ウィンドウが出てくるまで待つプログラム
指定したウィンドウが出てくるまで待つ小さいプログラム。どこかにありそうなんだけど、ratpoison版で作ってみた。きっとウィンドウマネージャー非依存で作れるだろうけど俺はそこまでX Window Systemに精通してないので。
Xプログラムを起動し、N(1〜)枚のウィンドウが出てくるまで待ち、出てきた時点で終了するxtoolwaitというプログラムが存在するが、スクリプト内でxtoolwaitを使っても立ち上げたXプログラムがスクリプトの子プロセスにならないのでwaitが使えない。
次のRubyスクリプトはratpoison -c windowsの出力結果の1行1行を配列 _ に格納し、Rubyの式の評価結果が真になるまで待つ。俺の現在の状態では _ は次の値である。
%w[0+rxvt 1*emacs0 2-langhelp 9-Iceweasel]
短いのでソースを見れば何やってるかは明白であろう。0.1秒ごとに ratpoison -c windows を実行して、その結果の配列を引数で指定された式に渡して真になるまでループしてるだけ。
#!/usr/bin/env ruby def rwait ws = nil begin sleep 0.1 ws = `ratpoison -c windows`.sub(/ No managed windows /,'').split(/\n/) end until yield(ws) end if __FILE__ == $0 script = ARGV.first if script rwait{|_| eval script} end end
たとえばIceweaselというウィンドウが出るまで待つには、
rwait '_.grep(/Iceweasel/).first'
とすればよい。
拡張しようと思えばいくらでもできるが、実用上これで十分。