diff options
Diffstat (limited to 'ruby_1_8_5/ext/curses/view2.rb')
-rw-r--r-- | ruby_1_8_5/ext/curses/view2.rb | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/ruby_1_8_5/ext/curses/view2.rb b/ruby_1_8_5/ext/curses/view2.rb new file mode 100644 index 0000000000..18d9619216 --- /dev/null +++ b/ruby_1_8_5/ext/curses/view2.rb @@ -0,0 +1,115 @@ +#!/usr/local/bin/ruby + +require "curses" + +if ARGV.size != 1 then + printf("usage: view file\n"); + exit +end +begin + fp = open(ARGV[0], "r") +rescue + raise "cannot open file: #{ARGV[1]}" +end + +# signal(SIGINT, finish) + +Curses.init_screen +Curses.nonl +Curses.cbreak +Curses.noecho + +$screen = Curses.stdscr + +$screen.scrollok(true) +#$screen.keypad(true) + +# slurp the file +$data_lines = [] +fp.each_line { |l| + $data_lines.push(l.chop) +} +fp.close + +$top = 0 +$data_lines[0..$screen.maxy-1].each_with_index{|line, idx| + $screen.setpos(idx, 0) + $screen.addstr(line) +} +$screen.setpos(0,0) +$screen.refresh + +def scroll_up + if( $top > 0 ) + $screen.scrl(-1) + $top -= 1 + str = $data_lines[$top] + if( str ) + $screen.setpos(0, 0) + $screen.addstr(str) + end + return true + else + return false + end +end + +def scroll_down + if( $top + $screen.maxy < $data_lines.length ) + $screen.scrl(1) + $top += 1 + str = $data_lines[$top + $screen.maxy - 1] + if( str ) + $screen.setpos($screen.maxy - 1, 0) + $screen.addstr(str) + end + return true + else + return false + end +end + +while true + result = true + c = Curses.getch + case c + when Curses::KEY_DOWN, Curses::KEY_CTRL_N + result = scroll_down + when Curses::KEY_UP, Curses::KEY_CTRL_P + result = scroll_up + when Curses::KEY_NPAGE, ?\s # white space + for i in 0..($screen.maxy - 2) + if( ! scroll_down ) + if( i == 0 ) + result = false + end + break + end + end + when Curses::KEY_PPAGE + for i in 0..($screen.maxy - 2) + if( ! scroll_up ) + if( i == 0 ) + result = false + end + break + end + end + when Curses::KEY_LEFT, Curses::KEY_CTRL_T + while( scroll_up ) + end + when Curses::KEY_RIGHT, Curses::KEY_CTRL_B + while( scroll_down ) + end + when ?q + break + else + $screen.setpos(0,0) + $screen.addstr("[unknown key `#{Curses.keyname(c)}'=#{c}] ") + end + if( !result ) + Curses.beep + end + $screen.setpos(0,0) +end +Curses.close_screen |