/usr/share/doc/ruby1.8-examples/examples/curses/view2.rb is in ruby1.8-examples 1.8.7.352-2ubuntu1.6.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | #!/usr/bin/ruby1.8
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
|