Linux コマンド 'top' に似たテキスト ベースの UI を備えたアプリケーションを Ruby で構築したいと考えています。UI の構築に使用できるツールキットや手法は? 特に、常に更新されるコンソール ウィンドウの領域と、キーを押して表示を操作できる機能が必要です。
3 に答える
ターミナル インターフェイスについては、http://ncurses-ruby.berlios.de/を参照してください。
Ncurses はコンソール アプリに最適で、多くの言語 (または単にシェル スクリプトを使用) のバインディングを見つけることができます。呪われた gtk ( http://zemljanka.sourceforge.net/cursed/ ) もありますが、その作業はかなり前に停止したと思います。
プラットフォームについては触れていませんが、OS/X には Geektool ( http://projects.tynsoe.org/en/geektool/ ) という素晴らしい小さなアプリがあり、スクリプトの出力をデスクトップに置くことができます。小さな Ruby スクリプトを使用して、トップ プロセス リストを生成します。
puts %x{uptime}
IO.popen("ps aruxl") { |readme|
pslist = readme.to_a
pslist.shift # remove header line
pslist.each_with_index { |i,index|
ps = i.split
psh = { user: ps[0], pid: ps[1], pcpu: ps[2], pmem: ps[3],
vsz: ps[4], rss: ps[5], tty: ps[6], stat: ps[7],
time: ps[8], uid: ps[9], ppid: ps[10], cpu: ps[11], pri: ps[12],
nice: ps[13], wchan: ps[14], cmd: ps[16..ps.size].join(" ") }
printf("%-6s %-6s %-6s %s", "PID:", "%CPU:", "%Mem", "Command\n") if index == 0
printf("%-6d %-6.1f %-6.1f %s\n",
psh[:pid].to_i, psh[:pcpu].to_f, psh[:pmem].to_f, psh[:cmd]) if index < 10
}
}
(これはおそらくもっと良いかもしれませんが、これは私が今までに書いた最初の Ruby スクリプトであり、機能するので、改善するために再訪したことはありません。また、入力も必要ありません。とにかく、いくつかのアイデアを得るのに役立つかもしれません)
stflがありますが、ルビーバインディングが維持されているかどうかはわかりません。ncursesはおそらくあなたの最善の策です。