#!/usr/bin/env ruby

require 'curses'

lines = ARGF.readlines
index = 0
LINES = 10
Curses::init_screen


def update(index, lines)
	(index..index+LINES).each do |l|
		Curses::stdscr.setpos(l - index, 0)
		Curses::addstr lines[l]
	end
end

def search(index, lines)
	word = ''
	while (ch = Curses::getch) != 0x0A do
		word += ch.chr
	end
	(index..(lines.size)).each do |l|
		if lines[l].match(word) then
			return l
		end
	end
	return nil
end


update(index, lines)

while ch = Curses::getch do
	case ch
	when ?j
		index += 1 if index < lines.length - LINES
	when ?k
		index -= 1 if 0 < index
	when ?/
		index = search(index, lines) || index
	when ?q
		break
	end
	update(index, lines)
end
