def handle_char char
if char == "\n"
handler.call self, @data[@index] if handler
elsif char == :up
@index -= 1 if @index > 0
@offset -= 1 if @offset > @index
elsif char == :down
if @index < @data.size - 1
@index += 1
@offset += 1 if @offset + fit_data[1] <= @index
end
elsif char == :pageup
@offset = [0, @offset - fit_data_back[1]].max
@index = [@offset + fit_data[1] - 1, @index].min
elsif char == :pagedown
@offset = [@data.size - 1, @offset + fit_data[1]].min
@offset = [@offset, @data.size - fit_data_back(@data.size)[1]].min
@index = [@offset, @index].max
end
redraw
end