root/lang/ruby/cocproxy/double_screen.rb @ 315

Revision 315, 1.7 kB (checked in by cho45, 7 years ago)

lang/ruby/cocproxy:

のっとりプロキシの追加 from http://svn.lab.lowreal.net/lowreal/c/mendoi/

  • Property svn:executable set to *
Line 
1#!/usr/bin/env ruby
2
3require "curses"
4
5class 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
27end
28
29Curses.init_screen
30begin
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
88ensure
89        Curses.close_screen
90end
Note: See TracBrowser for help on using the browser.