class SearchUI::Search

def getc

def getc
  system 'stty raw -echo'
  c = STDIN.getc
  system 'stty cooked echo'
  case c
  when "\x03"
    false
  when "\e"
    STDIN.getc == ?[ or return nil
    STDIN.getc =~ /\A([AB])\z/ or return nil
    if $1 == ?A
      @selector -= 1
    else
      @selector += 1
    end
    @selector = [ @selector, 0 ].max
    nil
  when ?\r
    true
  when "\x7f"
    @selector = 0
    @answer.chop!
    nil
  when "\v"
    @selector = 0
    @answer.clear
    nil
  when /\A[\x00-\x1f]\z/
    nil
  else
    @selector = 0
    @answer << c
    nil
  end
end