class Pepin::InteractiveSearch

Attributes

query[R]
view[R]

Public Class Methods

new(list, view: nil, filter: nil) click to toggle source
# File lib/pepin/interactive_search.rb, line 5
def initialize(list, view: nil, filter: nil)
  @query      = Query.new(list, filter: filter || GrepFilter)
  @view_klass = view || CursesView
end

Public Instance Methods

Private Instance Methods

handle_backspace(*) click to toggle source
# File lib/pepin/interactive_search.rb, line 85
def handle_backspace(*)
  query.delete_behind_char_from view.cursor

  view.move_cursor -1
end
handle_ctrl_a(*) click to toggle source
# File lib/pepin/interactive_search.rb, line 61
def handle_ctrl_a(*)
  view.move_cursor_to_first
end
handle_ctrl_c(*) click to toggle source
# File lib/pepin/interactive_search.rb, line 91
def handle_ctrl_c(*)
  exit
end
handle_ctrl_d(*) click to toggle source
# File lib/pepin/interactive_search.rb, line 95
def handle_ctrl_d(*)
  exit if query.empty?
end
handle_ctrl_e(*) click to toggle source
# File lib/pepin/interactive_search.rb, line 71
def handle_ctrl_e(*)
  view.move_cursor_to_last
end
handle_ctrl_k(*) click to toggle source
# File lib/pepin/interactive_search.rb, line 75
def handle_ctrl_k(*)
  query.delete_ahead_from view.cursor
end
handle_ctrl_u(*) click to toggle source
# File lib/pepin/interactive_search.rb, line 79
def handle_ctrl_u(*)
  query.delete_behind_from view.cursor

  view.move_cursor_to_first
end
handle_ctrl_w(*) click to toggle source
# File lib/pepin/interactive_search.rb, line 65
def handle_ctrl_w(*)
  len = query.delete_behind_word_from(view.cursor)

  view.move_cursor -len
end
handle_cursor_left(*) click to toggle source
# File lib/pepin/interactive_search.rb, line 103
def handle_cursor_left(*)
  view.move_cursor -1
end
handle_cursor_right(*) click to toggle source
# File lib/pepin/interactive_search.rb, line 99
def handle_cursor_right(*)
  view.move_cursor 1
end
handle_enter(*) click to toggle source
# File lib/pepin/interactive_search.rb, line 57
def handle_enter(*)
  raise StopIteration
end
handle_resize(*) click to toggle source
# File lib/pepin/interactive_search.rb, line 107
def handle_resize(*)
  view.refresh_winsize
end
handle_string(ch) click to toggle source
# File lib/pepin/interactive_search.rb, line 52
def handle_string(ch)
  query.add_char ch
  view.move_cursor 1
end
handle_unknown(*) click to toggle source
# File lib/pepin/interactive_search.rb, line 111
def handle_unknown(*)
  # Intentionally NOP
end
result() click to toggle source
# File lib/pepin/interactive_search.rb, line 48
def result
  query.search.first
end
search_interactive() click to toggle source
# File lib/pepin/interactive_search.rb, line 20
def search_interactive
  while ch = view.input_char
    handler =
      case ch
      when String                                         then :handle_string
      when Curses::KEY_ENTER, 10                          then :handle_enter
      when Curses::KEY_CTRL_A                             then :handle_ctrl_a
      when Curses::KEY_CTRL_W                             then :handle_ctrl_w
      when Curses::KEY_CTRL_E                             then :handle_ctrl_e
      when Curses::KEY_CTRL_K                             then :handle_ctrl_k
      when Curses::KEY_CTRL_U                             then :handle_ctrl_u
      when Curses::KEY_BACKSPACE, Curses::KEY_CTRL_H, 127 then :handle_backspace
      when Curses::KEY_CTRL_C                             then :handle_ctrl_c
      when Curses::KEY_CTRL_D                             then :handle_ctrl_d
      when Curses::KEY_CTRL_F, Curses::KEY_RIGHT          then :handle_cursor_right
      when Curses::KEY_CTRL_B, Curses::KEY_LEFT           then :handle_cursor_left
      when Curses::KEY_RESIZE                             then :handle_resize
      else                                                     :handle_unknown
      end

    send handler, ch
  end

  result
rescue StopIteration
  result
end