summaryrefslogtreecommitdiff
path: root/ext/curses/view.rb
blob: 5ba1a8413c42e3ebe42a4982f809b37d17c590ae (plain)
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
#!/usr/local/bin/ruby

require "curses"
include Curses

#
# main
#

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)

init_screen
#keypad(stdscr, TRUE)
nonl
cbreak
noecho
#scrollok(stdscr, TRUE)

# slurp the file
data_lines = []
fp.each_line { |l|
  data_lines.push(l)
}
fp.close


lptr = 0
while TRUE
  i = 0
  while i < lines
    setpos(i, 0)
    #clrtoeol
    addstr(data_lines[lptr + i]) #if data_lines[lptr + i]
    i += 1
  end
  refresh

  explicit = FALSE
  n = 0
  while TRUE
    c = getch.chr
    if c =~ "[0-9]" then
      n = 10 * n + c.to_i
    else
      break
    end
  end

  n = 1 if !explicit && n == 0

  case c
  when "n"  #when KEY_DOWN
    i = 0
    while i < n
      if lptr + lines < data_lines.size then
	lptr += 1
      else
	break
      end
      i += 1 
    end
    #wscrl(i)
      
  when "p"  #when KEY_UP
    i = 0
    while i < n
      if lptr > 0 then
	lptr -= 1
      else
	break
      end
      i += 1 
    end    
    #wscrl(-i)

  when "q"
    break
  end

end
close_screen