class SearchUI::Search

def start

def start
  @output.print reset
  @matches = @match.(@answer)
  @selector = [ 0, [ @selector, @matches.size - 1 ].min ].max
  result = @query.(@answer, @matches, @selector)
  @output.print clear_screen
  @output.print move_home { ?\n + result }
  loop do
    @output.print move_home { @prompt % @answer }
    case getc
    when true
      @output.print clear_screen, move_home, reset
      if result = @found.(@answer, @matches, @selector)
        return result
      else
        return nil
      end
    when false
      return nil
    end
    @matches = @match.(@answer)
    @selector = [ 0, [ @selector, @matches.size - 1 ].min ].max
    result = @query.(@answer, @matches, @selector)
    @output.print clear_screen
    @output.print move_home { ?\n + result }
  end
end