| Line | |
|---|
| 1 | #!/usr/bin/env ruby |
|---|
| 2 | |
|---|
| 3 | require "curses" |
|---|
| 4 | |
|---|
| 5 | class Curses::Window |
|---|
| 6 | |
|---|
| 7 | def puts(*msgs) |
|---|
| 8 | write(msgs.map {|m| m.to_s.chomp + "\n" }.join) |
|---|
| 9 | end |
|---|
| 10 | |
|---|
| 11 | def write(str) |
|---|
| 12 | @data ||= "" |
|---|
| 13 | @data << str |
|---|
| 14 | |
|---|
| 15 | setpos(0, 0) |
|---|
| 16 | l = maxy - 1 |
|---|
| 17 | lines = @data.split(/\n/) |
|---|
| 18 | out = lines.last(l).join("\n") + "\n" |
|---|
| 19 | addstr(out) |
|---|
| 20 | refresh |
|---|
| 21 | @data = @data.match(/(.*\n)*.*\n?\z/)[0] |
|---|
| 22 | end |
|---|
| 23 | |
|---|
| 24 | def sync=(*) |
|---|
| 25 | end |
|---|
| 26 | |
|---|
| 27 | end |
|---|
| 28 | |
|---|
| 29 | Curses.init_screen |
|---|
| 30 | begin |
|---|
| 31 | win1 = Curses::Window.new(Curses.lines, (Curses.cols / 2).to_i, 0, 0) |
|---|
| 32 | win2 = Curses::Window.new(Curses.lines, (Curses.cols / 2).to_i, 0, (Curses.cols / 2).to_i+1) |
|---|
| 33 | Thread.start do |
|---|
| 34 | cols = Curses.cols |
|---|
| 35 | lines = Curses.lines |
|---|
| 36 | loop do |
|---|
| 37 | sleep 1 |
|---|
| 38 | ncols = Curses.cols |
|---|
| 39 | nlines = Curses.lines |
|---|
| 40 | # resize |
|---|
| 41 | if (ncols != cols) || |
|---|
| 42 | (nlines != nlines) |
|---|
| 43 | win1.clear |
|---|
| 44 | win2.clear |
|---|
| 45 | win1.close |
|---|
| 46 | win2.close |
|---|
| 47 | nwin1 = Curses::Window.new(Curses.lines, (Curses.cols / 2).to_i, 0, 0) |
|---|
| 48 | nwin2 = Curses::Window.new(Curses.lines, (Curses.cols / 2).to_i, 0, (Curses.cols / 2).to_i+1) |
|---|
| 49 | nwin1.instance_variable_set(:@data, win1.instance_variable_get(:@data)) |
|---|
| 50 | nwin2.instance_variable_set(:@data, win2.instance_variable_get(:@data)) |
|---|
| 51 | win1 = nwin1 |
|---|
| 52 | win2 = nwin2 |
|---|
| 53 | $stdout = win1 |
|---|
| 54 | $stderr = win2 |
|---|
| 55 | win1.write "" |
|---|
| 56 | win2.write "" |
|---|
| 57 | Curses.clear |
|---|
| 58 | end |
|---|
| 59 | cols = ncols |
|---|
| 60 | nlines = nlines |
|---|
| 61 | end |
|---|
| 62 | end |
|---|
| 63 | |
|---|
| 64 | Curses.refresh |
|---|
| 65 | |
|---|
| 66 | # Thread.start(win1) do |win1| |
|---|
| 67 | # loop do |
|---|
| 68 | # win1.write "111" |
|---|
| 69 | # win1.puts "#1:#{Time.now.to_s}" |
|---|
| 70 | # sleep 0.1 |
|---|
| 71 | # end |
|---|
| 72 | # end |
|---|
| 73 | # Thread.start(win2) do |win2| |
|---|
| 74 | # loop do |
|---|
| 75 | # win2.puts "#2:#{Time.now.to_s}" |
|---|
| 76 | # sleep 2 |
|---|
| 77 | # end |
|---|
| 78 | # end |
|---|
| 79 | # sleep |
|---|
| 80 | |
|---|
| 81 | $stdout = win1 |
|---|
| 82 | $stderr = win2 |
|---|
| 83 | |
|---|
| 84 | if $0 == __FILE__ |
|---|
| 85 | load(ARGV.first, true) |
|---|
| 86 | end |
|---|
| 87 | |
|---|
| 88 | ensure |
|---|
| 89 | Curses.close_screen |
|---|
| 90 | end |
|---|