From 1e760c0be3ed35874204114e7454509f740c0fe2 Mon Sep 17 00:00:00 2001 From: shyouhei Date: Wed, 22 Aug 2007 01:53:51 +0000 Subject: add tag v1_8_6_71 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_8_5_71@13189 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ruby_1_8_6/ext/curses/view2.rb | 115 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 ruby_1_8_6/ext/curses/view2.rb (limited to 'ruby_1_8_6/ext/curses/view2.rb') diff --git a/ruby_1_8_6/ext/curses/view2.rb b/ruby_1_8_6/ext/curses/view2.rb new file mode 100644 index 0000000000..18d9619216 --- /dev/null +++ b/ruby_1_8_6/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 -- cgit v1.2.3