curses のメモ
じぶんはターミナルをほぼ全画面表示させているので、横幅が結構ながい。
そんなんで、ときどき右側にちょっと表示させたいなぁってことがあったりするのでそれのサンプル。
#!/usr/bin/env ruby
require "curses"
class Curses::Window
def puts(*msgs)
write(msgs.map {|m| m.to_s.chomp + "\n" }.join)
end
def write(str)
@data ||= ""
@data << str
setpos(0, 0)
l = maxy - 1
out = @data.split(/\n/).last(l).join("\n") + "\n"
addstr(out)
refresh
@data = @data.match(/(.*\n)*.*\n?\z/)[0]
end
def sync=(*)
end
end
Curses.init_screen
begin
win1 = Curses::Window.new(Curses.lines, (Curses.cols / 2).to_i, 0, 0)
win2 = Curses::Window.new(Curses.lines, (Curses.cols / 2).to_i, 0, (Curses.cols / 2).to_i+1)
Curses.refresh
$stdout = win1
$stderr = win2
load(ARGV.first, true)
ensure
Curses.close_screen
end$stdout と $stderr を画面半分ずつわけて表示させてみる。引数に ruby スクリプトをとる。
うえのをてきとうに double.rb とかで保存して http://lab.lowreal.net/trac/browser/c/mendoi/proxy.rb を実行させると、左にのっとりされたファイル、右にスキャンしたファイルが表示される。

(画面ちっちゃくして撮影)
$0 == __FILE__ やってるスクリプトはうごかないけど、とりあえず proxy.rb だけこうしたかった (ちゃんとのっとりできてるかわかりにくかった)
@data をちゃんとつめないとだめだ
http://lab.lowreal.net/trac/changeset/877